From 12f5f98725d28893345e31dd46e75f1badc96d3d Mon Sep 17 00:00:00 2001 From: Robert Zacherl Date: Thu, 21 Mar 2019 09:43:36 +0100 Subject: [PATCH] Added @XMLText decorator supporting optional 'required' option --- .gitignore | 3 + index.ts | 26 +- lib/annotations/XMLText.ts | 14 + lib/interfaces/ICustomXMLTextOptions.ts | 8 + lib/interfaces/IFullXMLTextOptions.ts | 6 + lib/interfaces/IXMLTextOptions.ts | 4 + lib/models/XMLAttribute.ts | 41 +- lib/models/XMLChild.ts | 90 +- lib/models/XMLElement.ts | 60 +- lib/models/XMLText.ts | 60 ++ lib/utils.ts | 12 +- package-lock.json | 1158 +++++------------------ tslint.json | 12 +- 13 files changed, 444 insertions(+), 1050 deletions(-) create mode 100644 lib/annotations/XMLText.ts create mode 100644 lib/interfaces/ICustomXMLTextOptions.ts create mode 100644 lib/interfaces/IFullXMLTextOptions.ts create mode 100644 lib/interfaces/IXMLTextOptions.ts create mode 100644 lib/models/XMLText.ts diff --git a/.gitignore b/.gitignore index 56987e8..9408d37 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ # ide .idea +# vscode +.vscode + # libraries node_modules diff --git a/index.ts b/index.ts index fa71e59..3dbce30 100644 --- a/index.ts +++ b/index.ts @@ -1,15 +1,17 @@ -export {DEFAULT_ATTRIBUTE_PROPERTY, ns} from './lib/utils'; +export { DEFAULT_ATTRIBUTE_PROPERTY, DEFAULT_TEXT_PROPERTY, ns } from './lib/utils'; -export {XMLAttribute} from './lib/annotations/XMLAttribute'; -export {XMLChild} from './lib/annotations/XMLChild'; -export {XMLElement} from './lib/annotations/XMLElement'; +export { XMLText } from './lib/annotations/XMLText'; +export { XMLAttribute } from './lib/annotations/XMLAttribute'; +export { XMLChild } from './lib/annotations/XMLChild'; +export { XMLElement } from './lib/annotations/XMLElement'; -export {XMLElement as xml} from './lib/models/XMLElement'; -export {XMLAttribute as xmlAttribute} from './lib/models/XMLAttribute'; -export {XMLChild as xmlChild} from './lib/models/XMLChild'; - -export {ISchemaOptions} from './lib/interfaces/ISchemaOptions'; -export {IXMLAttributeOptions} from './lib/interfaces/IXMLAttributeOptions'; -export {IXMLChildOptions} from './lib/interfaces/IXMLChildOptions'; -export {IXMLElementOptions} from './lib/interfaces/IXMLElementOptions'; +export { XMLElement as xml } from './lib/models/XMLElement'; +export { XMLText as xmlText } from './lib/models/XMLText'; +export { XMLAttribute as xmlAttribute } from './lib/models/XMLAttribute'; +export { XMLChild as xmlChild } from './lib/models/XMLChild'; +export { ISchemaOptions } from './lib/interfaces/ISchemaOptions'; +export { IXMLTextOptions } from './lib/interfaces/IXMLTextOptions'; +export { IXMLAttributeOptions } from './lib/interfaces/IXMLAttributeOptions'; +export { IXMLChildOptions } from './lib/interfaces/IXMLChildOptions'; +export { IXMLElementOptions } from './lib/interfaces/IXMLElementOptions'; diff --git a/lib/annotations/XMLText.ts b/lib/annotations/XMLText.ts new file mode 100644 index 0000000..7d25fec --- /dev/null +++ b/lib/annotations/XMLText.ts @@ -0,0 +1,14 @@ +import "reflect-metadata"; +import { XMLText as XMLTextModel } from "../models/XMLText"; +import { IXMLTextOptions } from "../interfaces/IXMLTextOptions"; + +export function XMLText(target: any, key: string, descriptor?: TypedPropertyDescriptor): void; +export function XMLText(options: IXMLTextOptions): Function; +export function XMLText(...args: any[]): void | Function { + if (args.length === 1) { + return (target: any, key: string, descriptor?: TypedPropertyDescriptor) => { + return XMLTextModel.annotate(target, key, args[0], descriptor); + }; + } + return XMLTextModel.annotate(args[0], args[1], void 0, args[2]); +} diff --git a/lib/interfaces/ICustomXMLTextOptions.ts b/lib/interfaces/ICustomXMLTextOptions.ts new file mode 100644 index 0000000..6273985 --- /dev/null +++ b/lib/interfaces/ICustomXMLTextOptions.ts @@ -0,0 +1,8 @@ +import { IXMLTextOptions } from './IXMLTextOptions'; + +export interface ICustomXMLTextOptions extends IXMLTextOptions { + name: string; + getter?: (entity?: any) => any; + value?: any; + restrictTo?: any[]; +} diff --git a/lib/interfaces/IFullXMLTextOptions.ts b/lib/interfaces/IFullXMLTextOptions.ts new file mode 100644 index 0000000..a5d4984 --- /dev/null +++ b/lib/interfaces/IFullXMLTextOptions.ts @@ -0,0 +1,6 @@ +import { IXMLTextOptions } from './IXMLTextOptions'; + +export interface IFullXMLTextOptions extends IXMLTextOptions { + name: string; + getter: (entity: any) => any; +} diff --git a/lib/interfaces/IXMLTextOptions.ts b/lib/interfaces/IXMLTextOptions.ts new file mode 100644 index 0000000..4a50cb5 --- /dev/null +++ b/lib/interfaces/IXMLTextOptions.ts @@ -0,0 +1,4 @@ +export interface IXMLTextOptions { + name?: string; + required?: boolean; +} diff --git a/lib/models/XMLAttribute.ts b/lib/models/XMLAttribute.ts index bdc8fbd..557c74e 100644 --- a/lib/models/XMLAttribute.ts +++ b/lib/models/XMLAttribute.ts @@ -1,27 +1,28 @@ -import {XMLElement} from "./XMLElement"; -import {IXMLAttributeOptions} from "../interfaces/IXMLAttributeOptions"; -import {IFullXMLAttributeOptions} from "../interfaces/IFullXMLAttributeOptions"; -import {ICustomXMLAttributeOptions} from "../interfaces/ICustomXMLAttributeOptions"; -import {createCustomGetter} from "../utils"; +import { XMLElement } from './XMLElement'; +import { IXMLAttributeOptions } from '../interfaces/IXMLAttributeOptions'; +import { IFullXMLAttributeOptions } from '../interfaces/IFullXMLAttributeOptions'; +import { ICustomXMLAttributeOptions } from '../interfaces/ICustomXMLAttributeOptions'; +import { createCustomGetter } from '../utils'; export class XMLAttribute { - private name: string; - static annotate(target: any, - key: string, - options: IXMLAttributeOptions = {}, - descriptor?: TypedPropertyDescriptor): void { - + static annotate( + target: any, + key: string, + options: IXMLAttributeOptions = {}, + descriptor?: TypedPropertyDescriptor + ): void { const element = XMLElement.getOrCreateIfNotExists(target); - const fullOptions = Object.assign({ + const fullOptions = { getter(entity: any): any { if (descriptor && descriptor.get) { return descriptor.get.call(entity); } return entity[key]; - } - }, options); + }, + ...options + }; fullOptions.name = options.name || key; @@ -33,35 +34,31 @@ export class XMLAttribute { const hasValue = options.value !== void 0; if ((hasGetter && hasValue) || (!hasGetter && !hasValue)) { - throw new Error(`Either a getter or a value has to be defined for attribute "${options.name}".`); } - const fullOptions = Object.assign({ + const fullOptions = { getter: createCustomGetter(options), - }, options); - + ...options + }; + return new XMLAttribute(fullOptions); } setSchema(target: any, entity: any): void { - const value = this.options.getter.call(null, entity); if (value !== void 0) { target[this.name] = value; } else if (this.options.required) { - throw new Error(`Attribute ${this.name} is required, but empty.`); } } private constructor(private options: IFullXMLAttributeOptions) { - this.name = options.name; if (options.namespace) { - this.name = options.namespace + ':' + this.name; } } diff --git a/lib/models/XMLChild.ts b/lib/models/XMLChild.ts index 6e069cb..3cc6cc8 100644 --- a/lib/models/XMLChild.ts +++ b/lib/models/XMLChild.ts @@ -1,34 +1,37 @@ import 'es6-shim'; -import {XMLElement} from "./XMLElement"; -import * as _ from "lodash"; -import {ns} from "../utils"; -import {IXMLChildOptions} from "../interfaces/IXMLChildOptions"; -import {IFullXMLChildOptions} from "../interfaces/IFullXMLChildOptions"; -import {ICustomXMLChildOptions} from "../interfaces/ICustomXMLChildOptions"; -import {createCustomGetter} from "../utils"; -import {ISchemaOptions} from "../interfaces/ISchemaOptions"; - -type Tree = {name: string; attributes: {[name: string]: string}}; +import { XMLElement } from './XMLElement'; +import * as _ from 'lodash'; +import { IXMLChildOptions } from '../interfaces/IXMLChildOptions'; +import { IFullXMLChildOptions } from '../interfaces/IFullXMLChildOptions'; +import { ICustomXMLChildOptions } from '../interfaces/ICustomXMLChildOptions'; +import { createCustomGetter, ns } from '../utils'; +import { ISchemaOptions } from '../interfaces/ISchemaOptions'; + +interface ITree { + name: string; + attributes: { [name: string]: string }; +} export class XMLChild { - private name: string; - static annotate(target: any, - key: string, - options: IXMLChildOptions = {}, - descriptor?: TypedPropertyDescriptor): void { - + static annotate( + target: any, + key: string, + options: IXMLChildOptions = {}, + descriptor?: TypedPropertyDescriptor + ): void { const element = XMLElement.getOrCreateIfNotExists(target); - const fullOptions = Object.assign({ + const fullOptions = { getter(entity: any): any { if (descriptor && descriptor.get) { return descriptor.get.call(entity); } return entity[key]; - } - }, options); + }, + ...options + }; fullOptions.name = options.name || key; @@ -40,37 +43,32 @@ export class XMLChild { const hasValue = options.value !== void 0; if ((hasGetter && hasValue) || (!hasGetter && !hasValue)) { - throw new Error(`Either a getter or a value has to be defined for attribute "${options.name}".`); } - const fullOptions = Object.assign({ + const fullOptions = { getter: createCustomGetter(options), - }, options); + ...options + }; return new XMLChild(fullOptions); } setSchema(target: any, parentEntity: any, isAsync: boolean = false, schemaOptions: ISchemaOptions): any { - const entity = this.options.getter.call(null, parentEntity); const process = (schema: any) => { - if (schema !== void 0 && schema !== null) { - - const structure: string|undefined = this.options.implicitStructure; + const structure: string | undefined = this.options.implicitStructure; if (structure) { - // a schema can be an array or an object, // so we ensure that this is always an // array and don't have to distinguish [].concat(schema).forEach(_schema => this.resolveImplicitStructure(structure, target, _schema)); } else { - if (entity === schema && this.options.nestedNamespace) { - let nsSchema = {}; + const nsSchema = {}; - for (let key in schema) { + for (const key in schema) { if (schema.hasOwnProperty(key)) { nsSchema[ns(this.options.nestedNamespace, key)] = schema[key]; } @@ -85,17 +83,13 @@ export class XMLChild { }; if (isAsync) { - - XMLElement.getSchemaAsync(entity, schemaOptions) - .then(schema => process(schema)); + XMLElement.getSchemaAsync(entity, schemaOptions).then(schema => process(schema)); } else { - process(XMLElement.getSchema(entity, schemaOptions)); } } private constructor(private options: IFullXMLChildOptions) { - this.name = options.name; if (options.stripPluralS) { @@ -110,22 +104,24 @@ export class XMLChild { private resolveImplicitStructure(structure: string, target: any, schema: any): void { const PLACEHOLDER = '$'; - if (!new RegExp(`.\\.\\${PLACEHOLDER}`).test(structure) && + if ( + !new RegExp(`.\\.\\${PLACEHOLDER}`).test(structure) && !new RegExp(`.\\.\\${PLACEHOLDER}\\..`).test(structure) && - !new RegExp(`\\${PLACEHOLDER}\\..`).test(structure)) { + !new RegExp(`\\${PLACEHOLDER}\\..`).test(structure) + ) { throw new Error(`Structure '${structure}' is invalid`); } - let tree = this.getImplicitNodeTree(structure); + const tree = this.getImplicitNodeTree(structure); const indexOfPlaceholder = tree.findIndex(node => node.name === PLACEHOLDER); tree[indexOfPlaceholder].name = this.name; for (let i = 0; i < tree.length; i++) { - let node = tree[i]; + const node = tree[i]; if (!Array.isArray(target)) { if (!target[node.name]) { if (i !== indexOfPlaceholder) { - target[node.name] = {'@': node.attributes}; + target[node.name] = { '@': node.attributes }; } else { target[node.name] = []; } @@ -140,19 +136,18 @@ export class XMLChild { if (Array.isArray(target)) { target.push(schema); } else { - target[node.name] = _.merge(schema, {'@': node.attributes}); + target[node.name] = _.merge(schema, { '@': node.attributes }); } } } } - private getImplicitNodeTree(treeString: string): Tree[] { + private getImplicitNodeTree(treeString: string): ITree[] { const REGEX = new RegExp('([a-z\\w0-9-\\$\\:]+?)\\[(.*?)\\]|([a-z\\w0-9-\\$\\:]+)', 'gi'); let match = REGEX.exec(treeString); - const tree: Tree[] = []; + const tree: ITree[] = []; while (match !== null) { - const tagName = match[1] || match[3]; const attributeString = match[2]; tree.push({ @@ -164,14 +159,11 @@ export class XMLChild { return tree; } - private getAttributes(attributeString: string): {[attrName: string]: string} { - - let attributes = {}; + private getAttributes(attributeString: string): { [attrName: string]: string } { + const attributes = {}; if (attributeString) { - attributeString.split(',').forEach(val => { - const attributesArr = val.split('='); attributes[attributesArr[0]] = attributesArr[1]; }); diff --git a/lib/models/XMLElement.ts b/lib/models/XMLElement.ts index 438af7a..2de0c7a 100644 --- a/lib/models/XMLElement.ts +++ b/lib/models/XMLElement.ts @@ -1,11 +1,12 @@ import 'reflect-metadata'; -import * as Promise from "bluebird"; -import {XMLChild} from "./XMLChild"; -import {XMLAttribute} from "./XMLAttribute"; +import * as Promise from 'bluebird'; +import { XMLChild } from './XMLChild'; +import { XMLAttribute } from './XMLAttribute'; import * as js2xmlparser from 'js2xmlparser'; -import {DEFAULT_ATTRIBUTE_PROPERTY} from "../utils"; -import {IXMLElementOptions} from "../interfaces/IXMLElementOptions"; -import {ISchemaOptions} from "../interfaces/ISchemaOptions"; +import { DEFAULT_ATTRIBUTE_PROPERTY } from '../utils'; +import { IXMLElementOptions } from '../interfaces/IXMLElementOptions'; +import { ISchemaOptions } from '../interfaces/ISchemaOptions'; +import { XMLText } from './XMLText'; const PARSER_OPTIONS = { declaration: { @@ -15,16 +16,15 @@ const PARSER_OPTIONS = { const META_KEY = 'xml:element'; export class XMLElement { - private attributes: XMLAttribute[]; private children: XMLChild[]; + private text: XMLText; private root?: string; static serialize(entity: any): string; static serialize(root: string, entity: any): string; static serialize(...args: any[]): string { - - const {root, entity} = this.getRootAndEntity(args); + const { root, entity } = this.getRootAndEntity(args); const schema = this.getSchema(entity); return js2xmlparser.parse(root, schema, PARSER_OPTIONS); @@ -33,22 +33,17 @@ export class XMLElement { static serializeAsync(entity: any): Promise; static serializeAsync(root: string, entity: any): Promise; static serializeAsync(...args: any[]): Promise { + const { root, entity } = this.getRootAndEntity(args); - const {root, entity} = this.getRootAndEntity(args); - - return this.getSchemaAsync(entity) - .then(schema => js2xmlparser.parse(root, schema, PARSER_OPTIONS)) - ; + return this.getSchemaAsync(entity).then(schema => js2xmlparser.parse(root, schema, PARSER_OPTIONS)); } static getSchema(entities: any[], schemaOptions?: ISchemaOptions): any; static getSchema(entity: any, schemaOptions?: ISchemaOptions): any; static getSchema(arg: any, schemaOptions: ISchemaOptions = {}): any { - if (arg === void 0) return; if (Array.isArray(arg)) { - return arg.map(entity => this.processSchema(entity, false, schemaOptions)); } return this.processSchema(arg, false, schemaOptions); @@ -57,28 +52,23 @@ export class XMLElement { static getSchemaAsync(entities: any[], schemaOptions?: ISchemaOptions): Promise; static getSchemaAsync(entity: any, schemaOptions?: ISchemaOptions): Promise; static getSchemaAsync(arg: any, schemaOptions: ISchemaOptions = {}): Promise { - const processAsync = (entity: any) => { - return Promise.resolve(this.processSchema(entity, true, schemaOptions)); }; if (arg === void 0) Promise.resolve(); if (Array.isArray(arg)) { - return Promise.all(arg.map(entity => processAsync(entity))); } return processAsync(arg); } - static getXMLElement(target: any): XMLElement|undefined { - + static getXMLElement(target: any): XMLElement | undefined { return Reflect.getMetadata(META_KEY, target); } static setXMLElement(target: any, element: XMLElement): void { - return Reflect.defineMetadata(META_KEY, element, target); } @@ -86,7 +76,6 @@ export class XMLElement { let element = this.getXMLElement(target); if (!element) { - element = new XMLElement(); this.setXMLElement(target, element); } @@ -95,28 +84,22 @@ export class XMLElement { } static annotate(target: any, options: IXMLElementOptions): void { - - let element = this.getOrCreateIfNotExists(target); + const element = this.getOrCreateIfNotExists(target); element.root = options.root; } - private static processSchema(entity: any, - isAsync: boolean, - schemaOptions: ISchemaOptions): any { + private static processSchema(entity: any, isAsync: boolean, schemaOptions: ISchemaOptions): any { if (entity && typeof entity === 'object') { - const element = XMLElement.getXMLElement(entity); if (element) { - return element.getSchema(entity, isAsync, schemaOptions); } } return entity; } - private static getRootAndEntity(args: any[]): {root: string, entity: any} { - + private static getRootAndEntity(args: any[]): { root: string; entity: any } { let entity; let root; @@ -136,28 +119,33 @@ export class XMLElement { throw new Error('No root defined for entity: ' + JSON.stringify(entity)); } - return {root, entity}; + return { root, entity }; } addAttribute(attribute: XMLAttribute): void { - if (!this.attributes) this.attributes = []; this.attributes.push(attribute); } addChild(child: XMLChild): void { - if (!this.children) this.children = []; this.children.push(child); } - private getSchema(entity: any, isAsync: boolean, schemaOptions: ISchemaOptions): void { + addText(text: XMLText): void { + this.text = text; + } + private getSchema(entity: any, isAsync: boolean, schemaOptions: ISchemaOptions): void { const object: any = {}; const attrProperty = schemaOptions.attrContainerName || DEFAULT_ATTRIBUTE_PROPERTY; + if (this.text) { + this.text.setSchema(object, entity); + } + if (this.attributes) { object[attrProperty] = {}; this.attributes.forEach(attr => attr.setSchema(object[attrProperty], entity)); diff --git a/lib/models/XMLText.ts b/lib/models/XMLText.ts new file mode 100644 index 0000000..2341509 --- /dev/null +++ b/lib/models/XMLText.ts @@ -0,0 +1,60 @@ +import { XMLElement } from './XMLElement'; +import { IXMLTextOptions } from '../interfaces/IXMLTextOptions'; +import { IFullXMLTextOptions } from '../interfaces/IFullXMLTextOptions'; +import { ICustomXMLTextOptions } from '../interfaces/ICustomXMLTextOptions'; +import { createCustomGetter, DEFAULT_TEXT_PROPERTY } from '../utils'; + +export class XMLText { + private name: string; + + static annotate( + target: any, + key: string, + options: IXMLTextOptions = {}, + descriptor?: TypedPropertyDescriptor + ): void { + const element = XMLElement.getOrCreateIfNotExists(target); + const fullOptions = { + getter(entity: any): any { + if (descriptor && descriptor.get) { + return descriptor.get.call(entity); + } + return entity[key]; + }, + ...options + }; + + this.prototype.name = key; + fullOptions.name = key; + + element.addText(new XMLText(fullOptions as IFullXMLTextOptions)); + } + + static createText(options: ICustomXMLTextOptions): XMLText { + const hasGetter = typeof options.getter === 'function'; + const hasValue = options.value !== void 0; + + if ((hasGetter && hasValue) || (!hasGetter && !hasValue)) { + throw new Error(`Either a getter or a value has to be defined for text "${options.name}".`); + } + + const fullOptions = { + getter: createCustomGetter(options), + ...options + }; + + return new XMLText(fullOptions); + } + + setSchema(target: any, entity: any): void { + const value = this.options.getter.call(null, entity); + + if (value !== void 0) { + target[DEFAULT_TEXT_PROPERTY] = value; + } else if (this.options.required) { + throw new Error(`Text ${this.name} is required, but empty.`); + } + } + + private constructor(private options: IFullXMLTextOptions) {} +} diff --git a/lib/utils.ts b/lib/utils.ts index b05b1f4..3178b28 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -1,19 +1,23 @@ - export const DEFAULT_ATTRIBUTE_PROPERTY = '@'; +export const DEFAULT_TEXT_PROPERTY = '#'; export function ns(namepsace: string, value: string): string { return namepsace + ':' + value; } -export function createCustomGetter(_options: {restrictTo?: any[], getter?: (entity: any) => any, value?: any}): (entity: any) => any { +export function createCustomGetter(_options: { + restrictTo?: any[]; + getter?: (entity: any) => any; + value?: any; +}): (entity: any) => any { if (_options.restrictTo) { const restrictTo = _options.restrictTo as any[]; return entity => { if (restrictTo.indexOf(entity) !== -1) { - return (_options.getter ? _options.getter(entity) : _options.value); + return _options.getter ? _options.getter(entity) : _options.value; } }; } - return (_options.getter || (() => _options.value)); + return _options.getter || (() => _options.value); } diff --git a/package-lock.json b/package-lock.json index 46f80ff..23de5f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "xml-decorators", - "version": "1.0.5", + "version": "1.0.6", "lockfileVersion": 1, "requires": true, "dependencies": { "@types/bluebird": { - "version": "3.0.36", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.0.36.tgz", - "integrity": "sha1-uATd0bGggs8+ITffp7Uof0N8Kbc=" + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.22.tgz", + "integrity": "sha512-wQamz3CYZCz9QVxhPOF+Odu2jZifcXkGJDff7580sx/TCR6/9Zsgv+iGe2/o4Upcs0RDFLVJuEtYSEFeAqDTSA==" }, "@types/chai": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-3.4.34.tgz", - "integrity": "sha1-1TNXkoI7sJzd1eOMPSEbcJGDhU0=", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.4.tgz", + "integrity": "sha512-h6+VEw2Vr3ORiFCyyJmcho2zALnUq9cvdB/IO8Xs9itrJVCenC7o26A6+m7D0ihTTr65eS259H5/Ghl/VjYs6g==", "dev": true }, "@types/lodash": { @@ -21,25 +21,11 @@ "integrity": "sha512-WD2vUOKfBBVHxWUV9iMR9RMfpuf8HquxWeAq2yqGVL7Nc4JW2+sQama0pREMqzNI3Tutj0PyxYUJwuoxxvX+xA==" }, "@types/mocha": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.33.tgz", - "integrity": "sha1-15oAYewnA3n02eIl9AlvtDZmne8=", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", + "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", "dev": true }, - "@types/reflect-metadata": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@types/reflect-metadata/-/reflect-metadata-0.0.5.tgz", - "integrity": "sha1-nAQr+pgD1Xeq1PV9+8pLfK5Chv4=" - }, - "ansi-align": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", - "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -52,11 +38,14 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, "assertion-error": { "version": "1.1.0", @@ -64,6 +53,38 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -71,26 +92,9 @@ "dev": true }, "bluebird": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", - "integrity": "sha1-AdqNgh2HgT0ViWfnQ9X+bGLPjA8=" - }, - "boxen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", - "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", - "dev": true, - "requires": { - "ansi-align": "1.1.0", - "camelcase": "2.1.1", - "chalk": "1.1.3", - "cli-boxes": "1.0.0", - "filled-array": "1.1.0", - "object-assign": "4.1.1", - "repeating": "2.0.1", - "string-width": "1.0.2", - "widest-line": "1.0.0" - } + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "brace-expansion": { "version": "1.1.11", @@ -98,76 +102,62 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.1.0", - "deep-eql": "0.1.3", - "type-detect": "1.0.0" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } } } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, "color-convert": { @@ -176,7 +166,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -185,20 +175,11 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "dev": true - }, "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true }, "concat-map": { "version": "0.0.1", @@ -206,107 +187,34 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "configstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", - "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", - "dev": true, - "requires": { - "dot-prop": "3.0.0", - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "os-tmpdir": "1.0.2", - "osenv": "0.1.5", - "uuid": "2.0.3", - "write-file-atomic": "1.3.4", - "xdg-basedir": "2.0.0" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "1.0.0" - } - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - } + "type-detect": "^4.0.0" } }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", - "dev": true - }, "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "2.3.6" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, "es6-shim": { - "version": "0.35.2", - "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.2.tgz", - "integrity": "sha1-RcWz6y95LtKPEw2CYjm+UK/7iX8=" + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.3.tgz", + "integrity": "sha1-m/tzY/7//4emzbbNk+QF7DxLbyY=" }, "escape-string-regexp": { "version": "1.0.5", @@ -314,35 +222,17 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "filled-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", - "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "5.0.15" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "fs.realpath": { "version": "1.0.0", @@ -350,59 +240,30 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "glob": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", - "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true }, - "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.6", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "has-ansi": { @@ -411,19 +272,19 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, "inflight": { @@ -432,8 +293,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -442,192 +303,34 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "js-yaml": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "js2xmlparser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-2.0.2.tgz", - "integrity": "sha1-Dals18w1teHf6AK+r/XMOCV6jKQ=", - "requires": { - "xmlcreate": "0.1.1" - }, - "dependencies": { - "xmlcreate": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-0.1.1.tgz", - "integrity": "sha1-qN87ENnS1XBKYEuSwK/CYg1wj2E=" - } - } - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "latest-version": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", - "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", "requires": { - "package-json": "2.4.0" + "xmlcreate": "^1.0.1" } }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", - "dev": true - }, "lodash": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.2.tgz", - "integrity": "sha1-NKMFW6vgTOQkZ7YH1wAHLH/2v0I=" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash.create": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._basecreate": "3.0.3", - "lodash._isiterateecall": "3.0.9" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", - "dev": true + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" }, "minimatch": { "version": "3.0.4", @@ -635,7 +338,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -654,46 +357,28 @@ } }, "mocha": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.2.0.tgz", - "integrity": "sha1-fcT0XlCIB1FxpoiWgU5q6et6heM=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.2.0", - "diff": "1.4.0", + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "glob": "7.0.5", - "growl": "1.9.2", - "json3": "3.3.2", - "lodash.create": "3.1.1", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "3.1.2" + "supports-color": "5.4.0" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "once": { @@ -702,60 +387,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "package-json": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", - "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", - "dev": true, - "requires": { - "got": "5.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" + "wrappy": "1" } }, "path-is-absolute": { @@ -765,406 +397,107 @@ "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", "dev": true }, - "rc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", - "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", - "dev": true, - "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.6" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, "reflect-metadata": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==", "dev": true }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "1.2.7", - "safe-buffer": "5.1.2" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "1.2.7" - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.6" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "5.5.0" - } - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, - "source-map-support": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", - "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", - "dev": true, - "requires": { - "buffer-from": "1.0.0", - "source-map": "0.6.1" - } - }, "sprintf-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } }, - "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, - "ts-node": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.0.3.tgz", - "integrity": "sha512-ARaOMNFEPKg2ZuC1qJddFvHxHNFVckR0g9xLxMIoMqSSIkDc8iS4/LoV53EdDWWNq2FGwqcEf0bVVGJIWpsznw==", + "tslint": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", "dev": true, "requires": { - "arrify": "1.0.1", - "chalk": "2.4.1", - "diff": "3.5.0", - "make-error": "1.3.4", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.5.6", - "yn": "2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.27.2" } }, - "tslint": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.0.2.tgz", - "integrity": "sha1-1D8kwMH4Jt5/Ogl7t4CKi0Ml/qw=", + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { - "colors": "1.2.5", - "diff": "3.5.0", - "findup-sync": "0.3.0", - "glob": "7.1.2", - "optimist": "0.6.1", - "resolve": "1.7.1", - "underscore.string": "3.3.4", - "update-notifier": "1.0.3" - }, - "dependencies": { - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "tslib": "^1.8.1" } }, "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "typescript": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz", - "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", - "dev": true - }, - "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true, - "requires": { - "sprintf-js": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", - "dev": true - }, - "update-notifier": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", - "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", - "dev": true, - "requires": { - "boxen": "0.6.0", - "chalk": "1.1.3", - "configstore": "2.1.0", - "is-npm": "1.0.0", - "latest-version": "2.0.0", - "lazy-req": "1.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "2.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "1.0.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, - "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, "wrappy": { @@ -1173,31 +506,10 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" - } - }, - "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", - "dev": true + "xmlcreate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=" } } } diff --git a/tslint.json b/tslint.json index 6de4d11..36a245d 100644 --- a/tslint.json +++ b/tslint.json @@ -21,12 +21,16 @@ "parameter" ], "no-var-requires": false, - "quotemark": ["single"], + "quotemark": [true, "single"], "triple-equals": true, "member-ordering": [true, - "public-before-private", - "static-before-instance", - "variables-before-functions" + { + "order": [ + "public-before-private", + "static-before-instance", + "variables-before-functions" + ] + } ], "variable-name": [true, "ban-keywords",