From d1d5055ec2981ec254c994b390c6561968ddd10a Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Sun, 15 Oct 2017 17:58:28 +0200 Subject: [PATCH 01/20] associations reimplemented + through options implemented --- index.ts | 1 - lib/annotations/Column.ts | 2 +- lib/annotations/association/BelongsTo.ts | 21 +- lib/annotations/association/BelongsToMany.ts | 45 +- lib/annotations/association/HasMany.ts | 24 +- lib/annotations/association/HasOne.ts | 24 +- lib/enums/Association.ts | 6 + lib/interfaces/AssociationOptions.ts | 12 + .../IAssociationOptionsBelongsToMany.ts | 3 +- lib/interfaces/IFindOptions.ts | 8 +- ...PreparedAssociationOptionsBelongsToMany.ts | 7 + lib/interfaces/IPreparedThroughOptions.ts | 30 + lib/interfaces/ISequelizeAssociation.ts | 14 - lib/interfaces/IThroughOptions.ts | 30 + lib/models/BaseSequelize.ts | 15 +- lib/models/association/BaseAssociation.ts | 59 + .../association/BelongsToAssociation.ts | 33 + .../association/BelongsToManyAssociation.ts | 60 + lib/models/association/HasAssociation.ts | 34 + lib/models/v3/Sequelize.ts | 23 +- lib/models/v4/Sequelize.ts | 4 +- lib/services/association.ts | 205 +-- lib/services/models.ts | 2 +- package-lock.json | 1419 ++++++++++++++--- package.json | 2 +- test/specs/instance.spec.ts | 21 +- test/specs/services/association.spec.ts | 66 +- 27 files changed, 1637 insertions(+), 533 deletions(-) create mode 100644 lib/enums/Association.ts create mode 100644 lib/interfaces/AssociationOptions.ts create mode 100644 lib/interfaces/IPreparedAssociationOptionsBelongsToMany.ts create mode 100644 lib/interfaces/IPreparedThroughOptions.ts delete mode 100644 lib/interfaces/ISequelizeAssociation.ts create mode 100644 lib/interfaces/IThroughOptions.ts create mode 100644 lib/models/association/BaseAssociation.ts create mode 100644 lib/models/association/BelongsToAssociation.ts create mode 100644 lib/models/association/BelongsToManyAssociation.ts create mode 100644 lib/models/association/HasAssociation.ts diff --git a/index.ts b/index.ts index abae4d5b..d387b40a 100644 --- a/index.ts +++ b/index.ts @@ -98,7 +98,6 @@ export {IScopeFindOptions} from "./lib/interfaces/IScopeFindOptions"; export {IScopeIncludeAssociation} from "./lib/interfaces/IScopeIncludeAssociation"; export {IScopeIncludeOptions} from "./lib/interfaces/IScopeIncludeOptions"; export {IScopeOptions} from "./lib/interfaces/IScopeOptions"; -export {ISequelizeAssociation} from "./lib/interfaces/ISequelizeAssociation"; export {ISequelizeConfig} from "./lib/interfaces/ISequelizeConfig"; export {ISequelizeForeignKeyConfig} from "./lib/interfaces/ISequelizeForeignKeyConfig"; export {ISequelizeValidationOnlyConfig} from "./lib/interfaces/ISequelizeValidationOnlyConfig"; diff --git a/lib/annotations/Column.ts b/lib/annotations/Column.ts index 51256350..40d1fc52 100644 --- a/lib/annotations/Column.ts +++ b/lib/annotations/Column.ts @@ -40,7 +40,7 @@ function annotate(target: any, }; } else { - options = Object.assign({}, optionsOrDataType); + options = Object.assign({}, optionsOrDataType as IPartialDefineAttributeColumnOptions); if (!options.type) { options.type = getSequelizeTypeByDesignType(target, propertyName); diff --git a/lib/annotations/association/BelongsTo.ts b/lib/annotations/association/BelongsTo.ts index 05a93c25..890c3a79 100644 --- a/lib/annotations/association/BelongsTo.ts +++ b/lib/annotations/association/BelongsTo.ts @@ -1,21 +1,22 @@ import {AssociationOptionsBelongsTo} from 'sequelize'; -import {BELONGS_TO, addAssociation} from "../../services/association"; +import {addAssociation, getPreparedAssociationOptions} from "../../services/association"; import {ModelClassGetter} from "../../types/ModelClassGetter"; +import {BelongsToAssociation} from '../../models/association/BelongsToAssociation'; -export function BelongsTo(relatedClassGetter: ModelClassGetter, +export function BelongsTo(associatedClassGetter: ModelClassGetter, foreignKey?: string): Function; -export function BelongsTo(relatedClassGetter: ModelClassGetter, +export function BelongsTo(associatedClassGetter: ModelClassGetter, options?: AssociationOptionsBelongsTo): Function; -export function BelongsTo(relatedClassGetter: ModelClassGetter, +export function BelongsTo(associatedClassGetter: ModelClassGetter, optionsOrForeignKey?: string | AssociationOptionsBelongsTo): Function { return (target: any, propertyName: string) => { - addAssociation( - target, - BELONGS_TO, - relatedClassGetter, - propertyName, - optionsOrForeignKey + const options: AssociationOptionsBelongsTo = getPreparedAssociationOptions(optionsOrForeignKey); + if (!options.as) options.as = propertyName; + addAssociation(target, new BelongsToAssociation( + associatedClassGetter, + options, + ) ); }; } diff --git a/lib/annotations/association/BelongsToMany.ts b/lib/annotations/association/BelongsToMany.ts index 27fbbcaf..33cbc82d 100644 --- a/lib/annotations/association/BelongsToMany.ts +++ b/lib/annotations/association/BelongsToMany.ts @@ -1,36 +1,35 @@ -import {BELONGS_TO_MANY, addAssociation} from "../../services/association"; +import {addAssociation} from "../../services/association"; import {ModelClassGetter} from "../../types/ModelClassGetter"; import {IAssociationOptionsBelongsToMany} from "../../interfaces/IAssociationOptionsBelongsToMany"; +import {BelongsToManyAssociation} from '../../models/association/BelongsToManyAssociation'; -export function BelongsToMany(relatedClassGetter: ModelClassGetter, - through: (ModelClassGetter) | string, +export function BelongsToMany(associatedClassGetter: ModelClassGetter, + through: ModelClassGetter | string, foreignKey?: string, otherKey?: string): Function; -export function BelongsToMany(relatedClassGetter: ModelClassGetter, +export function BelongsToMany(associatedClassGetter: ModelClassGetter, options: IAssociationOptionsBelongsToMany): Function; -export function BelongsToMany(relatedClassGetter: ModelClassGetter, - throughOrOptions: (ModelClassGetter | string) | IAssociationOptionsBelongsToMany, +export function BelongsToMany(associatedClassGetter: ModelClassGetter, + throughOrOptions: ModelClassGetter | string | IAssociationOptionsBelongsToMany, foreignKey?: string, otherKey?: string): Function { - const typeOfThroughOrOptions = typeof throughOrOptions; - let through; - let options: Partial; - if (typeOfThroughOrOptions === 'string' || typeOfThroughOrOptions === 'function') { - through = throughOrOptions; - } else { - through = (throughOrOptions as IAssociationOptionsBelongsToMany).through; - options = throughOrOptions as IAssociationOptionsBelongsToMany; - } return (target: any, propertyName: string) => { - addAssociation( - target, - BELONGS_TO_MANY, - relatedClassGetter, - propertyName, - options || foreignKey, - through, - otherKey, + let options: Partial = {foreignKey, otherKey}; + + if (typeof throughOrOptions === 'string' || + typeof throughOrOptions === 'function') { + options.through = throughOrOptions; + } else { + options = {...throughOrOptions}; + } + + if (!options.as) options.as = propertyName; + + addAssociation(target, new BelongsToManyAssociation( + associatedClassGetter, + options as IAssociationOptionsBelongsToMany, + ) ); }; } diff --git a/lib/annotations/association/HasMany.ts b/lib/annotations/association/HasMany.ts index f49c808a..7c67f37e 100644 --- a/lib/annotations/association/HasMany.ts +++ b/lib/annotations/association/HasMany.ts @@ -1,20 +1,24 @@ import {AssociationOptionsHasMany} from 'sequelize'; -import {HAS_MANY, addAssociation} from "../../services/association"; +import {addAssociation, getPreparedAssociationOptions} from "../../services/association"; +import {Association} from "../../enums/Association"; import {ModelClassGetter} from "../../types/ModelClassGetter"; +import {HasAssociation} from '../../models/association/HasAssociation'; -export function HasMany(relatedClassGetter: ModelClassGetter, +export function HasMany(associatedClassGetter: ModelClassGetter, foreignKey?: string): Function; -export function HasMany(relatedClassGetter: ModelClassGetter, +export function HasMany(associatedClassGetter: ModelClassGetter, options?: AssociationOptionsHasMany): Function; -export function HasMany(relatedClassGetter: ModelClassGetter, +export function HasMany(associatedClassGetter: ModelClassGetter, optionsOrForeignKey?: string | AssociationOptionsHasMany): Function { + return (target: any, propertyName: string) => { - addAssociation( - target, - HAS_MANY, - relatedClassGetter, - propertyName, - optionsOrForeignKey, + const options: AssociationOptionsHasMany = getPreparedAssociationOptions(optionsOrForeignKey); + if (!options.as) options.as = propertyName; + addAssociation(target, new HasAssociation( + associatedClassGetter, + options, + Association.HasMany, + ) ); }; } diff --git a/lib/annotations/association/HasOne.ts b/lib/annotations/association/HasOne.ts index ab2e53cf..84f5e997 100644 --- a/lib/annotations/association/HasOne.ts +++ b/lib/annotations/association/HasOne.ts @@ -1,20 +1,24 @@ import {AssociationOptionsHasOne} from 'sequelize'; -import {addAssociation, HAS_ONE} from "../../services/association"; +import {Association} from "../../enums/Association"; import {ModelClassGetter} from "../../types/ModelClassGetter"; +import {addAssociation, getPreparedAssociationOptions} from '../../services/association'; +import {HasAssociation} from '../../models/association/HasAssociation'; -export function HasOne(relatedClassGetter: ModelClassGetter, +export function HasOne(associatedClassGetter: ModelClassGetter, foreignKey?: string): Function; -export function HasOne(relatedClassGetter: ModelClassGetter, +export function HasOne(associatedClassGetter: ModelClassGetter, options?: AssociationOptionsHasOne): Function; -export function HasOne(relatedClassGetter: ModelClassGetter, +export function HasOne(associatedClassGetter: ModelClassGetter, optionsOrForeignKey?: string | AssociationOptionsHasOne): Function { + return (target: any, propertyName: string) => { - addAssociation( - target, - HAS_ONE, - relatedClassGetter, - propertyName, - optionsOrForeignKey, + const options: AssociationOptionsHasOne = getPreparedAssociationOptions(optionsOrForeignKey); + if (!options.as) options.as = propertyName; + addAssociation(target, new HasAssociation( + associatedClassGetter, + options, + Association.HasOne, + ) ); }; } diff --git a/lib/enums/Association.ts b/lib/enums/Association.ts new file mode 100644 index 00000000..3bf5a0b4 --- /dev/null +++ b/lib/enums/Association.ts @@ -0,0 +1,6 @@ +export enum Association { + BelongsToMany = 'belongsToMany', + BelongsTo = 'belongsTo', + HasMany = 'hasMany', + HasOne = 'hasOne', +} diff --git a/lib/interfaces/AssociationOptions.ts b/lib/interfaces/AssociationOptions.ts new file mode 100644 index 00000000..d06d776a --- /dev/null +++ b/lib/interfaces/AssociationOptions.ts @@ -0,0 +1,12 @@ +import { + AssociationOptionsBelongsTo, AssociationOptionsHasMany, + AssociationOptionsHasOne, AssociationOptionsManyToMany +} from 'sequelize'; +import {IPreparedAssociationOptionsBelongsToMany} from './IPreparedAssociationOptionsBelongsToMany'; + +export type AssociationOptions = + AssociationOptionsBelongsTo | + IPreparedAssociationOptionsBelongsToMany | + AssociationOptionsHasMany | + AssociationOptionsHasOne | + AssociationOptionsManyToMany; diff --git a/lib/interfaces/IAssociationOptionsBelongsToMany.ts b/lib/interfaces/IAssociationOptionsBelongsToMany.ts index 8d550293..3a3161c1 100644 --- a/lib/interfaces/IAssociationOptionsBelongsToMany.ts +++ b/lib/interfaces/IAssociationOptionsBelongsToMany.ts @@ -1,7 +1,8 @@ import {AssociationForeignKeyOptions, AssociationOptionsManyToMany} from "sequelize"; import {ModelClassGetter} from "../types/ModelClassGetter"; +import {IThroughOptions} from './IThroughOptions'; export interface IAssociationOptionsBelongsToMany extends AssociationOptionsManyToMany { - through: ModelClassGetter | string; + through: ModelClassGetter | string | IThroughOptions; otherKey?: string | AssociationForeignKeyOptions; } diff --git a/lib/interfaces/IFindOptions.ts b/lib/interfaces/IFindOptions.ts index 366803cc..5c7c0a7e 100644 --- a/lib/interfaces/IFindOptions.ts +++ b/lib/interfaces/IFindOptions.ts @@ -1,5 +1,7 @@ -import {WhereOptions, LoggingOptions, SearchPathOptions, col, FindOptionsAttributesArray, - literal, fn} from 'sequelize'; +import { + WhereOptions, LoggingOptions, SearchPathOptions, col, FindOptionsAttributesArray, + literal, fn, and, or +} from 'sequelize'; import {Model} from "../models/Model"; import {IIncludeOptions} from "./IIncludeOptions"; @@ -11,7 +13,7 @@ export interface IFindOptions extends LoggingOptions, SearchPathOptions { /** * A hash of attributes to describe your search. See above for examples. */ - where?: WhereOptions; + where?: WhereOptions | fn | or | Array; /** * A list of the attributes that you want to select. To rename an attribute, you can pass an array, with diff --git a/lib/interfaces/IPreparedAssociationOptionsBelongsToMany.ts b/lib/interfaces/IPreparedAssociationOptionsBelongsToMany.ts new file mode 100644 index 00000000..4936be4a --- /dev/null +++ b/lib/interfaces/IPreparedAssociationOptionsBelongsToMany.ts @@ -0,0 +1,7 @@ +import {AssociationForeignKeyOptions, AssociationOptionsManyToMany} from "sequelize"; +import {IPreparedThroughOptions} from './IPreparedThroughOptions'; + +export interface IPreparedAssociationOptionsBelongsToMany extends AssociationOptionsManyToMany { + through: IPreparedThroughOptions; + otherKey?: string | AssociationForeignKeyOptions; +} diff --git a/lib/interfaces/IPreparedThroughOptions.ts b/lib/interfaces/IPreparedThroughOptions.ts new file mode 100644 index 00000000..b118b38d --- /dev/null +++ b/lib/interfaces/IPreparedThroughOptions.ts @@ -0,0 +1,30 @@ +import {AssociationScope} from 'sequelize'; +import {Model} from '../models/Model'; + +/** + * Used for a association table in n:m associations. + * + * @see AssociationOptionsBelongsToMany + */ +export interface IPreparedThroughOptions { + + /** + * The model used to join both sides of the N:M association. + */ + model: typeof Model; + + /** + * A key/value set that will be used for association create and find defaults on the through model. + * (Remember to add the attributes to the through model) + */ + scope?: AssociationScope; + + /** + * If true a unique key will be generated from the foreign keys used (might want to turn this off and create + * specific unique keys when using scopes) + * + * Defaults to true + */ + unique?: boolean; + +} diff --git a/lib/interfaces/ISequelizeAssociation.ts b/lib/interfaces/ISequelizeAssociation.ts deleted file mode 100644 index d9398fff..00000000 --- a/lib/interfaces/ISequelizeAssociation.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {AssociationOptionsBelongsTo, AssociationOptionsBelongsToMany, AssociationOptionsHasMany, - AssociationOptionsHasOne, AssociationOptionsManyToMany} from 'sequelize'; -import {ModelClassGetter} from "../types/ModelClassGetter"; - -export interface ISequelizeAssociation { - - relation: string; - relatedClassGetter: ModelClassGetter; - through?: string; - throughClassGetter?: ModelClassGetter; - options?: AssociationOptionsBelongsTo | AssociationOptionsBelongsToMany | AssociationOptionsHasMany | - AssociationOptionsHasOne | AssociationOptionsManyToMany; - as: string; -} diff --git a/lib/interfaces/IThroughOptions.ts b/lib/interfaces/IThroughOptions.ts new file mode 100644 index 00000000..3034365c --- /dev/null +++ b/lib/interfaces/IThroughOptions.ts @@ -0,0 +1,30 @@ +import {AssociationScope} from 'sequelize'; +import {ModelClassGetter} from '../types/ModelClassGetter'; + +/** + * Used for a association table in n:m associations. + * + * @see AssociationOptionsBelongsToMany + */ +export interface IThroughOptions { + + /** + * The model used to join both sides of the N:M association. + */ + model: ModelClassGetter | string; + + /** + * A key/value set that will be used for association create and find defaults on the through model. + * (Remember to add the attributes to the through model) + */ + scope?: AssociationScope; + + /** + * If true a unique key will be generated from the foreign keys used (might want to turn this off and create + * specific unique keys when using scopes) + * + * Defaults to true + */ + unique?: boolean; + +} diff --git a/lib/models/BaseSequelize.ts b/lib/models/BaseSequelize.ts index 0a1c6ab6..26a5dd50 100644 --- a/lib/models/BaseSequelize.ts +++ b/lib/models/BaseSequelize.ts @@ -1,6 +1,6 @@ import {Model} from "./Model"; import {DEFAULT_DEFINE_OPTIONS, getModels} from "../services/models"; -import {getAssociations, processAssociation} from "../services/association"; +import {getAssociations} from "../services/association"; import {ISequelizeConfig} from "../interfaces/ISequelizeConfig"; import {ISequelizeUriConfig} from "../interfaces/ISequelizeUriConfig"; import {ISequelizeDbNameConfig} from "../interfaces/ISequelizeDbNameConfig"; @@ -9,7 +9,7 @@ import {resolveScopes} from "../services/scopes"; import {installHooks} from "../services/hooks"; import {ISequelizeValidationOnlyConfig} from "../interfaces/ISequelizeValidationOnlyConfig"; import {extend} from "../utils/object"; -import {ISequelizeAssociation} from "../interfaces/ISequelizeAssociation"; +import {BaseAssociation} from './association/BaseAssociation'; /** * Why does v3/Sequlize and v4/Sequelize does not extend? Because of @@ -99,7 +99,14 @@ export abstract class BaseSequelize { if (!associations) return; - associations.forEach(association => processAssociation(this, model, association)); + associations.forEach(association => { + association.init(model, this); + const associatedClass = association.getAssociatedClass(); + const relation = association.getAssociation(); + const options = association.getSequelizeOptions(); + model[relation](associatedClass, options); + this.adjustAssociation(model, association); + }); }); } @@ -110,7 +117,7 @@ export abstract class BaseSequelize { */ abstract getThroughModel(through: string): typeof Model; - abstract adjustAssociation(model: any, association: ISequelizeAssociation): void; + abstract adjustAssociation(model: any, association: BaseAssociation): void; abstract defineModels(models: Array): void; diff --git a/lib/models/association/BaseAssociation.ts b/lib/models/association/BaseAssociation.ts new file mode 100644 index 00000000..893930f2 --- /dev/null +++ b/lib/models/association/BaseAssociation.ts @@ -0,0 +1,59 @@ +import {AssociationOptions} from '../../interfaces/AssociationOptions'; +import {getForeignKeys} from '../../services/association'; +import {Model} from '../Model'; +import {AssociationForeignKeyOptions} from 'sequelize'; +import {BaseSequelize} from '../BaseSequelize'; +import {Association} from '../../enums/Association'; + +export abstract class BaseAssociation { + + private _options: AssociationOptions; + + abstract getAssociation(): Association; + + abstract getAssociatedClass(): typeof Model; + + protected abstract getPreparedOptions(model: typeof Model, + sequelize: BaseSequelize): AssociationOptions; + + init(model: typeof Model, + sequelize: BaseSequelize): void { + if (!this._options) { + this._options = this.getPreparedOptions(model, sequelize); + } + } + + getSequelizeOptions(): AssociationOptions { + if (!this._options) { + throw new Error(`Association need to be initialized with a sequelize instance`); + } + return this._options; + } + + protected getForeignKeyOptions(relatedClass: typeof Model, + classWithForeignKey: typeof Model, + foreignKey?: string | AssociationForeignKeyOptions): AssociationForeignKeyOptions { + let foreignKeyOptions: AssociationForeignKeyOptions = {}; + + if (typeof foreignKey === 'string') { + foreignKeyOptions.name = foreignKey; + } else if (foreignKey && typeof foreignKey === 'object') { + foreignKeyOptions = {...foreignKey}; + } + if (!foreignKeyOptions.name) { + const foreignKeys = getForeignKeys(classWithForeignKey.prototype) || []; + for (const key of foreignKeys) { + if (key.relatedClassGetter() === relatedClass) { + foreignKeyOptions.name = key.foreignKey; + break; + } + } + if (!foreignKeyOptions.name) { + throw new Error(`Foreign key for "${(relatedClass as any).name}" is missing ` + + `on "${(classWithForeignKey as any).name}".`); + } + } + + return foreignKeyOptions; + } +} diff --git a/lib/models/association/BelongsToAssociation.ts b/lib/models/association/BelongsToAssociation.ts new file mode 100644 index 00000000..ac17968e --- /dev/null +++ b/lib/models/association/BelongsToAssociation.ts @@ -0,0 +1,33 @@ +import {BaseAssociation} from './BaseAssociation'; +import {Model} from '../Model'; +import {BaseSequelize} from '../BaseSequelize'; +import {AssociationOptions} from '../../interfaces/AssociationOptions'; +import {ModelClassGetter} from '../../types/ModelClassGetter'; +import {AssociationOptionsBelongsTo} from 'sequelize'; +import {Association} from '../../enums/Association'; + +export class BelongsToAssociation extends BaseAssociation { + + constructor(private associatedClassGetter: ModelClassGetter, + private options: AssociationOptionsBelongsTo) { + super(); + } + + getAssociation(): Association { + return Association.BelongsTo; + } + + getAssociatedClass(): typeof Model { + return this.associatedClassGetter(); + } + + protected getPreparedOptions(model: typeof Model, + sequelize: BaseSequelize): AssociationOptions { + const options = {...this.options}; + const associatedClass = this.associatedClassGetter(); + + options.foreignKey = this.getForeignKeyOptions(associatedClass, model, options.foreignKey); + + return options; + } +} diff --git a/lib/models/association/BelongsToManyAssociation.ts b/lib/models/association/BelongsToManyAssociation.ts new file mode 100644 index 00000000..7b89c0d2 --- /dev/null +++ b/lib/models/association/BelongsToManyAssociation.ts @@ -0,0 +1,60 @@ +import {ModelClassGetter} from '../../types/ModelClassGetter'; +import {BaseAssociation} from './BaseAssociation'; +import {AssociationOptions} from '../../interfaces/AssociationOptions'; +import {BaseSequelize} from '../BaseSequelize'; +import {Model} from '../Model'; +import {Association} from '../../enums/Association'; +import {IAssociationOptionsBelongsToMany} from '../../interfaces/IAssociationOptionsBelongsToMany'; +import {IPreparedThroughOptions} from '../../interfaces/IPreparedThroughOptions'; +import {IPreparedAssociationOptionsBelongsToMany} from '../../interfaces/IPreparedAssociationOptionsBelongsToMany'; + +export class BelongsToManyAssociation extends BaseAssociation { + + constructor(private associatedClassGetter: ModelClassGetter, + private options: IAssociationOptionsBelongsToMany) { + super(); + } + + getAssociation(): Association { + return Association.BelongsToMany; + } + + getAssociatedClass(): typeof Model { + return this.associatedClassGetter(); + } + + protected getPreparedOptions(modelClass: typeof Model, + sequelize: BaseSequelize): AssociationOptions { + const options: IPreparedAssociationOptionsBelongsToMany = {...this.options as any}; + const associatedClass = this.associatedClassGetter(); + const throughOptions = this.getThroughOptions(modelClass, sequelize); + + options.through = throughOptions; + options.foreignKey = this.getForeignKeyOptions(modelClass, throughOptions.model, this.options.foreignKey); + options.otherKey = this.getForeignKeyOptions(associatedClass, throughOptions.model, this.options.otherKey); + + return options; + } + + private getThroughOptions(modelClass: typeof Model, + sequelize: BaseSequelize): IPreparedThroughOptions { + const through = this.options.through; + const model = typeof through === 'object' ? through.model : through; + const throughOptions: IPreparedThroughOptions = + typeof through === 'object' ? {...through} : {} as any; + + if (typeof model === 'function') { + throughOptions.model = model(); + } else if (typeof model === 'string') { + if (!sequelize.throughMap[model]) { + const throughModel = sequelize.getThroughModel(model); + sequelize.addModels([throughModel]); + sequelize.throughMap[model] = throughModel; + } + throughOptions.model = sequelize.throughMap[model]; + } else { + throw new Error(`Through model is missing for belongs to many association on ${modelClass.name}`); + } + return throughOptions; + } +} diff --git a/lib/models/association/HasAssociation.ts b/lib/models/association/HasAssociation.ts new file mode 100644 index 00000000..a6e44cc7 --- /dev/null +++ b/lib/models/association/HasAssociation.ts @@ -0,0 +1,34 @@ +import {BaseAssociation} from './BaseAssociation'; +import {Model} from '../Model'; +import {BaseSequelize} from '../BaseSequelize'; +import {AssociationOptions} from '../../interfaces/AssociationOptions'; +import {ModelClassGetter} from '../../types/ModelClassGetter'; +import {AssociationOptionsHasMany, AssociationOptionsHasOne} from 'sequelize'; +import {Association} from '../../enums/Association'; + +export class HasAssociation extends BaseAssociation { + + constructor(private associatedClassGetter: ModelClassGetter, + private options: AssociationOptionsHasMany | AssociationOptionsHasOne, + private association: Association) { + super(); + } + + getAssociation(): Association { + return this.association; + } + + getAssociatedClass(): typeof Model { + return this.associatedClassGetter(); + } + + protected getPreparedOptions(model: typeof Model, + sequelize: BaseSequelize): AssociationOptions { + const options = {...this.options}; + const associatedClass = this.associatedClassGetter(); + + options.foreignKey = this.getForeignKeyOptions(model, associatedClass, options.foreignKey); + + return options; + } +} diff --git a/lib/models/v3/Sequelize.ts b/lib/models/v3/Sequelize.ts index 4ce71cfb..77c96d20 100644 --- a/lib/models/v3/Sequelize.ts +++ b/lib/models/v3/Sequelize.ts @@ -6,7 +6,8 @@ import {getModelName, getAttributes, getOptions} from "../../services/models"; import {PROPERTY_LINK_TO_ORIG} from "../../services/models"; import {BaseSequelize} from "../BaseSequelize"; import {Table} from "../../annotations/Table"; -import {ISequelizeAssociation} from "../../interfaces/ISequelizeAssociation"; +import {BaseAssociation} from '../association/BaseAssociation'; +import {IPreparedAssociationOptionsBelongsToMany} from '../../interfaces/IPreparedAssociationOptionsBelongsToMany'; export class Sequelize extends SequelizeOrigin implements BaseSequelize { @@ -52,21 +53,25 @@ export class Sequelize extends SequelizeOrigin implements BaseSequelize { * The association needs to be adjusted. So that throughModel properties * referencing a original sequelize Model instance */ - adjustAssociation(model: any, association: ISequelizeAssociation): void { + adjustAssociation(model: any, association: BaseAssociation): void { + const options = association.getSequelizeOptions(); // The associations has to be adjusted - const internalAssociation = model['associations'][association.as]; + const internalAssociation = model['associations'][options.as as string]; // String based through's need adjustment if (internalAssociation.oneFromSource && internalAssociation.oneFromSource.as === 'Through') { + const belongsToManyOptions = options as IPreparedAssociationOptionsBelongsToMany; + const tableName = belongsToManyOptions.through.model.getTableName(); + // as and associationAccessor values referring to string "Through" - internalAssociation.oneFromSource.as = association.through; - internalAssociation.oneFromSource.options.as = association.through; - internalAssociation.oneFromSource.associationAccessor = association.through; - internalAssociation.oneFromTarget.as = association.through; - internalAssociation.oneFromTarget.options.as = association.through; - internalAssociation.oneFromTarget.associationAccessor = association.through; + internalAssociation.oneFromSource.as = tableName; + internalAssociation.oneFromSource.options.as = tableName; + internalAssociation.oneFromSource.associationAccessor = tableName; + internalAssociation.oneFromTarget.as = tableName; + internalAssociation.oneFromTarget.options.as = tableName; + internalAssociation.oneFromTarget.associationAccessor = tableName; } if (internalAssociation.throughModel && internalAssociation.throughModel.Model) { diff --git a/lib/models/v4/Sequelize.ts b/lib/models/v4/Sequelize.ts index 8359396b..67b28143 100644 --- a/lib/models/v4/Sequelize.ts +++ b/lib/models/v4/Sequelize.ts @@ -5,7 +5,7 @@ import {SequelizeConfig} from "../../types/SequelizeConfig"; import {getModelName, getAttributes, getOptions} from "../../services/models"; import {BaseSequelize} from "../BaseSequelize"; import {Table} from "../../annotations/Table"; -import {ISequelizeAssociation} from "../../interfaces/ISequelizeAssociation"; +import {BaseAssociation} from '../association/BaseAssociation'; export class Sequelize extends OriginSequelize implements BaseSequelize { @@ -43,7 +43,7 @@ export class Sequelize extends OriginSequelize implements BaseSequelize { return Through; } - adjustAssociation(model: any, association: ISequelizeAssociation): void { + adjustAssociation(model: any, association: BaseAssociation): void { } /** diff --git a/lib/services/association.ts b/lib/services/association.ts index 2302ec1a..4270e92d 100644 --- a/lib/services/association.ts +++ b/lib/services/association.ts @@ -1,146 +1,68 @@ import 'reflect-metadata'; -import {merge} from 'lodash'; import { - AssociationOptions, AssociationOptionsBelongsTo, AssociationOptionsBelongsToMany, - AssociationOptionsHasMany, AssociationOptionsHasOne, AssociationOptionsManyToMany + AssociationOptionsBelongsTo, AssociationOptionsHasMany, AssociationOptionsHasOne, AssociationOptionsManyToMany } from 'sequelize'; -import {Model} from "../models/Model"; import {ISequelizeForeignKeyConfig} from "../interfaces/ISequelizeForeignKeyConfig"; -import {ISequelizeAssociation} from "../interfaces/ISequelizeAssociation"; -import {BaseSequelize} from "../models/BaseSequelize"; import {ModelClassGetter} from "../types/ModelClassGetter"; -import {IAssociationOptionsBelongsToMany} from "../interfaces/IAssociationOptionsBelongsToMany"; - -export const BELONGS_TO_MANY = 'belongsToMany'; -export const BELONGS_TO = 'belongsTo'; -export const HAS_MANY = 'hasMany'; -export const HAS_ONE = 'hasOne'; +import {BaseAssociation} from '../models/association/BaseAssociation'; const FOREIGN_KEYS_KEY = 'sequelize:foreignKeys'; const ASSOCIATIONS_KEY = 'sequelize:associations'; -export type ConcatAssociationOptions = AssociationOptionsBelongsTo | - AssociationOptionsBelongsToMany | AssociationOptionsHasMany | - AssociationOptionsHasOne | AssociationOptionsManyToMany; +export type NonBelongsToManyAssociationOptions = + AssociationOptionsBelongsTo | + AssociationOptionsHasMany | + AssociationOptionsHasOne | + AssociationOptionsManyToMany; + +// tslint:disable:max-line-length +export function getPreparedAssociationOptions(optionsOrForeignKey?: string | NonBelongsToManyAssociationOptions): NonBelongsToManyAssociationOptions { + let options: NonBelongsToManyAssociationOptions = {}; + + if (optionsOrForeignKey) { + if (typeof optionsOrForeignKey === 'string') { + options.foreignKey = optionsOrForeignKey; + } else { + options = {...optionsOrForeignKey}; + } + } + return options; +} /** * Stores association meta data for specified class */ export function addAssociation(target: any, - relation: string, - relatedClassGetter: ModelClassGetter, - as: string, - optionsOrForeignKey?: string | ConcatAssociationOptions, - through?: ModelClassGetter | string, - otherKey?: string): void { + association: BaseAssociation): void { let associations = getAssociations(target); - let throughClassGetter; - let options: Partial = {}; if (!associations) { associations = []; } - if (typeof through === 'function') { - throughClassGetter = through; - through = undefined; - } - if (typeof optionsOrForeignKey === 'string') { - options.foreignKey = {name: optionsOrForeignKey}; - } else { - options = {...optionsOrForeignKey}; - } - if (otherKey) { - (options as IAssociationOptionsBelongsToMany).otherKey = {name: otherKey}; - } - - associations.push({ - relation, - relatedClassGetter, - throughClassGetter, - through: through as string, - as, - options - }); + associations.push(association); setAssociations(target, associations); } -/** - * Determines foreign key by specified association (relation) - */ -export function getForeignKey(model: typeof Model, - association: ISequelizeAssociation): string { - const options = association.options as AssociationOptions; - - if (options && options.foreignKey) { - const foreignKey = options.foreignKey; - // if options is an object and has a string foreignKey property, use that as the name - if (typeof foreignKey === 'string') { - return foreignKey; - } - // if options is an object with foreignKey.name, use that as the name - if (foreignKey.name) { - return foreignKey.name; - } - } - - // otherwise calculate the foreign key by related or through class - let classWithForeignKey; - let relatedClass; - - switch (association.relation) { - case BELONGS_TO_MANY: - if (association.throughClassGetter) { - - classWithForeignKey = association.throughClassGetter(); - relatedClass = model; - } else { - throw new Error(`ThroughClassGetter is missing on "${model['name']}"`); - } - break; - case HAS_MANY: - case HAS_ONE: - classWithForeignKey = association.relatedClassGetter(); - relatedClass = model; - break; - case BELONGS_TO: - classWithForeignKey = model; - relatedClass = association.relatedClassGetter(); - break; - default: - } - - const foreignKeys = getForeignKeys(classWithForeignKey.prototype) || []; - - for (const foreignKey of foreignKeys) { - - if (foreignKey.relatedClassGetter() === relatedClass) { - return foreignKey.foreignKey; - } - } - - throw new Error(`Foreign key for "${(relatedClass as any).name}" is missing ` + - `on "${(classWithForeignKey as any).name}".`); -} - /** * Returns association meta data from specified class */ -export function getAssociations(target: any): ISequelizeAssociation[] | undefined { +export function getAssociations(target: any): BaseAssociation[] | undefined { const associations = Reflect.getMetadata(ASSOCIATIONS_KEY, target); if (associations) { return [...associations]; } } -export function setAssociations(target: any, associations: ISequelizeAssociation[]): void { +export function setAssociations(target: any, associations: BaseAssociation[]): void { Reflect.defineMetadata(ASSOCIATIONS_KEY, associations, target); } -export function getAssociationsByRelation(target: any, relatedClass: any): ISequelizeAssociation[] { +export function getAssociationsByRelation(target: any, + relatedClass: any): BaseAssociation[] { const associations = getAssociations(target); return (associations || []).filter(association => { - const _relatedClass = association.relatedClassGetter(); + const _relatedClass = association.getAssociatedClass(); return ( _relatedClass.prototype === relatedClass.prototype || // v3 + v4 /* istanbul ignore next */ @@ -166,77 +88,6 @@ export function addForeignKey(target: any, setForeignKeys(target, foreignKeys); } -/** - * Returns "other" key determined by association object - */ -export function getOtherKey(association: ISequelizeAssociation): string { - const options = association.options as IAssociationOptionsBelongsToMany; - - if (options && options.otherKey) { - const otherKey = options.otherKey; - // if options is an object and has a string otherKey property, use that as the name - if (typeof otherKey === 'string') { - return otherKey; - } - // if options is an object with otherKey.name, use that as the name - if (otherKey.name) { - return otherKey.name; - } - } - return getForeignKey(association.relatedClassGetter(), association); -} - -/** - * Processes association for single model - */ -export function processAssociation(sequelize: BaseSequelize, - model: typeof Model, - association: ISequelizeAssociation): void { - const relatedClass = association.relatedClassGetter(); - const foreignKey = getForeignKey(model, association); - let through; - let otherKey; - - if (association.relation === BELONGS_TO_MANY) { - otherKey = getOtherKey(association); - through = getThroughClass(sequelize, association); - } - - const foreignKeyOptions: Partial = {foreignKey: {name: foreignKey}}; - - if (otherKey) { - foreignKeyOptions.otherKey = {name: otherKey}; - } - - const options = merge( - association.options, - foreignKeyOptions, - { - as: association.as, - through, - } - ); - model[association.relation](relatedClass, options); - - sequelize.adjustAssociation(model, association); -} - -/** - * Returns "through" class determined by association object - */ -export function getThroughClass(sequelize: BaseSequelize, - association: ISequelizeAssociation): any { - if (association.through) { - if (!sequelize.throughMap[association.through]) { - const throughModel = sequelize.getThroughModel(association.through); - sequelize.addModels([throughModel]); - sequelize.throughMap[association.through] = throughModel; - } - return sequelize.throughMap[association.through]; - } - return (association.throughClassGetter as () => typeof Model)(); -} - /** * Returns foreign key meta data from specified class */ diff --git a/lib/services/models.ts b/lib/services/models.ts index d8a963e7..ee76e169 100644 --- a/lib/services/models.ts +++ b/lib/services/models.ts @@ -287,7 +287,7 @@ function inferAliasForInclude(include: any, source: any): any { throw new Error(`Alias cannot be inferred: "${source.name}" has multiple ` + `relations with "${include.model.name}"`); } - include.as = associations[0].as; + include.as = associations[0].getSequelizeOptions().as; } } diff --git a/package-lock.json b/package-lock.json index 2b40743b..40996415 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,6 +2,7 @@ "name": "sequelize-typescript", "version": "0.6.0-beta.2", "lockfileVersion": 1, + "requires": true, "dependencies": { "@types/bluebird": { "version": "3.5.4", @@ -18,13 +19,20 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-0.0.29.tgz", "integrity": "sha1-Q9UokqqZjhhaPePiR37bhXO+HXc=", - "dev": true + "dev": true, + "requires": { + "@types/chai": "3.4.35", + "@types/promises-a-plus": "0.0.27" + } }, "@types/chai-datetime": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/chai-datetime/-/chai-datetime-0.0.30.tgz", "integrity": "sha1-EhNEEGcsFkO9qlrKIzmw43F68Yg=", - "dev": true + "dev": true, + "requires": { + "@types/chai": "3.4.35" + } }, "@types/lodash": { "version": "4.14.54", @@ -62,7 +70,12 @@ "@types/sequelize": { "version": "4.0.73", "resolved": "https://registry.npmjs.org/@types/sequelize/-/sequelize-4.0.73.tgz", - "integrity": "sha512-qfC8DDkU/ROyS5SudxKT80DU4F/YAFXSnlh0HdO7hIFOo5og2HDlOwEjAouRLNykUr6gscXC/C6+rlvxfiJp+g==" + "integrity": "sha512-qfC8DDkU/ROyS5SudxKT80DU4F/YAFXSnlh0HdO7hIFOo5og2HDlOwEjAouRLNykUr6gscXC/C6+rlvxfiJp+g==", + "requires": { + "@types/bluebird": "3.5.4", + "@types/lodash": "4.14.54", + "@types/validator": "6.2.2" + } }, "@types/sinon": { "version": "1.16.35", @@ -74,7 +87,11 @@ "version": "2.7.27", "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-2.7.27.tgz", "integrity": "sha1-63cpBY3fJTppeeVZuytJEISWmqE=", - "dev": true + "dev": true, + "requires": { + "@types/chai": "3.4.35", + "@types/sinon": "1.16.35" + } }, "@types/validator": { "version": "6.2.2", @@ -85,7 +102,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "ansi-regex": { "version": "2.1.1", @@ -157,7 +177,12 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.1" + } }, "balanced-match": { "version": "0.4.2", @@ -170,7 +195,10 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "bignumber.js": { "version": "3.1.2", @@ -182,19 +210,37 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "boxen": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", - "dev": true + "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" + } }, "brace-expansion": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "browser-stdout": { "version": "1.3.0", @@ -218,7 +264,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", - "dev": true + "dev": true, + "requires": { + "ansicolors": "0.2.1", + "redeyed": "1.0.1" + } }, "caseless": { "version": "0.11.0", @@ -230,25 +280,43 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dev": true + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" + } }, "chai-as-promised": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-6.0.0.tgz", "integrity": "sha1-GgKkM6byTa+sY7nJb6FoTbGqjaY=", - "dev": true + "dev": true, + "requires": { + "check-error": "1.0.2" + } }, "chai-datetime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/chai-datetime/-/chai-datetime-1.4.1.tgz", "integrity": "sha1-M3n8GNng0A8u1GWZh1JNYhHGQqg=", - "dev": true + "dev": true, + "requires": { + "chai": "3.5.0" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "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" + } }, "check-error": { "version": "1.0.2", @@ -272,7 +340,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/codecov/-/codecov-2.1.0.tgz", "integrity": "sha1-JfSPnpqnRzthxampNNWVQgpxyt4=", - "dev": true + "dev": true, + "requires": { + "argv": "0.0.2", + "request": "2.79.0", + "urlgrey": "0.4.4" + } }, "colors": { "version": "1.1.2", @@ -284,13 +357,19 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "concat-map": { "version": "0.0.1", @@ -303,6 +382,17 @@ "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.4", + "uuid": "2.0.3", + "write-file-atomic": "1.3.4", + "xdg-basedir": "2.0.0" + }, "dependencies": { "uuid": { "version": "2.0.3", @@ -322,19 +412,28 @@ "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 + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } }, "cryptiles": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1" + } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -348,13 +447,19 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "deep-eql": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", "dev": true, + "requires": { + "type-detect": "0.1.1" + }, "dependencies": { "type-detect": { "version": "0.1.1", @@ -392,13 +497,19 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true + "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.2.10" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -410,13 +521,25 @@ "version": "2.2.10", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.0", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } } } }, @@ -425,13 +548,19 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "es6-shim": { "version": "0.35.3", @@ -479,12 +608,22 @@ "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 + "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" + } } } }, @@ -498,13 +637,21 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "formatio": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", - "dev": true + "dev": true, + "requires": { + "samsam": "1.1.2" + } }, "fs.realpath": { "version": "1.0.0", @@ -522,13 +669,19 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true + "dev": true, + "requires": { + "is-property": "1.0.2" + } }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -542,13 +695,38 @@ "version": "7.0.5", "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", - "dev": true + "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" + } }, "got": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "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.0", + "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.2.10", + "timed-out": "3.1.3", + "unzip-response": "1.0.2", + "url-parse-lax": "1.0.0" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -560,13 +738,25 @@ "version": "2.2.10", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.0", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } } } }, @@ -592,13 +782,22 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.16.0", + "pinkie-promise": "2.0.1" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-flag": { "version": "2.0.0", @@ -610,7 +809,13 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { "version": "2.16.3", @@ -622,7 +827,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } }, "iconv-lite": { "version": "0.4.18", @@ -640,7 +850,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -664,19 +878,31 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true + "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=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-my-json-valid": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", - "dev": true + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } }, "is-npm": { "version": "1.0.0", @@ -737,7 +963,10 @@ "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "js-tokens": { "version": "3.0.1", @@ -781,6 +1010,12 @@ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -794,7 +1029,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", - "dev": true + "dev": true, + "requires": { + "package-json": "2.4.0" + } }, "lazy-req": { "version": "1.1.0", @@ -812,7 +1050,11 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } }, "lodash._basecopy": { "version": "3.0.1", @@ -842,7 +1084,12 @@ "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 + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } }, "lodash.isarguments": { "version": "3.1.0", @@ -860,7 +1107,12 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lolex": { "version": "1.3.2", @@ -884,7 +1136,11 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "make-error": { "version": "1.3.0", @@ -902,13 +1158,19 @@ "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } }, "minimist": { "version": "0.0.8", @@ -920,19 +1182,38 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "mocha": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.2.0.tgz", "integrity": "sha1-fcT0XlCIB1FxpoiWgU5q6et6heM=", "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.5", + "glob": "7.0.5", + "growl": "1.9.2", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, "dependencies": { "supports-color": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -952,13 +1233,32 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.13.0.tgz", "integrity": "sha1-mY8fjKRuLj3XFJzpgkE2U5hqrkc=", - "dev": true + "dev": true, + "requires": { + "bignumber.js": "3.1.2", + "readable-stream": "1.1.14", + "sqlstring": "2.2.0" + } }, "mysql2": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.3.5.tgz", "integrity": "sha1-rmoJkiij3Ln5RUZ2B2/pOT1wrv4=", "dev": true, + "requires": { + "cardinal": "1.0.0", + "denque": "1.1.1", + "generate-function": "2.0.0", + "iconv-lite": "0.4.18", + "long": "3.2.0", + "lru-cache": "4.1.1", + "named-placeholders": "1.1.1", + "object-assign": "4.1.1", + "readable-stream": "2.2.11", + "safe-buffer": "5.1.0", + "seq-queue": "0.0.5", + "sqlstring": "2.2.0" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -971,6 +1271,15 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + }, "dependencies": { "safe-buffer": { "version": "5.0.1", @@ -984,7 +1293,10 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } } } }, @@ -993,6 +1305,9 @@ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.1.tgz", "integrity": "sha1-O3oNJiA910s6nfTJz7gnsvuQfmQ=", "dev": true, + "requires": { + "lru-cache": "2.5.0" + }, "dependencies": { "lru-cache": { "version": "2.5.0", @@ -1025,11 +1340,45 @@ "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.0.2.tgz", "integrity": "sha512-31rRd6ME9NM17w0oPKqi51a6fzJAqYarnzQXK+iL8XaX+3H6VH0BQut7qHIgrv2mBASRic4oNi2KRgcbFODrsQ==", "dev": true, + "requires": { + "archy": "1.0.0", + "arrify": "1.0.1", + "caching-transform": "1.0.1", + "convert-source-map": "1.5.0", + "debug-log": "1.0.1", + "default-require-extensions": "1.0.0", + "find-cache-dir": "0.1.1", + "find-up": "2.1.0", + "foreground-child": "1.5.6", + "glob": "7.1.2", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.0.7", + "istanbul-lib-instrument": "1.7.2", + "istanbul-lib-report": "1.1.1", + "istanbul-lib-source-maps": "1.2.1", + "istanbul-reports": "1.1.1", + "md5-hex": "1.3.0", + "merge-source-map": "1.0.3", + "micromatch": "2.3.11", + "mkdirp": "0.5.1", + "resolve-from": "2.0.0", + "rimraf": "2.6.1", + "signal-exit": "3.0.2", + "spawn-wrap": "1.3.6", + "test-exclude": "4.1.1", + "yargs": "8.0.1", + "yargs-parser": "5.0.0" + }, "dependencies": { "align-text": { "version": "0.1.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } }, "amdefine": { "version": "1.0.1", @@ -1049,7 +1398,10 @@ "append-transform": { "version": "0.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } }, "archy": { "version": "1.0.0", @@ -1059,7 +1411,10 @@ "arr-diff": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.0.3" + } }, "arr-flatten": { "version": "1.0.3", @@ -1084,37 +1439,83 @@ "babel-code-frame": { "version": "6.22.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.1" + } }, "babel-generator": { "version": "6.24.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.24.1", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + } }, "babel-messages": { "version": "6.23.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-runtime": { "version": "6.23.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + } }, "babel-template": { "version": "6.24.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.24.1", + "babel-types": "6.24.1", + "babylon": "6.17.2", + "lodash": "4.17.4" + } }, "babel-traverse": { "version": "6.24.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.24.1", + "babylon": "6.17.2", + "debug": "2.6.8", + "globals": "9.17.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } }, "babel-types": { "version": "6.24.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } }, "babylon": { "version": "6.17.2", @@ -1129,12 +1530,21 @@ "brace-expansion": { "version": "1.1.7", "bundled": true, - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "builtin-modules": { "version": "1.1.1", @@ -1144,24 +1554,45 @@ "caching-transform": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.3.4" + } }, "center-align": { "version": "0.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chalk": { "version": "1.1.3", "bundled": true, - "dev": true + "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" + } }, "cliui": { "version": "2.1.0", "bundled": true, "dev": true, "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -1199,12 +1630,19 @@ "cross-spawn": { "version": "4.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.0.2", + "which": "1.2.14" + } }, "debug": { "version": "2.6.8", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "debug-log": { "version": "1.0.1", @@ -1219,17 +1657,26 @@ "default-require-extensions": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } }, "detect-indent": { "version": "4.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "error-ex": { "version": "1.3.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "escape-string-regexp": { "version": "1.0.5", @@ -1244,22 +1691,40 @@ "execa": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "get-stream": "2.3.1", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } }, "expand-brackets": { "version": "0.1.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "extglob": { "version": "0.3.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "filename-regex": { "version": "2.0.1", @@ -1269,17 +1734,32 @@ "fill-range": { "version": "2.2.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.6", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } }, "find-cache-dir": { "version": "0.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } }, "find-up": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "locate-path": "2.0.0" + } }, "for-in": { "version": "1.0.2", @@ -1289,12 +1769,19 @@ "for-own": { "version": "0.1.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "for-in": "1.0.2" + } }, "foreground-child": { "version": "1.5.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } }, "fs.realpath": { "version": "1.0.0", @@ -1309,22 +1796,41 @@ "get-stream": { "version": "2.3.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } }, "glob": { "version": "7.1.2", "bundled": true, - "dev": true + "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" + } }, "glob-base": { "version": "0.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-glob": "2.0.1" + } }, "globals": { "version": "9.17.0", @@ -1340,18 +1846,30 @@ "version": "4.0.10", "bundled": true, "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.27" + }, "dependencies": { "source-map": { "version": "0.4.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, "has-ansi": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-flag": { "version": "1.0.0", @@ -1371,7 +1889,11 @@ "inflight": { "version": "1.0.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -1381,7 +1903,10 @@ "invariant": { "version": "2.2.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } }, "invert-kv": { "version": "1.0.0", @@ -1401,7 +1926,10 @@ "is-builtin-module": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } }, "is-dotfile": { "version": "1.0.3", @@ -1411,7 +1939,10 @@ "is-equal-shallow": { "version": "0.1.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -1426,22 +1957,34 @@ "is-finite": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-glob": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "is-number": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, "is-posix-bracket": { "version": "0.1.1", @@ -1476,7 +2019,10 @@ "isobject": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "istanbul-lib-coverage": { "version": "1.1.1", @@ -1486,34 +2032,65 @@ "istanbul-lib-hook": { "version": "1.0.7", "bundled": true, - "dev": true + "dev": true, + "requires": { + "append-transform": "0.4.0" + } }, "istanbul-lib-instrument": { "version": "1.7.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-generator": "6.24.1", + "babel-template": "6.24.1", + "babel-traverse": "6.24.1", + "babel-types": "6.24.1", + "babylon": "6.17.2", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.3.0" + } }, "istanbul-lib-report": { "version": "1.1.1", "bundled": true, "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, "dependencies": { "supports-color": { "version": "3.2.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, "istanbul-lib-source-maps": { "version": "1.2.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.1", + "source-map": "0.5.6" + } }, "istanbul-reports": { "version": "1.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "handlebars": "4.0.10" + } }, "js-tokens": { "version": "3.0.1", @@ -1528,7 +2105,10 @@ "kind-of": { "version": "3.2.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } }, "lazy-cache": { "version": "1.0.4", @@ -1539,17 +2119,31 @@ "lcid": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } }, "load-json-file": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } }, "locate-path": { "version": "2.0.0", "bundled": true, "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, "dependencies": { "path-exists": { "version": "3.0.0", @@ -1571,17 +2165,27 @@ "loose-envify": { "version": "1.3.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "js-tokens": "3.0.1" + } }, "lru-cache": { "version": "4.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "md5-hex": { "version": "1.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } }, "md5-o-matic": { "version": "0.1.1", @@ -1591,17 +2195,38 @@ "mem": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } }, "merge-source-map": { "version": "1.0.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "micromatch": { "version": "2.3.11", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } }, "mimic-fn": { "version": "1.1.0", @@ -1611,7 +2236,10 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } }, "minimist": { "version": "0.0.8", @@ -1621,7 +2249,10 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -1631,17 +2262,29 @@ "normalize-package-data": { "version": "2.3.8", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.4.2", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } }, "normalize-path": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.1" + } }, "npm-run-path": { "version": "2.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-key": "2.0.1" + } }, "number-is-nan": { "version": "1.0.1", @@ -1656,17 +2299,28 @@ "object.omit": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } }, "once": { "version": "1.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "optimist": { "version": "0.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } }, "os-homedir": { "version": "1.0.2", @@ -1676,7 +2330,12 @@ "os-locale": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "execa": "0.5.1", + "lcid": "1.0.0", + "mem": "1.1.0" + } }, "p-finally": { "version": "1.0.0", @@ -1691,22 +2350,37 @@ "p-locate": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "p-limit": "1.1.0" + } }, "parse-glob": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "parse-json": { "version": "2.2.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "path-exists": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -1726,7 +2400,12 @@ "path-type": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "pify": { "version": "2.3.0", @@ -1741,17 +2420,27 @@ "pinkie-promise": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "pkg-dir": { "version": "1.0.0", "bundled": true, "dev": true, + "requires": { + "find-up": "1.1.2" + }, "dependencies": { "find-up": { "version": "1.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } } } }, @@ -1768,22 +2457,39 @@ "randomatic": { "version": "1.1.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "kind-of": "3.2.2" + } }, "read-pkg": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.3.8", + "path-type": "1.1.0" + } }, "read-pkg-up": { "version": "1.0.1", "bundled": true, "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, "dependencies": { "find-up": { "version": "1.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } } } }, @@ -1795,7 +2501,11 @@ "regex-cache": { "version": "0.4.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } }, "remove-trailing-separator": { "version": "1.0.1", @@ -1815,7 +2525,10 @@ "repeating": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "require-directory": { "version": "2.1.1", @@ -1836,12 +2549,18 @@ "version": "0.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { "version": "2.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "semver": { "version": "5.3.0", @@ -1871,12 +2590,23 @@ "spawn-wrap": { "version": "1.3.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "foreground-child": "1.5.6", + "mkdirp": "0.5.1", + "os-homedir": "1.0.2", + "rimraf": "2.6.1", + "signal-exit": "3.0.2", + "which": "1.2.14" + } }, "spdx-correct": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -1892,6 +2622,10 @@ "version": "2.0.0", "bundled": true, "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "3.0.1" + }, "dependencies": { "is-fullwidth-code-point": { "version": "2.0.0", @@ -1903,12 +2637,18 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-bom": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-eof": { "version": "1.0.0", @@ -1923,7 +2663,14 @@ "test-exclude": { "version": "4.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } }, "to-fast-properties": { "version": "1.0.3", @@ -1940,6 +2687,11 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "camelcase": { "version": "1.2.1", @@ -1951,7 +2703,13 @@ "version": "3.10.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } } } }, @@ -1964,12 +2722,19 @@ "validate-npm-package-license": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "which": { "version": "1.2.14", "bundled": true, - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "which-module": { "version": "2.0.0", @@ -1991,11 +2756,20 @@ "version": "2.1.0", "bundled": true, "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, "dependencies": { "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } }, @@ -2007,7 +2781,12 @@ "write-file-atomic": { "version": "1.3.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "y18n": { "version": "3.2.1", @@ -2023,6 +2802,21 @@ "version": "8.0.1", "bundled": true, "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.0.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.0.0", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, "dependencies": { "camelcase": { "version": "4.1.0", @@ -2033,33 +2827,61 @@ "version": "3.2.0", "bundled": true, "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, "dependencies": { "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } }, "load-json-file": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } }, "path-type": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pify": "2.3.0" + } }, "read-pkg": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.3.8", + "path-type": "2.0.0" + } }, "read-pkg-up": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } }, "strip-bom": { "version": "3.0.0", @@ -2069,7 +2891,10 @@ "yargs-parser": { "version": "7.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "camelcase": "4.1.0" + } } } }, @@ -2077,6 +2902,9 @@ "version": "5.0.0", "bundled": true, "dev": true, + "requires": { + "camelcase": "3.0.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -2103,13 +2931,20 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "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 + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } }, "os-homedir": { "version": "1.0.2", @@ -2127,19 +2962,32 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true + "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 + "dev": true, + "requires": { + "got": "5.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.3.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 + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -2163,7 +3011,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "prepend-http": { "version": "1.0.4", @@ -2176,6 +3027,10 @@ "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz", "integrity": "sha1-/P+rQdGcq0365eV15kJGYZsS0ok=", "dev": true, + "requires": { + "colors": "1.1.2", + "minimist": "1.2.0" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -2214,6 +3069,12 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -2228,6 +3089,10 @@ "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.2.10" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -2239,13 +3104,25 @@ "version": "2.2.10", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.0", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } } } }, @@ -2253,13 +3130,22 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "redeyed": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz", "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", - "dev": true + "dev": true, + "requires": { + "esprima": "3.0.0" + } }, "reflect-metadata": { "version": "0.1.9", @@ -2271,31 +3157,66 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true + "dev": true, + "requires": { + "rc": "1.2.1", + "safe-buffer": "5.1.0" + } }, "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 + "dev": true, + "requires": { + "rc": "1.2.1" + } }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "request": { "version": "2.79.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + } }, "resolve": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", - "dev": true + "dev": true, + "requires": { + "path-parse": "1.0.5" + } }, "safe-buffer": { "version": "5.1.0", @@ -2319,7 +3240,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true + "dev": true, + "requires": { + "semver": "5.3.0" + } }, "seq-queue": { "version": "0.0.5", @@ -2331,7 +3255,13 @@ "version": "1.17.7", "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", - "dev": true + "dev": true, + "requires": { + "formatio": "1.1.1", + "lolex": "1.3.2", + "samsam": "1.1.2", + "util": "0.10.3" + } }, "sinon-chai": { "version": "2.8.0", @@ -2349,7 +3279,10 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "source-map": { "version": "0.5.6", @@ -2361,7 +3294,10 @@ "version": "0.4.14", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.14.tgz", "integrity": "sha1-nURjdyWYuGJxtPUj9sH04Cp9au8=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "sprintf-js": { "version": "1.1.1", @@ -2374,6 +3310,10 @@ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.8.tgz", "integrity": "sha1-TLz5Zdi5AdGxAVy8f8QVquFX36o=", "dev": true, + "requires": { + "nan": "2.4.0", + "node-pre-gyp": "0.6.31" + }, "dependencies": { "node-pre-gyp": { "version": "0.6.31", @@ -3188,6 +4128,17 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -3197,16 +4148,21 @@ } } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "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": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "stringstream": { @@ -3219,7 +4175,10 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-bom": { "version": "3.0.0", @@ -3249,13 +4208,28 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1" + } }, "ts-node": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.0.4.tgz", "integrity": "sha1-oUdevyT9Ti7i+6ixqhYFuXe95QY=", "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "1.1.3", + "diff": "3.2.0", + "make-error": "1.3.0", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.4.14", + "tsconfig": "6.0.0", + "v8flags": "2.1.1", + "yn": "1.3.0" + }, "dependencies": { "diff": { "version": "3.2.0", @@ -3275,13 +4249,28 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", - "dev": true + "dev": true, + "requires": { + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1" + } }, "tslint": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.3.1.tgz", "integrity": "sha1-KPZ5xTyksnNoi8tvzw3ef/G7IWk=", "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "colors": "1.1.2", + "diff": "3.2.0", + "findup-sync": "0.3.0", + "glob": "7.1.2", + "optimist": "0.6.1", + "resolve": "1.3.3", + "underscore.string": "3.3.4", + "update-notifier": "1.0.3" + }, "dependencies": { "diff": { "version": "3.2.0", @@ -3293,7 +4282,15 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "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" + } } } }, @@ -3317,16 +4314,20 @@ "dev": true }, "typescript": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.2.1.tgz", - "integrity": "sha1-SGK2YrmIpMj/aRzHlpYi0k23auk=", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz", + "integrity": "sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==", "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 + "dev": true, + "requires": { + "sprintf-js": "1.1.1", + "util-deprecate": "1.0.2" + } }, "unzip-response": { "version": "1.0.2", @@ -3338,13 +4339,26 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", - "dev": true + "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 + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } }, "urlgrey": { "version": "0.4.4", @@ -3363,6 +4377,9 @@ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { "version": "2.0.1", @@ -3394,19 +4411,28 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true + "dev": true, + "requires": { + "user-home": "1.1.1" + } }, "verror": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } }, "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 + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "wordwrap": { "version": "0.0.3", @@ -3424,13 +4450,21 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true + "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 + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } }, "xtend": { "version": "4.0.1", @@ -3448,7 +4482,10 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/yn/-/yn-1.3.0.tgz", "integrity": "sha1-GwgSq7jYBdSJZvjfOF3J2syaGdg=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1" + } } } } diff --git a/package.json b/package.json index c8b70878..e09a65cc 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "sqlite3": "3.1.8", "ts-node": "3.0.4", "tslint": "4.3.1", - "typescript": "2.2.1", + "typescript": "2.5.3", "uuid-validate": "0.0.2" }, "engines": { diff --git a/test/specs/instance.spec.ts b/test/specs/instance.spec.ts index b7005f4a..e3bc250b 100644 --- a/test/specs/instance.spec.ts +++ b/test/specs/instance.spec.ts @@ -1,5 +1,6 @@ import {expect, use} from 'chai'; import {useFakeTimers} from 'sinon'; +import * as Promise from 'bluebird'; import * as chaiAsPromised from 'chai-as-promised'; import * as validateUUID from 'uuid-validate'; import {createSequelize} from "../utils/sequelize"; @@ -815,7 +816,7 @@ describe('instance', () => { it('should update the associations after one element deleted', () => Team - .create}>({ + .create }>({ name: 'the team', players: [{ name: 'the player1' @@ -1017,7 +1018,7 @@ describe('instance', () => { it('gets triggered if an error occurs', () => User - .findOne({where: ['asdasdasd']}) + .findOne({where: ['asdasdasd']}) .catch((err) => { expect(err).to.exist; expect(err.message).to.exist; @@ -1486,10 +1487,10 @@ describe('instance', () => { describe('with version option', () => { it("version column is updated by sequelize", () => { - let version = undefined; + let version = undefined; UserWithCustomUpdatedAt .sync() - .then(() => UserWithVersion.create({ name: 'john doe' })) + .then(() => UserWithVersion.create({name: 'john doe'})) .then((johnDoe: UserWithVersion) => { expect(johnDoe.version).not.to.be.undefined; version = johnDoe.version; @@ -1499,9 +1500,9 @@ describe('instance', () => { expect(johnDoe.name).not.equals('doe john'); expect(johnDoe.version).not.equals(version); return johnDoe.update({}); - }) + }); } - ) + ); }); @@ -1657,14 +1658,14 @@ describe('instance', () => { Promise .all([ - UserEager.create({username: 'bart', age: 20}), - UserEager.create({username: 'lisa', age: 20}), + UserEager.create({username: 'bart', age: 20}), + UserEager.create({username: 'lisa', age: 20}), ProjectEager.create({title: 'detention1', overdueDays: 0}), ProjectEager.create({title: 'detention2', overdueDays: 0}), ProjectEager.create({title: 'exam1', overdueDays: 0}), ProjectEager.create({title: 'exam2', overdueDays: 0}) ]) - .then(([bart, lisa, detention1, detention2, exam1, exam2]) => + .then(([bart, lisa, detention1, detention2, exam1, exam2]: any) => Promise .all([ bart.$set('projects', [detention1, detention2]), @@ -1961,7 +1962,7 @@ describe('instance', () => { ParanoidUser.create({username: 'cuss'}) .then(() => - ParanoidUser.findAll({ + ParanoidUser.findAll({ where: sequelize.or({ username: 'cuss' }) diff --git a/test/specs/services/association.spec.ts b/test/specs/services/association.spec.ts index a32a4c07..8ae83f3a 100644 --- a/test/specs/services/association.spec.ts +++ b/test/specs/services/association.spec.ts @@ -1,74 +1,10 @@ /* tslint:disable:max-classes-per-file */ import {expect} from 'chai'; -import {addAssociation, addForeignKey, getAssociations, getForeignKeys} from "../../../lib/services/association"; +import {addForeignKey, getForeignKeys} from "../../../lib/services/association"; import {Model} from "../../../lib/models/Model"; describe('service.association', () => { - describe('addAssociation', () => { - - it('should add association to target metadata', () => { - const target = {}; - const RELATION = 'hasMany'; - const AS_NAME = 'test'; - const RELATED_CLASS_GETTER = () => class T extends Model {}; - addAssociation(target, RELATION, RELATED_CLASS_GETTER, AS_NAME); - const associations = getAssociations(target); - - expect(associations).to.have.property('length', 1); - expect(associations[0]).to.eql({ - relation: RELATION, - options: {}, - through: undefined, - throughClassGetter: undefined, - as: AS_NAME, - relatedClassGetter: RELATED_CLASS_GETTER, - }); - }); - - it('should add association to target metadata, but not parent', () => { - const parent = {}; - const target = Object.create(parent); - const RELATION = 'hasMany'; - const PARENT_RELATION = 'belongsToMany'; - const AS_NAME = 'test'; - const RELATED_CLASS_GETTER = () => class T extends Model {}; - addAssociation(parent, PARENT_RELATION, RELATED_CLASS_GETTER, AS_NAME); - addAssociation(target, RELATION, RELATED_CLASS_GETTER, AS_NAME); - - const associations = getAssociations(target); - expect(associations).to.have.property('length', 2); - expect(associations[0]).to.eql({ - relation: PARENT_RELATION, - options: {}, - through: undefined, - throughClassGetter: undefined, - as: AS_NAME, - relatedClassGetter: RELATED_CLASS_GETTER, - }); - expect(associations[1]).to.eql({ - relation: RELATION, - options: {}, - through: undefined, - throughClassGetter: undefined, - as: AS_NAME, - relatedClassGetter: RELATED_CLASS_GETTER, - }); - - const parentAssociations = getAssociations(parent); - expect(parentAssociations).to.have.property('length', 1); - expect(parentAssociations[0]).to.eql({ - relation: PARENT_RELATION, - options: {}, - through: undefined, - throughClassGetter: undefined, - as: AS_NAME, - relatedClassGetter: RELATED_CLASS_GETTER, - }); - }); - - }); - describe('addForeignKey', () => { it('should add foreign key to target metadata', () => { From 8abd84185424db5f9b3a44e25960f8c1b901f3f7 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Tue, 24 Oct 2017 19:42:09 +0200 Subject: [PATCH 02/20] tests adjusted --- example/app.ts | 2 +- package-lock.json | 547 ++++++++++++++++++--------------- package.json | 21 +- test/mocha.opts | 3 + test/specs/association.spec.ts | 166 +++++----- test/specs/validation.spec.ts | 4 +- 6 files changed, 415 insertions(+), 328 deletions(-) diff --git a/example/app.ts b/example/app.ts index 7c1f1fa3..6618e8f3 100644 --- a/example/app.ts +++ b/example/app.ts @@ -10,7 +10,7 @@ import Book from "./models/Book"; /* tslint:disable:no-console */ /* tslint:disable:no-unused-new */ -new Sequelize({ +const s = new Sequelize({ validateOnly: true, modelPaths: [__dirname + '/models/validation-only'] }); diff --git a/package-lock.json b/package-lock.json index 40996415..def47a3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -347,6 +347,21 @@ "urlgrey": "0.4.4" } }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", @@ -444,12 +459,12 @@ } }, "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": { @@ -488,9 +503,9 @@ "dev": true }, "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", "dev": true }, "dot-prop": { @@ -692,9 +707,9 @@ } }, "glob": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", - "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", + "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", @@ -773,9 +788,9 @@ "dev": true }, "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", "dev": true }, "har-validator": { @@ -817,12 +832,27 @@ "sntp": "1.0.9" } }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, "http-signature": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", @@ -993,12 +1023,6 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, "jsonpointer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", @@ -1046,74 +1070,6 @@ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", "dev": true }, - "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" - } - }, "lolex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", @@ -1188,28 +1144,33 @@ } }, "mocha": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.2.0.tgz", - "integrity": "sha1-fcT0XlCIB1FxpoiWgU5q6et6heM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", + "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", "dev": true, "requires": { "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.2.0", - "diff": "1.4.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", "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.3", + "he": "1.1.1", "mkdirp": "0.5.1", - "supports-color": "3.1.2" + "supports-color": "4.4.0" }, "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "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": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -1224,9 +1185,9 @@ "dev": true }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "mysql": { @@ -1336,9 +1297,9 @@ "dev": true }, "nyc": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.0.2.tgz", - "integrity": "sha512-31rRd6ME9NM17w0oPKqi51a6fzJAqYarnzQXK+iL8XaX+3H6VH0BQut7qHIgrv2mBASRic4oNi2KRgcbFODrsQ==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.2.1.tgz", + "integrity": "sha1-rYUK/p261/SXByi0suR/7Rw4chw=", "dev": true, "requires": { "archy": "1.0.0", @@ -1353,20 +1314,20 @@ "glob": "7.1.2", "istanbul-lib-coverage": "1.1.1", "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.7.2", + "istanbul-lib-instrument": "1.8.0", "istanbul-lib-report": "1.1.1", "istanbul-lib-source-maps": "1.2.1", - "istanbul-reports": "1.1.1", + "istanbul-reports": "1.1.2", "md5-hex": "1.3.0", - "merge-source-map": "1.0.3", + "merge-source-map": "1.0.4", "micromatch": "2.3.11", "mkdirp": "0.5.1", "resolve-from": "2.0.0", "rimraf": "2.6.1", "signal-exit": "3.0.2", - "spawn-wrap": "1.3.6", + "spawn-wrap": "1.3.8", "test-exclude": "4.1.1", - "yargs": "8.0.1", + "yargs": "8.0.2", "yargs-parser": "5.0.0" }, "dependencies": { @@ -1413,11 +1374,11 @@ "bundled": true, "dev": true, "requires": { - "arr-flatten": "1.0.3" + "arr-flatten": "1.1.0" } }, "arr-flatten": { - "version": "1.0.3", + "version": "1.1.0", "bundled": true, "dev": true }, @@ -1437,27 +1398,27 @@ "dev": true }, "babel-code-frame": { - "version": "6.22.0", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", - "js-tokens": "3.0.1" + "js-tokens": "3.0.2" } }, "babel-generator": { - "version": "6.24.1", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", "lodash": "4.17.4", - "source-map": "0.5.6", + "source-map": "0.5.7", "trim-right": "1.0.1" } }, @@ -1466,73 +1427,73 @@ "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.26.0" } }, "babel-runtime": { - "version": "6.23.0", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" + "core-js": "2.5.1", + "regenerator-runtime": "0.11.0" } }, "babel-template": { - "version": "6.24.1", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.2", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", "lodash": "4.17.4" } }, "babel-traverse": { - "version": "6.24.1", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { - "babel-code-frame": "6.22.0", + "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", - "babylon": "6.17.2", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", "debug": "2.6.8", - "globals": "9.17.0", + "globals": "9.18.0", "invariant": "2.2.2", "lodash": "4.17.4" } }, "babel-types": { - "version": "6.24.1", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.26.0", "esutils": "2.0.2", "lodash": "4.17.4", "to-fast-properties": "1.0.3" } }, "babylon": { - "version": "6.17.2", + "version": "6.18.0", "bundled": true, "dev": true }, "balanced-match": { - "version": "0.4.2", + "version": "1.0.0", "bundled": true, "dev": true }, "brace-expansion": { - "version": "1.1.7", + "version": "1.1.8", "bundled": true, "dev": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -1561,6 +1522,12 @@ "write-file-atomic": "1.3.4" } }, + "camelcase": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true + }, "center-align": { "version": "0.1.3", "bundled": true, @@ -1623,7 +1590,7 @@ "dev": true }, "core-js": { - "version": "2.4.1", + "version": "2.5.1", "bundled": true, "dev": true }, @@ -1632,8 +1599,8 @@ "bundled": true, "dev": true, "requires": { - "lru-cache": "4.0.2", - "which": "1.2.14" + "lru-cache": "4.1.1", + "which": "1.3.0" } }, "debug": { @@ -1689,17 +1656,29 @@ "dev": true }, "execa": { - "version": "0.5.1", + "version": "0.7.0", "bundled": true, "dev": true, "requires": { - "cross-spawn": "4.0.2", - "get-stream": "2.3.1", + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", "is-stream": "1.1.0", "npm-run-path": "2.0.2", "p-finally": "1.0.0", "signal-exit": "3.0.2", "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } } }, "expand-brackets": { @@ -1738,7 +1717,7 @@ "requires": { "is-number": "2.1.0", "isobject": "2.1.0", - "randomatic": "1.1.6", + "randomatic": "1.1.7", "repeat-element": "1.1.2", "repeat-string": "1.6.1" } @@ -1794,13 +1773,9 @@ "dev": true }, "get-stream": { - "version": "2.3.1", + "version": "3.0.0", "bundled": true, - "dev": true, - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } + "dev": true }, "glob": { "version": "7.1.2", @@ -1833,7 +1808,7 @@ } }, "globals": { - "version": "9.17.0", + "version": "9.18.0", "bundled": true, "dev": true }, @@ -1850,7 +1825,7 @@ "async": "1.5.2", "optimist": "0.6.1", "source-map": "0.4.4", - "uglify-js": "2.8.27" + "uglify-js": "2.8.29" }, "dependencies": { "source-map": { @@ -1877,7 +1852,7 @@ "dev": true }, "hosted-git-info": { - "version": "2.4.2", + "version": "2.5.0", "bundled": true, "dev": true }, @@ -2038,17 +2013,17 @@ } }, "istanbul-lib-instrument": { - "version": "1.7.2", + "version": "1.8.0", "bundled": true, "dev": true, "requires": { - "babel-generator": "6.24.1", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.2", + "babel-generator": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", "istanbul-lib-coverage": "1.1.1", - "semver": "5.3.0" + "semver": "5.4.1" } }, "istanbul-lib-report": { @@ -2081,11 +2056,11 @@ "istanbul-lib-coverage": "1.1.1", "mkdirp": "0.5.1", "rimraf": "2.6.1", - "source-map": "0.5.6" + "source-map": "0.5.7" } }, "istanbul-reports": { - "version": "1.1.1", + "version": "1.1.2", "bundled": true, "dev": true, "requires": { @@ -2093,7 +2068,7 @@ } }, "js-tokens": { - "version": "3.0.1", + "version": "3.0.2", "bundled": true, "dev": true }, @@ -2167,11 +2142,11 @@ "bundled": true, "dev": true, "requires": { - "js-tokens": "3.0.1" + "js-tokens": "3.0.2" } }, "lru-cache": { - "version": "4.0.2", + "version": "4.1.1", "bundled": true, "dev": true, "requires": { @@ -2201,11 +2176,11 @@ } }, "merge-source-map": { - "version": "1.0.3", + "version": "1.0.4", "bundled": true, "dev": true, "requires": { - "source-map": "0.5.6" + "source-map": "0.5.7" } }, "micromatch": { @@ -2225,7 +2200,7 @@ "normalize-path": "2.1.1", "object.omit": "2.0.1", "parse-glob": "3.0.4", - "regex-cache": "0.4.3" + "regex-cache": "0.4.4" } }, "mimic-fn": { @@ -2238,7 +2213,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "1.1.8" } }, "minimist": { @@ -2260,13 +2235,13 @@ "dev": true }, "normalize-package-data": { - "version": "2.3.8", + "version": "2.4.0", "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.4.2", + "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", - "semver": "5.3.0", + "semver": "5.4.1", "validate-npm-package-license": "3.0.1" } }, @@ -2275,7 +2250,7 @@ "bundled": true, "dev": true, "requires": { - "remove-trailing-separator": "1.0.1" + "remove-trailing-separator": "1.1.0" } }, "npm-run-path": { @@ -2328,11 +2303,11 @@ "dev": true }, "os-locale": { - "version": "2.0.0", + "version": "2.1.0", "bundled": true, "dev": true, "requires": { - "execa": "0.5.1", + "execa": "0.7.0", "lcid": "1.0.0", "mem": "1.1.0" } @@ -2455,12 +2430,40 @@ "dev": true }, "randomatic": { - "version": "1.1.6", + "version": "1.1.7", "bundled": true, "dev": true, "requires": { - "is-number": "2.1.0", - "kind-of": "3.2.2" + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } } }, "read-pkg": { @@ -2469,7 +2472,7 @@ "dev": true, "requires": { "load-json-file": "1.1.0", - "normalize-package-data": "2.3.8", + "normalize-package-data": "2.4.0", "path-type": "1.1.0" } }, @@ -2494,21 +2497,20 @@ } }, "regenerator-runtime": { - "version": "0.10.5", + "version": "0.11.0", "bundled": true, "dev": true }, "regex-cache": { - "version": "0.4.3", + "version": "0.4.4", "bundled": true, "dev": true, "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" + "is-equal-shallow": "0.1.3" } }, "remove-trailing-separator": { - "version": "1.0.1", + "version": "1.1.0", "bundled": true, "dev": true }, @@ -2563,7 +2565,7 @@ } }, "semver": { - "version": "5.3.0", + "version": "5.4.1", "bundled": true, "dev": true }, @@ -2572,6 +2574,19 @@ "bundled": true, "dev": true }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, "signal-exit": { "version": "3.0.2", "bundled": true, @@ -2583,12 +2598,12 @@ "dev": true }, "source-map": { - "version": "0.5.6", + "version": "0.5.7", "bundled": true, "dev": true }, "spawn-wrap": { - "version": "1.3.6", + "version": "1.3.8", "bundled": true, "dev": true, "requires": { @@ -2597,7 +2612,7 @@ "os-homedir": "1.0.2", "rimraf": "2.6.1", "signal-exit": "3.0.2", - "which": "1.2.14" + "which": "1.3.0" } }, "spdx-correct": { @@ -2619,18 +2634,31 @@ "dev": true }, "string-width": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "3.0.1" + "strip-ansi": "4.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "bundled": true, "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } } } }, @@ -2683,22 +2711,16 @@ "dev": true }, "uglify-js": { - "version": "2.8.27", + "version": "2.8.29", "bundled": true, "dev": true, "optional": true, "requires": { - "source-map": "0.5.6", + "source-map": "0.5.7", "uglify-to-browserify": "1.0.2", "yargs": "3.10.0" }, "dependencies": { - "camelcase": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true - }, "yargs": { "version": "3.10.0", "bundled": true, @@ -2729,7 +2751,7 @@ } }, "which": { - "version": "1.2.14", + "version": "1.3.0", "bundled": true, "dev": true, "requires": { @@ -2799,7 +2821,7 @@ "dev": true }, "yargs": { - "version": "8.0.1", + "version": "8.0.2", "bundled": true, "dev": true, "requires": { @@ -2807,12 +2829,12 @@ "cliui": "3.2.0", "decamelize": "1.2.0", "get-caller-file": "1.0.2", - "os-locale": "2.0.0", + "os-locale": "2.1.0", "read-pkg-up": "2.0.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", - "string-width": "2.0.0", + "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", "yargs-parser": "7.0.0" @@ -2870,7 +2892,7 @@ "dev": true, "requires": { "load-json-file": "2.0.0", - "normalize-package-data": "2.3.8", + "normalize-package-data": "2.4.0", "path-type": "2.0.0" } }, @@ -2989,6 +3011,12 @@ "error-ex": "1.3.1" } }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3285,18 +3313,18 @@ } }, "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.14.tgz", - "integrity": "sha1-nURjdyWYuGJxtPUj9sH04Cp9au8=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.0.tgz", + "integrity": "sha512-vUoN3I7fHQe0R/SJLKRdKYuEdRGogsviXFkHHo17AWaTGv17VLnxw+CFXvqy+y4ORZ3doWLQcxRYfwKrsd/H7Q==", "dev": true, "requires": { - "source-map": "0.5.6" + "source-map": "0.6.1" } }, "sprintf-js": { @@ -4214,27 +4242,47 @@ } }, "ts-node": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.0.4.tgz", - "integrity": "sha1-oUdevyT9Ti7i+6ixqhYFuXe95QY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", + "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", "dev": true, "requires": { "arrify": "1.0.1", - "chalk": "1.1.3", - "diff": "3.2.0", + "chalk": "2.1.0", + "diff": "3.4.0", "make-error": "1.3.0", "minimist": "1.2.0", "mkdirp": "0.5.1", - "source-map-support": "0.4.14", + "source-map-support": "0.4.18", "tsconfig": "6.0.0", - "v8flags": "2.1.1", - "yn": "1.3.0" + "v8flags": "3.0.1", + "yn": "2.0.0" }, "dependencies": { - "diff": { + "ansi-styles": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + } + }, + "diff": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", "dev": true }, "minimist": { @@ -4242,6 +4290,30 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -4366,12 +4438,6 @@ "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", "dev": true }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -4408,12 +4474,12 @@ "dev": true }, "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", + "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", "dev": true, "requires": { - "user-home": "1.1.1" + "homedir-polyfill": "1.0.1" } }, "verror": { @@ -4479,13 +4545,10 @@ "dev": true }, "yn": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-1.3.0.tgz", - "integrity": "sha1-GwgSq7jYBdSJZvjfOF3J2syaGdg=", - "dev": true, - "requires": { - "object-assign": "4.1.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true } } } diff --git a/package.json b/package.json index e09a65cc..adfba043 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,9 @@ "prepare-test-v4": "npm install sequelize@4.1.0 --no-save && npm run build-tests-es6", "test-v3": "npm run prepare-test-v3 && npm run exec-tests", "test-v4": "npm run prepare-test-v4 && npm run exec-tests", - "cover-v3": "npm run prepare-test-v3 && nyc --exclude lib/models/v4/**/*.js --all --require source-map-support/register mocha test/specs/", - "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js --all --require source-map-support/register mocha test/specs/", - "exec-tests": "mocha test/specs/", + "cover-v3": "npm run prepare-test-v3 && nyc --exclude lib/models/v4/**/*.ts mocha", + "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.ts mocha", + "exec-tests": "mocha", "test": "npm run test-v4 && npm run test-v3", "cover": "npm run cover-v4 && npm run cover-v3", "lint": "tslint ." @@ -63,18 +63,18 @@ "codecov": "2.1.0", "has-flag": "2.0.0", "lodash": "4.17.4", - "mocha": "3.2.0", + "mocha": "4.0.1", "moment": "2.17.1", "mysql": "2.13.0", "mysql2": "1.3.5", - "nyc": "11.0.2", + "nyc": "11.2.1", "prettyjson": "1.2.1", "reflect-metadata": "0.1.9", "sinon": "1.17.7", "sinon-chai": "2.8.0", - "source-map-support": "0.4.14", + "source-map-support": "0.5.0", "sqlite3": "3.1.8", - "ts-node": "3.0.4", + "ts-node": "3.3.0", "tslint": "4.3.1", "typescript": "2.5.3", "uuid-validate": "0.0.2" @@ -88,13 +88,14 @@ "functions": 85, "branches": 85, "include": [ - "lib/**/*.js" + "lib" ], - "exclude": [ - "test/**/*.js" + "extension": [ + ".ts" ], "reporter": [ "lcov", + "text", "text-summary" ], "cache": true, diff --git a/test/mocha.opts b/test/mocha.opts index a05fa8cc..e93898c9 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,2 +1,5 @@ +--require ts-node/register +--require source-map-support/register --recursive +test/specs/**/*.ts diff --git a/test/specs/association.spec.ts b/test/specs/association.spec.ts index cac5deb5..9aeb63e2 100644 --- a/test/specs/association.spec.ts +++ b/test/specs/association.spec.ts @@ -203,28 +203,29 @@ describe('association', () => { Book.create(sherlockHolmesBook, {include: [Page]}) .then(book => Book.findById(book.id)) - .then(book => - book + .then(book => { + if (!book) throw Error(`Book is null`); + return book .$get('pages') .then(pages => { - assertInstance(pages, sherlockHolmesBook.pages); - }) - ) + }); + }) ); it('should get related instance of source instance', () => Page.create(page1, {include: [Book]}) .then(page => Page.findById(page.id)) - .then(page => - page + .then(page => { + if (!page) throw Error(`Page is null`); + return page .$get('book') .then(book => { assertInstance(book, page1.book); - }) - ) + }); + }) ); }); @@ -433,10 +434,11 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => _book.$has('pages', book.pages)) - .then(result => { - - expect(result).to.be.true; + .then(_book => { + expect(_book).to.be.not.null; + if (_book) { + expect(_book.$has('pages', book.pages)).to.be.true; + } }) ) ); @@ -451,10 +453,11 @@ describe('association', () => { .then(([book, page]) => Book .findById(book.id) - .then(_book => _book.$has('pages', page)) - .then(result => { - - expect(result).to.be.false; + .then(_book => { + expect(_book).to.be.not.null; + if (_book) { + expect(_book.$has('pages', book.pages)).to.be.false; + } }) ) ); @@ -469,10 +472,11 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => _book.$count('pages')) - .then(result => { - - expect(result).to.equal(sherlockHolmesBook.pages.length); + .then(_book => { + expect(_book).to.be.not.null; + if (_book) { + expect(_book.$count('pages')).to.equal(sherlockHolmesBook.pages.length); + } }) ) ); @@ -483,10 +487,11 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => _book.$count('pages')) - .then(result => { - - expect(result).to.equal(0); + .then(_book => { + expect(_book).to.be.not.null; + if (_book) { + expect(_book.$count('pages')).to.equal(0); + } }) ) ); @@ -907,24 +912,30 @@ describe('association', () => { .all([ Book.create(sherlockHolmesBook, {include: [Author]}) .then(book => Book.findById(book.id)) - .then(book => - book - .$get('authors') - .then(authors => { - - assertInstance(authors, sherlockHolmesBook.authors); - }) - ), + .then(book => { + expect(book).to.be.not.null; + if (book) { + return book + .$get('authors') + .then(authors => { + assertInstance(authors, sherlockHolmesBook.authors); + }); + } + + }), Author.create(julesVerne, {include: [Book]}) .then(author => Author.findById(author.id)) - .then(author => - author - .$get('books') - .then(books => { - - assertInstance(books, julesVerne.books); - }) - ) + .then(author => { + expect(author).to.be.not.null; + if (author) { + return author + .$get('books') + .then(books => { + + assertInstance(books, julesVerne.books); + }); + } + }) ]) ); @@ -1097,10 +1108,11 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => _book.$has('authors', book.authors)) - .then(result => { - - expect(result).to.be.true; + .then(_book => { + expect(_book).to.be.not.null; + if (_book) { + expect(_book.$has('authors', book.authors)).to.be.true; + } }) ) ); @@ -1115,10 +1127,11 @@ describe('association', () => { .then(([book, author]) => Book .findById(book.id) - .then(_book => _book.$has('authors', author)) - .then(result => { - - expect(result).to.be.false; + .then(_book => { + expect(_book).to.be.not.null; + if (_book) { + expect(_book.$has('authors', book.authors)).to.be.false; + } }) ) ); @@ -1133,10 +1146,11 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => _book.$count('authors')) - .then(result => { - - expect(result).to.equal(sherlockHolmesBook.authors.length); + .then(_book => { + expect(_book).to.be.not.null; + if (_book) { + expect(_book.$count('authors')).to.equal(sherlockHolmesBook.authors.length); + } }) ) ); @@ -1147,10 +1161,11 @@ describe('association', () => { .then((author) => Author .findById(author.id) - .then(_author => _author.$count('books')) - .then(result => { - - expect(result).to.equal(0); + .then(_book => { + expect(_book).to.be.not.null; + if (_book) { + expect(_book.$count('authors')).to.equal(0); + } }) ) ); @@ -1509,24 +1524,29 @@ describe('association', () => { .all([ User.create(userWithAddress, {include: [Address]}) .then(user => User.findById(user.id)) - .then(user => - user - .$get('address') - .then(address => { - - assertInstance(address, userWithAddress.address); - }) - ), + .then(user => { + expect(user).to.be.not.null; + if (user) { + return user + .$get('address') + .then(address => { + + assertInstance(address, userWithAddress.address); + }); + } + }), Address.create(emancipatedAddress, {include: [User]}) .then(author => Address.findById(author.id)) - .then(author => - author - .$get('user') - .then(user => { - - assertInstance(user, emancipatedAddress.user); - }) - ) + .then(author => { + expect(author).to.be.not.null; + if (author) { + return author + .$get('user') + .then(user => { + assertInstance(user, emancipatedAddress.user); + }); + } + }) ]) ); diff --git a/test/specs/validation.spec.ts b/test/specs/validation.spec.ts index 56233ba6..b9d7184f 100644 --- a/test/specs/validation.spec.ts +++ b/test/specs/validation.spec.ts @@ -150,8 +150,8 @@ describe('validation', () => { } }; - const validPromises = []; - const invalidPromises = []; + const validPromises: Array> = []; + const invalidPromises: Array> = []; Object .keys(data) From 34adfabac7e5ba39cb5a3d65baad68b4923c4b5a Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Tue, 24 Oct 2017 22:24:36 +0200 Subject: [PATCH 03/20] closes #179 --- lib/annotations/Column.ts | 2 +- package-lock.json | 1711 ++++++++++++++++++++++++++++++++----- package.json | 14 +- test/mocha.opts | 3 + test/tsconfig.json | 2 +- 5 files changed, 1524 insertions(+), 208 deletions(-) diff --git a/lib/annotations/Column.ts b/lib/annotations/Column.ts index 51256350..40d1fc52 100644 --- a/lib/annotations/Column.ts +++ b/lib/annotations/Column.ts @@ -40,7 +40,7 @@ function annotate(target: any, }; } else { - options = Object.assign({}, optionsOrDataType); + options = Object.assign({}, optionsOrDataType as IPartialDefineAttributeColumnOptions); if (!options.type) { options.type = getSequelizeTypeByDesignType(target, propertyName); diff --git a/package-lock.json b/package-lock.json index 2b40743b..66973ec1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,6 +2,7 @@ "name": "sequelize-typescript", "version": "0.6.0-beta.2", "lockfileVersion": 1, + "requires": true, "dependencies": { "@types/bluebird": { "version": "3.5.4", @@ -18,13 +19,20 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-0.0.29.tgz", "integrity": "sha1-Q9UokqqZjhhaPePiR37bhXO+HXc=", - "dev": true + "dev": true, + "requires": { + "@types/chai": "3.4.35", + "@types/promises-a-plus": "0.0.27" + } }, "@types/chai-datetime": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/chai-datetime/-/chai-datetime-0.0.30.tgz", "integrity": "sha1-EhNEEGcsFkO9qlrKIzmw43F68Yg=", - "dev": true + "dev": true, + "requires": { + "@types/chai": "3.4.35" + } }, "@types/lodash": { "version": "4.14.54", @@ -62,7 +70,12 @@ "@types/sequelize": { "version": "4.0.73", "resolved": "https://registry.npmjs.org/@types/sequelize/-/sequelize-4.0.73.tgz", - "integrity": "sha512-qfC8DDkU/ROyS5SudxKT80DU4F/YAFXSnlh0HdO7hIFOo5og2HDlOwEjAouRLNykUr6gscXC/C6+rlvxfiJp+g==" + "integrity": "sha512-qfC8DDkU/ROyS5SudxKT80DU4F/YAFXSnlh0HdO7hIFOo5og2HDlOwEjAouRLNykUr6gscXC/C6+rlvxfiJp+g==", + "requires": { + "@types/bluebird": "3.5.4", + "@types/lodash": "4.14.54", + "@types/validator": "6.2.2" + } }, "@types/sinon": { "version": "1.16.35", @@ -74,7 +87,11 @@ "version": "2.7.27", "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-2.7.27.tgz", "integrity": "sha1-63cpBY3fJTppeeVZuytJEISWmqE=", - "dev": true + "dev": true, + "requires": { + "@types/chai": "3.4.35", + "@types/sinon": "1.16.35" + } }, "@types/validator": { "version": "6.2.2", @@ -85,7 +102,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "ansi-regex": { "version": "2.1.1", @@ -157,7 +177,12 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.1" + } }, "balanced-match": { "version": "0.4.2", @@ -170,7 +195,10 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "bignumber.js": { "version": "3.1.2", @@ -182,19 +210,37 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "boxen": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", - "dev": true + "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" + } }, "brace-expansion": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "browser-stdout": { "version": "1.3.0", @@ -218,7 +264,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", - "dev": true + "dev": true, + "requires": { + "ansicolors": "0.2.1", + "redeyed": "1.0.1" + } }, "caseless": { "version": "0.11.0", @@ -230,25 +280,43 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dev": true + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" + } }, "chai-as-promised": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-6.0.0.tgz", "integrity": "sha1-GgKkM6byTa+sY7nJb6FoTbGqjaY=", - "dev": true + "dev": true, + "requires": { + "check-error": "1.0.2" + } }, "chai-datetime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/chai-datetime/-/chai-datetime-1.4.1.tgz", "integrity": "sha1-M3n8GNng0A8u1GWZh1JNYhHGQqg=", - "dev": true + "dev": true, + "requires": { + "chai": "3.5.0" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "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" + } }, "check-error": { "version": "1.0.2", @@ -272,7 +340,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/codecov/-/codecov-2.1.0.tgz", "integrity": "sha1-JfSPnpqnRzthxampNNWVQgpxyt4=", - "dev": true + "dev": true, + "requires": { + "argv": "0.0.2", + "request": "2.79.0", + "urlgrey": "0.4.4" + } }, "colors": { "version": "1.1.2", @@ -284,13 +357,19 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "concat-map": { "version": "0.0.1", @@ -303,6 +382,17 @@ "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.4", + "uuid": "2.0.3", + "write-file-atomic": "1.3.4", + "xdg-basedir": "2.0.0" + }, "dependencies": { "uuid": { "version": "2.0.3", @@ -322,19 +412,28 @@ "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 + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } }, "cryptiles": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1" + } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -348,13 +447,19 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "deep-eql": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", "dev": true, + "requires": { + "type-detect": "0.1.1" + }, "dependencies": { "type-detect": { "version": "0.1.1", @@ -392,13 +497,19 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true + "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.2.10" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -410,13 +521,25 @@ "version": "2.2.10", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.0", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } } } }, @@ -425,13 +548,19 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "es6-shim": { "version": "0.35.3", @@ -479,12 +608,22 @@ "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 + "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" + } } } }, @@ -498,13 +637,21 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "formatio": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", - "dev": true + "dev": true, + "requires": { + "samsam": "1.1.2" + } }, "fs.realpath": { "version": "1.0.0", @@ -522,13 +669,19 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true + "dev": true, + "requires": { + "is-property": "1.0.2" + } }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -542,13 +695,38 @@ "version": "7.0.5", "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", - "dev": true + "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" + } }, "got": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "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.0", + "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.2.10", + "timed-out": "3.1.3", + "unzip-response": "1.0.2", + "url-parse-lax": "1.0.0" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -560,13 +738,25 @@ "version": "2.2.10", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.0", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } } } }, @@ -592,13 +782,22 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.16.0", + "pinkie-promise": "2.0.1" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-flag": { "version": "2.0.0", @@ -610,7 +809,13 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { "version": "2.16.3", @@ -622,7 +827,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } }, "iconv-lite": { "version": "0.4.18", @@ -640,7 +850,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -664,19 +878,31 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true + "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=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-my-json-valid": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", - "dev": true + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } }, "is-npm": { "version": "1.0.0", @@ -737,7 +963,10 @@ "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "js-tokens": { "version": "3.0.1", @@ -781,6 +1010,12 @@ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -794,7 +1029,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", - "dev": true + "dev": true, + "requires": { + "package-json": "2.4.0" + } }, "lazy-req": { "version": "1.1.0", @@ -812,7 +1050,11 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } }, "lodash._basecopy": { "version": "3.0.1", @@ -842,7 +1084,12 @@ "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 + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } }, "lodash.isarguments": { "version": "3.1.0", @@ -860,7 +1107,12 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lolex": { "version": "1.3.2", @@ -884,7 +1136,11 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "make-error": { "version": "1.3.0", @@ -902,13 +1158,19 @@ "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } }, "minimist": { "version": "0.0.8", @@ -920,19 +1182,38 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "mocha": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.2.0.tgz", "integrity": "sha1-fcT0XlCIB1FxpoiWgU5q6et6heM=", "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.5", + "glob": "7.0.5", + "growl": "1.9.2", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, "dependencies": { "supports-color": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -952,13 +1233,32 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.13.0.tgz", "integrity": "sha1-mY8fjKRuLj3XFJzpgkE2U5hqrkc=", - "dev": true + "dev": true, + "requires": { + "bignumber.js": "3.1.2", + "readable-stream": "1.1.14", + "sqlstring": "2.2.0" + } }, "mysql2": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.3.5.tgz", "integrity": "sha1-rmoJkiij3Ln5RUZ2B2/pOT1wrv4=", "dev": true, + "requires": { + "cardinal": "1.0.0", + "denque": "1.1.1", + "generate-function": "2.0.0", + "iconv-lite": "0.4.18", + "long": "3.2.0", + "lru-cache": "4.1.1", + "named-placeholders": "1.1.1", + "object-assign": "4.1.1", + "readable-stream": "2.2.11", + "safe-buffer": "5.1.0", + "seq-queue": "0.0.5", + "sqlstring": "2.2.0" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -971,6 +1271,15 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.0.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + }, "dependencies": { "safe-buffer": { "version": "5.0.1", @@ -984,7 +1293,10 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } } } }, @@ -993,6 +1305,9 @@ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.1.tgz", "integrity": "sha1-O3oNJiA910s6nfTJz7gnsvuQfmQ=", "dev": true, + "requires": { + "lru-cache": "2.5.0" + }, "dependencies": { "lru-cache": { "version": "2.5.0", @@ -1025,11 +1340,45 @@ "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.0.2.tgz", "integrity": "sha512-31rRd6ME9NM17w0oPKqi51a6fzJAqYarnzQXK+iL8XaX+3H6VH0BQut7qHIgrv2mBASRic4oNi2KRgcbFODrsQ==", "dev": true, + "requires": { + "archy": "1.0.0", + "arrify": "1.0.1", + "caching-transform": "1.0.1", + "convert-source-map": "1.5.0", + "debug-log": "1.0.1", + "default-require-extensions": "1.0.0", + "find-cache-dir": "0.1.1", + "find-up": "2.1.0", + "foreground-child": "1.5.6", + "glob": "7.1.2", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.0.7", + "istanbul-lib-instrument": "1.7.2", + "istanbul-lib-report": "1.1.1", + "istanbul-lib-source-maps": "1.2.1", + "istanbul-reports": "1.1.1", + "md5-hex": "1.3.0", + "merge-source-map": "1.0.3", + "micromatch": "2.3.11", + "mkdirp": "0.5.1", + "resolve-from": "2.0.0", + "rimraf": "2.6.1", + "signal-exit": "3.0.2", + "spawn-wrap": "1.3.6", + "test-exclude": "4.1.1", + "yargs": "8.0.1", + "yargs-parser": "5.0.0" + }, "dependencies": { "align-text": { "version": "0.1.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } }, "amdefine": { "version": "1.0.1", @@ -1049,7 +1398,10 @@ "append-transform": { "version": "0.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } }, "archy": { "version": "1.0.0", @@ -1059,7 +1411,10 @@ "arr-diff": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.0.3" + } }, "arr-flatten": { "version": "1.0.3", @@ -1084,37 +1439,83 @@ "babel-code-frame": { "version": "6.22.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.1" + } }, "babel-generator": { "version": "6.24.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.24.1", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + } }, "babel-messages": { "version": "6.23.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-runtime": { "version": "6.23.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + } }, "babel-template": { "version": "6.24.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.24.1", + "babel-types": "6.24.1", + "babylon": "6.17.2", + "lodash": "4.17.4" + } }, "babel-traverse": { "version": "6.24.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.24.1", + "babylon": "6.17.2", + "debug": "2.6.8", + "globals": "9.17.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } }, "babel-types": { "version": "6.24.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } }, "babylon": { "version": "6.17.2", @@ -1129,12 +1530,21 @@ "brace-expansion": { "version": "1.1.7", "bundled": true, - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "builtin-modules": { "version": "1.1.1", @@ -1144,24 +1554,45 @@ "caching-transform": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.3.4" + } }, "center-align": { "version": "0.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chalk": { "version": "1.1.3", "bundled": true, - "dev": true + "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" + } }, "cliui": { "version": "2.1.0", "bundled": true, "dev": true, "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -1199,12 +1630,19 @@ "cross-spawn": { "version": "4.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.0.2", + "which": "1.2.14" + } }, "debug": { "version": "2.6.8", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "debug-log": { "version": "1.0.1", @@ -1219,17 +1657,26 @@ "default-require-extensions": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } }, "detect-indent": { "version": "4.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "error-ex": { "version": "1.3.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "escape-string-regexp": { "version": "1.0.5", @@ -1244,22 +1691,40 @@ "execa": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "get-stream": "2.3.1", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } }, "expand-brackets": { "version": "0.1.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "extglob": { "version": "0.3.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "filename-regex": { "version": "2.0.1", @@ -1269,17 +1734,32 @@ "fill-range": { "version": "2.2.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.6", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } }, "find-cache-dir": { "version": "0.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } }, "find-up": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "locate-path": "2.0.0" + } }, "for-in": { "version": "1.0.2", @@ -1289,12 +1769,19 @@ "for-own": { "version": "0.1.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "for-in": "1.0.2" + } }, "foreground-child": { "version": "1.5.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } }, "fs.realpath": { "version": "1.0.0", @@ -1309,22 +1796,41 @@ "get-stream": { "version": "2.3.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } }, "glob": { "version": "7.1.2", "bundled": true, - "dev": true + "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" + } }, "glob-base": { "version": "0.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-glob": "2.0.1" + } }, "globals": { "version": "9.17.0", @@ -1340,18 +1846,30 @@ "version": "4.0.10", "bundled": true, "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.27" + }, "dependencies": { "source-map": { "version": "0.4.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, "has-ansi": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-flag": { "version": "1.0.0", @@ -1371,7 +1889,11 @@ "inflight": { "version": "1.0.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -1381,7 +1903,10 @@ "invariant": { "version": "2.2.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } }, "invert-kv": { "version": "1.0.0", @@ -1401,7 +1926,10 @@ "is-builtin-module": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } }, "is-dotfile": { "version": "1.0.3", @@ -1411,7 +1939,10 @@ "is-equal-shallow": { "version": "0.1.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -1426,22 +1957,34 @@ "is-finite": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-glob": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "is-number": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, "is-posix-bracket": { "version": "0.1.1", @@ -1476,7 +2019,10 @@ "isobject": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "istanbul-lib-coverage": { "version": "1.1.1", @@ -1486,34 +2032,65 @@ "istanbul-lib-hook": { "version": "1.0.7", "bundled": true, - "dev": true + "dev": true, + "requires": { + "append-transform": "0.4.0" + } }, "istanbul-lib-instrument": { "version": "1.7.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-generator": "6.24.1", + "babel-template": "6.24.1", + "babel-traverse": "6.24.1", + "babel-types": "6.24.1", + "babylon": "6.17.2", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.3.0" + } }, "istanbul-lib-report": { "version": "1.1.1", "bundled": true, "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, "dependencies": { "supports-color": { "version": "3.2.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, "istanbul-lib-source-maps": { "version": "1.2.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.1", + "source-map": "0.5.6" + } }, "istanbul-reports": { "version": "1.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "handlebars": "4.0.10" + } }, "js-tokens": { "version": "3.0.1", @@ -1528,7 +2105,10 @@ "kind-of": { "version": "3.2.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } }, "lazy-cache": { "version": "1.0.4", @@ -1539,17 +2119,31 @@ "lcid": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } }, "load-json-file": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } }, "locate-path": { "version": "2.0.0", "bundled": true, "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, "dependencies": { "path-exists": { "version": "3.0.0", @@ -1571,17 +2165,27 @@ "loose-envify": { "version": "1.3.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "js-tokens": "3.0.1" + } }, "lru-cache": { "version": "4.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "md5-hex": { "version": "1.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } }, "md5-o-matic": { "version": "0.1.1", @@ -1591,17 +2195,38 @@ "mem": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } }, "merge-source-map": { "version": "1.0.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "micromatch": { "version": "2.3.11", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } }, "mimic-fn": { "version": "1.1.0", @@ -1611,7 +2236,10 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } }, "minimist": { "version": "0.0.8", @@ -1621,7 +2249,10 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -1631,17 +2262,29 @@ "normalize-package-data": { "version": "2.3.8", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.4.2", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } }, "normalize-path": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.1" + } }, "npm-run-path": { "version": "2.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-key": "2.0.1" + } }, "number-is-nan": { "version": "1.0.1", @@ -1656,17 +2299,28 @@ "object.omit": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } }, "once": { "version": "1.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "optimist": { "version": "0.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } }, "os-homedir": { "version": "1.0.2", @@ -1676,7 +2330,12 @@ "os-locale": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "execa": "0.5.1", + "lcid": "1.0.0", + "mem": "1.1.0" + } }, "p-finally": { "version": "1.0.0", @@ -1691,22 +2350,37 @@ "p-locate": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "p-limit": "1.1.0" + } }, "parse-glob": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "parse-json": { "version": "2.2.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "path-exists": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -1726,7 +2400,12 @@ "path-type": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "pify": { "version": "2.3.0", @@ -1741,17 +2420,27 @@ "pinkie-promise": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "pkg-dir": { "version": "1.0.0", "bundled": true, "dev": true, + "requires": { + "find-up": "1.1.2" + }, "dependencies": { "find-up": { "version": "1.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } } } }, @@ -1768,22 +2457,39 @@ "randomatic": { "version": "1.1.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "kind-of": "3.2.2" + } }, "read-pkg": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.3.8", + "path-type": "1.1.0" + } }, "read-pkg-up": { "version": "1.0.1", "bundled": true, "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, "dependencies": { "find-up": { "version": "1.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } } } }, @@ -1795,7 +2501,11 @@ "regex-cache": { "version": "0.4.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } }, "remove-trailing-separator": { "version": "1.0.1", @@ -1815,7 +2525,10 @@ "repeating": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "require-directory": { "version": "2.1.1", @@ -1836,12 +2549,18 @@ "version": "0.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { "version": "2.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "semver": { "version": "5.3.0", @@ -1871,12 +2590,23 @@ "spawn-wrap": { "version": "1.3.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "foreground-child": "1.5.6", + "mkdirp": "0.5.1", + "os-homedir": "1.0.2", + "rimraf": "2.6.1", + "signal-exit": "3.0.2", + "which": "1.2.14" + } }, "spdx-correct": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -1892,6 +2622,10 @@ "version": "2.0.0", "bundled": true, "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "3.0.1" + }, "dependencies": { "is-fullwidth-code-point": { "version": "2.0.0", @@ -1903,12 +2637,18 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-bom": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-eof": { "version": "1.0.0", @@ -1923,7 +2663,14 @@ "test-exclude": { "version": "4.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } }, "to-fast-properties": { "version": "1.0.3", @@ -1940,6 +2687,11 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "camelcase": { "version": "1.2.1", @@ -1951,7 +2703,13 @@ "version": "3.10.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } } } }, @@ -1964,12 +2722,19 @@ "validate-npm-package-license": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "which": { "version": "1.2.14", "bundled": true, - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "which-module": { "version": "2.0.0", @@ -1991,11 +2756,20 @@ "version": "2.1.0", "bundled": true, "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, "dependencies": { "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } }, @@ -2007,7 +2781,12 @@ "write-file-atomic": { "version": "1.3.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "y18n": { "version": "3.2.1", @@ -2023,6 +2802,21 @@ "version": "8.0.1", "bundled": true, "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.0.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.0.0", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, "dependencies": { "camelcase": { "version": "4.1.0", @@ -2033,33 +2827,61 @@ "version": "3.2.0", "bundled": true, "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, "dependencies": { "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } }, "load-json-file": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } }, "path-type": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pify": "2.3.0" + } }, "read-pkg": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.3.8", + "path-type": "2.0.0" + } }, "read-pkg-up": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } }, "strip-bom": { "version": "3.0.0", @@ -2069,7 +2891,10 @@ "yargs-parser": { "version": "7.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "camelcase": "4.1.0" + } } } }, @@ -2077,6 +2902,9 @@ "version": "5.0.0", "bundled": true, "dev": true, + "requires": { + "camelcase": "3.0.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -2103,13 +2931,20 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "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 + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } }, "os-homedir": { "version": "1.0.2", @@ -2127,19 +2962,32 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true + "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 + "dev": true, + "requires": { + "got": "5.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.3.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 + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -2163,7 +3011,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "prepend-http": { "version": "1.0.4", @@ -2176,6 +3027,10 @@ "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz", "integrity": "sha1-/P+rQdGcq0365eV15kJGYZsS0ok=", "dev": true, + "requires": { + "colors": "1.1.2", + "minimist": "1.2.0" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -2214,6 +3069,12 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -2228,6 +3089,10 @@ "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.2.10" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -2239,13 +3104,25 @@ "version": "2.2.10", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.0", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } } } }, @@ -2253,13 +3130,22 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "redeyed": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz", "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", - "dev": true + "dev": true, + "requires": { + "esprima": "3.0.0" + } }, "reflect-metadata": { "version": "0.1.9", @@ -2271,31 +3157,66 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true + "dev": true, + "requires": { + "rc": "1.2.1", + "safe-buffer": "5.1.0" + } }, "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 + "dev": true, + "requires": { + "rc": "1.2.1" + } }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "request": { "version": "2.79.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + } }, "resolve": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", - "dev": true + "dev": true, + "requires": { + "path-parse": "1.0.5" + } }, "safe-buffer": { "version": "5.1.0", @@ -2319,7 +3240,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true + "dev": true, + "requires": { + "semver": "5.3.0" + } }, "seq-queue": { "version": "0.0.5", @@ -2331,7 +3255,13 @@ "version": "1.17.7", "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", - "dev": true + "dev": true, + "requires": { + "formatio": "1.1.1", + "lolex": "1.3.2", + "samsam": "1.1.2", + "util": "0.10.3" + } }, "sinon-chai": { "version": "2.8.0", @@ -2349,7 +3279,10 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "source-map": { "version": "0.5.6", @@ -2361,7 +3294,10 @@ "version": "0.4.14", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.14.tgz", "integrity": "sha1-nURjdyWYuGJxtPUj9sH04Cp9au8=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "sprintf-js": { "version": "1.1.1", @@ -2374,16 +3310,34 @@ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.8.tgz", "integrity": "sha1-TLz5Zdi5AdGxAVy8f8QVquFX36o=", "dev": true, + "requires": { + "nan": "2.4.0", + "node-pre-gyp": "0.6.31" + }, "dependencies": { "node-pre-gyp": { "version": "0.6.31", "bundled": true, "dev": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.0.0", + "rc": "1.1.6", + "request": "2.76.0", + "rimraf": "2.5.4", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.3.0" + }, "dependencies": { "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -2396,6 +3350,9 @@ "version": "3.0.6", "bundled": true, "dev": true, + "requires": { + "abbrev": "1.0.9" + }, "dependencies": { "abbrev": { "version": "1.0.9", @@ -2408,11 +3365,21 @@ "version": "4.0.0", "bundled": true, "dev": true, + "requires": { + "are-we-there-yet": "1.1.2", + "console-control-strings": "1.1.0", + "gauge": "2.6.0", + "set-blocking": "2.0.0" + }, "dependencies": { "are-we-there-yet": { "version": "1.1.2", "bundled": true, "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.1.5" + }, "dependencies": { "delegates": { "version": "1.0.0", @@ -2423,6 +3390,15 @@ "version": "2.1.5", "bundled": true, "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, "dependencies": { "buffer-shims": { "version": "1.0.0", @@ -2472,6 +3448,17 @@ "version": "2.6.0", "bundled": true, "dev": true, + "requires": { + "aproba": "1.0.4", + "console-control-strings": "1.1.0", + "has-color": "0.1.7", + "has-unicode": "2.0.1", + "object-assign": "4.1.0", + "signal-exit": "3.0.1", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.0" + }, "dependencies": { "aproba": { "version": "1.0.4", @@ -2502,11 +3489,19 @@ "version": "1.0.2", "bundled": true, "dev": true, + "requires": { + "code-point-at": "1.0.1", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, "dependencies": { "code-point-at": { "version": "1.0.1", "bundled": true, "dev": true, + "requires": { + "number-is-nan": "1.0.1" + }, "dependencies": { "number-is-nan": { "version": "1.0.1", @@ -2519,6 +3514,9 @@ "version": "1.0.0", "bundled": true, "dev": true, + "requires": { + "number-is-nan": "1.0.1" + }, "dependencies": { "number-is-nan": { "version": "1.0.1", @@ -2533,6 +3531,9 @@ "version": "3.0.1", "bundled": true, "dev": true, + "requires": { + "ansi-regex": "2.0.0" + }, "dependencies": { "ansi-regex": { "version": "2.0.0", @@ -2544,7 +3545,10 @@ "wide-align": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } } } }, @@ -2559,6 +3563,12 @@ "version": "1.1.6", "bundled": true, "dev": true, + "requires": { + "deep-extend": "0.4.1", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "1.0.4" + }, "dependencies": { "deep-extend": { "version": "0.4.1", @@ -2586,6 +3596,28 @@ "version": "2.76.0", "bundled": true, "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.5.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "2.1.1", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.12", + "node-uuid": "1.4.7", + "oauth-sign": "0.8.2", + "qs": "6.3.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3" + }, "dependencies": { "aws-sign2": { "version": "0.6.0", @@ -2606,6 +3638,9 @@ "version": "1.0.5", "bundled": true, "dev": true, + "requires": { + "delayed-stream": "1.0.0" + }, "dependencies": { "delayed-stream": { "version": "1.0.0", @@ -2628,6 +3663,11 @@ "version": "2.1.1", "bundled": true, "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.12" + }, "dependencies": { "asynckit": { "version": "0.4.0", @@ -2640,11 +3680,24 @@ "version": "2.0.6", "bundled": true, "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.15.0", + "pinkie-promise": "2.0.1" + }, "dependencies": { "chalk": { "version": "1.1.3", "bundled": true, "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" + }, "dependencies": { "ansi-styles": { "version": "2.2.1", @@ -2660,6 +3713,9 @@ "version": "2.0.0", "bundled": true, "dev": true, + "requires": { + "ansi-regex": "2.0.0" + }, "dependencies": { "ansi-regex": { "version": "2.0.0", @@ -2672,6 +3728,9 @@ "version": "3.0.1", "bundled": true, "dev": true, + "requires": { + "ansi-regex": "2.0.0" + }, "dependencies": { "ansi-regex": { "version": "2.0.0", @@ -2691,6 +3750,9 @@ "version": "2.9.0", "bundled": true, "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + }, "dependencies": { "graceful-readlink": { "version": "1.0.1", @@ -2703,6 +3765,12 @@ "version": "2.15.0", "bundled": true, "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.0", + "xtend": "4.0.1" + }, "dependencies": { "generate-function": { "version": "2.0.0", @@ -2713,6 +3781,9 @@ "version": "1.2.0", "bundled": true, "dev": true, + "requires": { + "is-property": "1.0.2" + }, "dependencies": { "is-property": { "version": "1.0.2", @@ -2737,6 +3808,9 @@ "version": "2.0.1", "bundled": true, "dev": true, + "requires": { + "pinkie": "2.0.4" + }, "dependencies": { "pinkie": { "version": "2.0.4", @@ -2751,16 +3825,28 @@ "version": "3.1.3", "bundled": true, "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + }, "dependencies": { "boom": { "version": "2.10.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "cryptiles": { "version": "2.0.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1" + } }, "hoek": { "version": "2.16.3", @@ -2770,7 +3856,10 @@ "sntp": { "version": "1.0.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } } } }, @@ -2778,6 +3867,11 @@ "version": "1.1.1", "bundled": true, "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.1", + "sshpk": "1.10.1" + }, "dependencies": { "assert-plus": { "version": "0.2.0", @@ -2788,6 +3882,11 @@ "version": "1.3.1", "bundled": true, "dev": true, + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "extsprintf": { "version": "1.0.2", @@ -2802,7 +3901,10 @@ "verror": { "version": "1.3.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } } } }, @@ -2810,6 +3912,17 @@ "version": "1.10.1", "bundled": true, "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.0", + "dashdash": "1.14.0", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.0", + "tweetnacl": "0.14.3" + }, "dependencies": { "asn1": { "version": "0.2.3", @@ -2825,29 +3938,44 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.3" + } }, "dashdash": { "version": "1.14.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } }, "ecc-jsbn": { "version": "0.1.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.0" + } }, "getpass": { "version": "0.1.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } }, "jodid25519": { "version": "1.0.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.0" + } }, "jsbn": { "version": "0.1.0", @@ -2884,6 +4012,9 @@ "version": "2.1.12", "bundled": true, "dev": true, + "requires": { + "mime-db": "1.24.0" + }, "dependencies": { "mime-db": { "version": "1.24.0", @@ -2916,6 +4047,9 @@ "version": "2.3.2", "bundled": true, "dev": true, + "requires": { + "punycode": "1.4.1" + }, "dependencies": { "punycode": { "version": "1.4.1", @@ -2935,11 +4069,22 @@ "version": "2.5.4", "bundled": true, "dev": true, + "requires": { + "glob": "7.1.1" + }, "dependencies": { "glob": { "version": "7.1.1", "bundled": true, "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + }, "dependencies": { "fs.realpath": { "version": "1.0.0", @@ -2950,6 +4095,10 @@ "version": "1.0.6", "bundled": true, "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + }, "dependencies": { "wrappy": { "version": "1.0.2", @@ -2967,11 +4116,18 @@ "version": "3.0.3", "bundled": true, "dev": true, + "requires": { + "brace-expansion": "1.1.6" + }, "dependencies": { "brace-expansion": { "version": "1.1.6", "bundled": true, "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "0.4.2", @@ -2991,6 +4147,9 @@ "version": "1.4.0", "bundled": true, "dev": true, + "requires": { + "wrappy": "1.0.2" + }, "dependencies": { "wrappy": { "version": "1.0.2", @@ -3017,16 +4176,30 @@ "version": "2.2.1", "bundled": true, "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.10", + "inherits": "2.0.3" + }, "dependencies": { "block-stream": { "version": "0.0.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "fstream": { "version": "1.0.10", "bundled": true, "dev": true, + "requires": { + "graceful-fs": "4.1.9", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + }, "dependencies": { "graceful-fs": { "version": "4.1.9", @@ -3046,11 +4219,24 @@ "version": "3.3.0", "bundled": true, "dev": true, + "requires": { + "debug": "2.2.0", + "fstream": "1.0.10", + "fstream-ignore": "1.0.5", + "once": "1.3.3", + "readable-stream": "2.1.5", + "rimraf": "2.5.4", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, "dependencies": { "debug": { "version": "2.2.0", "bundled": true, "dev": true, + "requires": { + "ms": "0.7.1" + }, "dependencies": { "ms": { "version": "0.7.1", @@ -3063,6 +4249,12 @@ "version": "1.0.10", "bundled": true, "dev": true, + "requires": { + "graceful-fs": "4.1.9", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + }, "dependencies": { "graceful-fs": { "version": "4.1.9", @@ -3080,6 +4272,11 @@ "version": "1.0.5", "bundled": true, "dev": true, + "requires": { + "fstream": "1.0.10", + "inherits": "2.0.3", + "minimatch": "3.0.3" + }, "dependencies": { "inherits": { "version": "2.0.3", @@ -3090,11 +4287,18 @@ "version": "3.0.3", "bundled": true, "dev": true, + "requires": { + "brace-expansion": "1.1.6" + }, "dependencies": { "brace-expansion": { "version": "1.1.6", "bundled": true, "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "0.4.2", @@ -3116,6 +4320,9 @@ "version": "1.3.3", "bundled": true, "dev": true, + "requires": { + "wrappy": "1.0.2" + }, "dependencies": { "wrappy": { "version": "1.0.2", @@ -3128,6 +4335,15 @@ "version": "2.1.5", "bundled": true, "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, "dependencies": { "buffer-shims": { "version": "1.0.0", @@ -3188,6 +4404,17 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -3197,16 +4424,21 @@ } } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "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": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "stringstream": { @@ -3219,7 +4451,10 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-bom": { "version": "3.0.0", @@ -3249,13 +4484,28 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1" + } }, "ts-node": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.0.4.tgz", "integrity": "sha1-oUdevyT9Ti7i+6ixqhYFuXe95QY=", "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "1.1.3", + "diff": "3.2.0", + "make-error": "1.3.0", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.4.14", + "tsconfig": "6.0.0", + "v8flags": "2.1.1", + "yn": "1.3.0" + }, "dependencies": { "diff": { "version": "3.2.0", @@ -3275,13 +4525,28 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", - "dev": true + "dev": true, + "requires": { + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1" + } }, "tslint": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.3.1.tgz", "integrity": "sha1-KPZ5xTyksnNoi8tvzw3ef/G7IWk=", "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "colors": "1.1.2", + "diff": "3.2.0", + "findup-sync": "0.3.0", + "glob": "7.1.2", + "optimist": "0.6.1", + "resolve": "1.3.3", + "underscore.string": "3.3.4", + "update-notifier": "1.0.3" + }, "dependencies": { "diff": { "version": "3.2.0", @@ -3293,7 +4558,15 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "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" + } } } }, @@ -3326,7 +4599,11 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true + "dev": true, + "requires": { + "sprintf-js": "1.1.1", + "util-deprecate": "1.0.2" + } }, "unzip-response": { "version": "1.0.2", @@ -3338,13 +4615,26 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", - "dev": true + "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 + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } }, "urlgrey": { "version": "0.4.4", @@ -3363,6 +4653,9 @@ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { "version": "2.0.1", @@ -3394,19 +4687,28 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true + "dev": true, + "requires": { + "user-home": "1.1.1" + } }, "verror": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } }, "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 + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "wordwrap": { "version": "0.0.3", @@ -3424,13 +4726,21 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true + "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 + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } }, "xtend": { "version": "4.0.1", @@ -3448,7 +4758,10 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/yn/-/yn-1.3.0.tgz", "integrity": "sha1-GwgSq7jYBdSJZvjfOF3J2syaGdg=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1" + } } } } diff --git a/package.json b/package.json index c8b70878..2c18a163 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,14 @@ "description": "Decorators and some other extras for sequelize (v3 + v4)", "scripts": { "build": "tsc --project lib/models/v4 && tsc", - "build-tests-es5": "tsc --project test", + "build-tests-es5": "tsc --project test --target es5", "build-tests-es6": "tsc --project test --target es6 && tsc", "prepare-test-v3": "npm install sequelize@3.30.4 --no-save && npm run build-tests-es5", "prepare-test-v4": "npm install sequelize@4.1.0 --no-save && npm run build-tests-es6", "test-v3": "npm run prepare-test-v3 && npm run exec-tests", "test-v4": "npm run prepare-test-v4 && npm run exec-tests", - "cover-v3": "npm run prepare-test-v3 && nyc --exclude lib/models/v4/**/*.js --all --require source-map-support/register mocha test/specs/", - "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js --all --require source-map-support/register mocha test/specs/", + "cover-v3": "npm run prepare-test-v3 && nyc --exclude lib/models/v4/**/*.js mocha", + "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js mocha", "exec-tests": "mocha test/specs/", "test": "npm run test-v4 && npm run test-v3", "cover": "npm run cover-v4 && npm run cover-v3", @@ -88,16 +88,16 @@ "functions": 85, "branches": 85, "include": [ - "lib/**/*.js" + "lib/**/*" ], - "exclude": [ - "test/**/*.js" + "extension": [ + ".ts" ], "reporter": [ "lcov", "text-summary" ], - "cache": true, + "cache": false, "all": true, "check-coverage": true, "report-dir": "./coverage" diff --git a/test/mocha.opts b/test/mocha.opts index a05fa8cc..6d6600e1 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,2 +1,5 @@ +--require test/tsconfig.mocha +--require source-map-support/register --recursive +test/specs/**/*.ts diff --git a/test/tsconfig.json b/test/tsconfig.json index 001732c8..f475e9f7 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "module": "commonjs", - "target": "es5", + "target": "es6", "experimentalDecorators": true, "emitDecoratorMetadata": true, "sourceMap": true, From f3ad31ba6ff572ec69863a0b4f86e62e77853497 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Sun, 29 Oct 2017 17:10:37 +0100 Subject: [PATCH 04/20] missing test config file added --- .gitignore | 11 +++++++---- test/tsconfig.mocha.js | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 test/tsconfig.mocha.js diff --git a/.gitignore b/.gitignore index 5f71bfcc..f3761790 100644 --- a/.gitignore +++ b/.gitignore @@ -8,18 +8,21 @@ # libraries node_modules -# testing -coverage -.nyc_output - #logs npm-debug.log +# build **/*.js **/*.js.map **/*.d.ts + +# src !lib/models/Model.d.ts !lib/models/Model.js !lib/models/Sequelize.d.ts !lib/models/Sequelize.js +# testing +coverage +.nyc_output +!test/tsconfig.mocha.js diff --git a/test/tsconfig.mocha.js b/test/tsconfig.mocha.js new file mode 100644 index 00000000..6094d324 --- /dev/null +++ b/test/tsconfig.mocha.js @@ -0,0 +1,3 @@ +require("ts-node").register({ + project: "test/tsconfig.json", +}); From 63c7556b7008be59b765ef9c3dab1e01fa3f12e4 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Sun, 29 Oct 2017 18:55:47 +0100 Subject: [PATCH 05/20] cleanup for test coverage added + nyc updated --- package-lock.json | 276 +++++++++++++++++++++++++++++----------------- package.json | 6 +- 2 files changed, 177 insertions(+), 105 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66973ec1..8d6236b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1336,9 +1336,9 @@ "dev": true }, "nyc": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.0.2.tgz", - "integrity": "sha512-31rRd6ME9NM17w0oPKqi51a6fzJAqYarnzQXK+iL8XaX+3H6VH0BQut7qHIgrv2mBASRic4oNi2KRgcbFODrsQ==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.2.1.tgz", + "integrity": "sha1-rYUK/p261/SXByi0suR/7Rw4chw=", "dev": true, "requires": { "archy": "1.0.0", @@ -1353,20 +1353,20 @@ "glob": "7.1.2", "istanbul-lib-coverage": "1.1.1", "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.7.2", + "istanbul-lib-instrument": "1.8.0", "istanbul-lib-report": "1.1.1", "istanbul-lib-source-maps": "1.2.1", - "istanbul-reports": "1.1.1", + "istanbul-reports": "1.1.2", "md5-hex": "1.3.0", - "merge-source-map": "1.0.3", + "merge-source-map": "1.0.4", "micromatch": "2.3.11", "mkdirp": "0.5.1", "resolve-from": "2.0.0", "rimraf": "2.6.1", "signal-exit": "3.0.2", - "spawn-wrap": "1.3.6", + "spawn-wrap": "1.3.8", "test-exclude": "4.1.1", - "yargs": "8.0.1", + "yargs": "8.0.2", "yargs-parser": "5.0.0" }, "dependencies": { @@ -1413,11 +1413,11 @@ "bundled": true, "dev": true, "requires": { - "arr-flatten": "1.0.3" + "arr-flatten": "1.1.0" } }, "arr-flatten": { - "version": "1.0.3", + "version": "1.1.0", "bundled": true, "dev": true }, @@ -1437,27 +1437,27 @@ "dev": true }, "babel-code-frame": { - "version": "6.22.0", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", - "js-tokens": "3.0.1" + "js-tokens": "3.0.2" } }, "babel-generator": { - "version": "6.24.1", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", "lodash": "4.17.4", - "source-map": "0.5.6", + "source-map": "0.5.7", "trim-right": "1.0.1" } }, @@ -1466,73 +1466,73 @@ "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.26.0" } }, "babel-runtime": { - "version": "6.23.0", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" + "core-js": "2.5.1", + "regenerator-runtime": "0.11.0" } }, "babel-template": { - "version": "6.24.1", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.2", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", "lodash": "4.17.4" } }, "babel-traverse": { - "version": "6.24.1", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { - "babel-code-frame": "6.22.0", + "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", - "babylon": "6.17.2", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", "debug": "2.6.8", - "globals": "9.17.0", + "globals": "9.18.0", "invariant": "2.2.2", "lodash": "4.17.4" } }, "babel-types": { - "version": "6.24.1", + "version": "6.26.0", "bundled": true, "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.26.0", "esutils": "2.0.2", "lodash": "4.17.4", "to-fast-properties": "1.0.3" } }, "babylon": { - "version": "6.17.2", + "version": "6.18.0", "bundled": true, "dev": true }, "balanced-match": { - "version": "0.4.2", + "version": "1.0.0", "bundled": true, "dev": true }, "brace-expansion": { - "version": "1.1.7", + "version": "1.1.8", "bundled": true, "dev": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -1561,6 +1561,12 @@ "write-file-atomic": "1.3.4" } }, + "camelcase": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true + }, "center-align": { "version": "0.1.3", "bundled": true, @@ -1623,7 +1629,7 @@ "dev": true }, "core-js": { - "version": "2.4.1", + "version": "2.5.1", "bundled": true, "dev": true }, @@ -1632,8 +1638,8 @@ "bundled": true, "dev": true, "requires": { - "lru-cache": "4.0.2", - "which": "1.2.14" + "lru-cache": "4.1.1", + "which": "1.3.0" } }, "debug": { @@ -1689,17 +1695,29 @@ "dev": true }, "execa": { - "version": "0.5.1", + "version": "0.7.0", "bundled": true, "dev": true, "requires": { - "cross-spawn": "4.0.2", - "get-stream": "2.3.1", + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", "is-stream": "1.1.0", "npm-run-path": "2.0.2", "p-finally": "1.0.0", "signal-exit": "3.0.2", "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } } }, "expand-brackets": { @@ -1738,7 +1756,7 @@ "requires": { "is-number": "2.1.0", "isobject": "2.1.0", - "randomatic": "1.1.6", + "randomatic": "1.1.7", "repeat-element": "1.1.2", "repeat-string": "1.6.1" } @@ -1794,13 +1812,9 @@ "dev": true }, "get-stream": { - "version": "2.3.1", + "version": "3.0.0", "bundled": true, - "dev": true, - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } + "dev": true }, "glob": { "version": "7.1.2", @@ -1833,7 +1847,7 @@ } }, "globals": { - "version": "9.17.0", + "version": "9.18.0", "bundled": true, "dev": true }, @@ -1850,7 +1864,7 @@ "async": "1.5.2", "optimist": "0.6.1", "source-map": "0.4.4", - "uglify-js": "2.8.27" + "uglify-js": "2.8.29" }, "dependencies": { "source-map": { @@ -1877,7 +1891,7 @@ "dev": true }, "hosted-git-info": { - "version": "2.4.2", + "version": "2.5.0", "bundled": true, "dev": true }, @@ -2038,17 +2052,17 @@ } }, "istanbul-lib-instrument": { - "version": "1.7.2", + "version": "1.8.0", "bundled": true, "dev": true, "requires": { - "babel-generator": "6.24.1", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.2", + "babel-generator": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", "istanbul-lib-coverage": "1.1.1", - "semver": "5.3.0" + "semver": "5.4.1" } }, "istanbul-lib-report": { @@ -2081,11 +2095,11 @@ "istanbul-lib-coverage": "1.1.1", "mkdirp": "0.5.1", "rimraf": "2.6.1", - "source-map": "0.5.6" + "source-map": "0.5.7" } }, "istanbul-reports": { - "version": "1.1.1", + "version": "1.1.2", "bundled": true, "dev": true, "requires": { @@ -2093,7 +2107,7 @@ } }, "js-tokens": { - "version": "3.0.1", + "version": "3.0.2", "bundled": true, "dev": true }, @@ -2167,11 +2181,11 @@ "bundled": true, "dev": true, "requires": { - "js-tokens": "3.0.1" + "js-tokens": "3.0.2" } }, "lru-cache": { - "version": "4.0.2", + "version": "4.1.1", "bundled": true, "dev": true, "requires": { @@ -2201,11 +2215,11 @@ } }, "merge-source-map": { - "version": "1.0.3", + "version": "1.0.4", "bundled": true, "dev": true, "requires": { - "source-map": "0.5.6" + "source-map": "0.5.7" } }, "micromatch": { @@ -2225,7 +2239,7 @@ "normalize-path": "2.1.1", "object.omit": "2.0.1", "parse-glob": "3.0.4", - "regex-cache": "0.4.3" + "regex-cache": "0.4.4" } }, "mimic-fn": { @@ -2238,7 +2252,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "1.1.8" } }, "minimist": { @@ -2260,13 +2274,13 @@ "dev": true }, "normalize-package-data": { - "version": "2.3.8", + "version": "2.4.0", "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.4.2", + "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", - "semver": "5.3.0", + "semver": "5.4.1", "validate-npm-package-license": "3.0.1" } }, @@ -2275,7 +2289,7 @@ "bundled": true, "dev": true, "requires": { - "remove-trailing-separator": "1.0.1" + "remove-trailing-separator": "1.1.0" } }, "npm-run-path": { @@ -2328,11 +2342,11 @@ "dev": true }, "os-locale": { - "version": "2.0.0", + "version": "2.1.0", "bundled": true, "dev": true, "requires": { - "execa": "0.5.1", + "execa": "0.7.0", "lcid": "1.0.0", "mem": "1.1.0" } @@ -2455,12 +2469,40 @@ "dev": true }, "randomatic": { - "version": "1.1.6", + "version": "1.1.7", "bundled": true, "dev": true, "requires": { - "is-number": "2.1.0", - "kind-of": "3.2.2" + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } } }, "read-pkg": { @@ -2469,7 +2511,7 @@ "dev": true, "requires": { "load-json-file": "1.1.0", - "normalize-package-data": "2.3.8", + "normalize-package-data": "2.4.0", "path-type": "1.1.0" } }, @@ -2494,21 +2536,20 @@ } }, "regenerator-runtime": { - "version": "0.10.5", + "version": "0.11.0", "bundled": true, "dev": true }, "regex-cache": { - "version": "0.4.3", + "version": "0.4.4", "bundled": true, "dev": true, "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" + "is-equal-shallow": "0.1.3" } }, "remove-trailing-separator": { - "version": "1.0.1", + "version": "1.1.0", "bundled": true, "dev": true }, @@ -2563,7 +2604,7 @@ } }, "semver": { - "version": "5.3.0", + "version": "5.4.1", "bundled": true, "dev": true }, @@ -2572,6 +2613,19 @@ "bundled": true, "dev": true }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, "signal-exit": { "version": "3.0.2", "bundled": true, @@ -2583,12 +2637,12 @@ "dev": true }, "source-map": { - "version": "0.5.6", + "version": "0.5.7", "bundled": true, "dev": true }, "spawn-wrap": { - "version": "1.3.6", + "version": "1.3.8", "bundled": true, "dev": true, "requires": { @@ -2597,7 +2651,7 @@ "os-homedir": "1.0.2", "rimraf": "2.6.1", "signal-exit": "3.0.2", - "which": "1.2.14" + "which": "1.3.0" } }, "spdx-correct": { @@ -2619,18 +2673,31 @@ "dev": true }, "string-width": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "3.0.1" + "strip-ansi": "4.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "bundled": true, "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } } } }, @@ -2683,22 +2750,16 @@ "dev": true }, "uglify-js": { - "version": "2.8.27", + "version": "2.8.29", "bundled": true, "dev": true, "optional": true, "requires": { - "source-map": "0.5.6", + "source-map": "0.5.7", "uglify-to-browserify": "1.0.2", "yargs": "3.10.0" }, "dependencies": { - "camelcase": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true - }, "yargs": { "version": "3.10.0", "bundled": true, @@ -2729,7 +2790,7 @@ } }, "which": { - "version": "1.2.14", + "version": "1.3.0", "bundled": true, "dev": true, "requires": { @@ -2799,7 +2860,7 @@ "dev": true }, "yargs": { - "version": "8.0.1", + "version": "8.0.2", "bundled": true, "dev": true, "requires": { @@ -2807,12 +2868,12 @@ "cliui": "3.2.0", "decamelize": "1.2.0", "get-caller-file": "1.0.2", - "os-locale": "2.0.0", + "os-locale": "2.1.0", "read-pkg-up": "2.0.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", - "string-width": "2.0.0", + "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", "yargs-parser": "7.0.0" @@ -2870,7 +2931,7 @@ "dev": true, "requires": { "load-json-file": "2.0.0", - "normalize-package-data": "2.3.8", + "normalize-package-data": "2.4.0", "path-type": "2.0.0" } }, @@ -3218,6 +3279,15 @@ "path-parse": "1.0.5" } }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.0.5" + } + }, "safe-buffer": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", diff --git a/package.json b/package.json index 2c18a163..93db2e06 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js mocha", "exec-tests": "mocha test/specs/", "test": "npm run test-v4 && npm run test-v3", - "cover": "npm run cover-v4 && npm run cover-v3", + "clean": "rimraf .nyc_output && rimraf coverage && npm install", + "cover": "npm run clean && npm run cover-v4 && npm run clean && npm run cover-v3", "lint": "tslint ." }, "repository": { @@ -67,9 +68,10 @@ "moment": "2.17.1", "mysql": "2.13.0", "mysql2": "1.3.5", - "nyc": "11.0.2", + "nyc": "11.2.1", "prettyjson": "1.2.1", "reflect-metadata": "0.1.9", + "rimraf": "2.6.2", "sinon": "1.17.7", "sinon-chai": "2.8.0", "source-map-support": "0.4.14", From ebc21c4621a1febf6f412c6e0cb8ac8abd4e80d1 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Sun, 29 Oct 2017 20:12:30 +0100 Subject: [PATCH 06/20] adding 'text'-reporter for coverage seems to prevent nyc error --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 93db2e06..2b757f6b 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js mocha", "exec-tests": "mocha test/specs/", "test": "npm run test-v4 && npm run test-v3", - "clean": "rimraf .nyc_output && rimraf coverage && npm install", - "cover": "npm run clean && npm run cover-v4 && npm run clean && npm run cover-v3", + "cover": "npm run cover-v4 && npm run cover-v3", "lint": "tslint ." }, "repository": { @@ -97,6 +96,7 @@ ], "reporter": [ "lcov", + "text", "text-summary" ], "cache": false, From cfc3ce871fccfb9d2db9da3adc62a17266749c0c Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Sun, 29 Oct 2017 20:25:41 +0100 Subject: [PATCH 07/20] nyc cleanup re-added --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2b757f6b..58bcd3a7 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js mocha", "exec-tests": "mocha test/specs/", "test": "npm run test-v4 && npm run test-v3", - "cover": "npm run cover-v4 && npm run cover-v3", + "clean-nyc": "rimraf .nyc_output && rimraf coverage && npm install", + "cover": "npm run clean-nyc && npm run cover-v4 && npm run clean-nyc && npm run cover-v3", "lint": "tslint ." }, "repository": { From 3421fb21bd1cb71375140cc651a6cb1c2c17083f Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Sun, 29 Oct 2017 20:42:21 +0100 Subject: [PATCH 08/20] removed coverage for sequelize v3 due to arbitrary appearing nyc error --- package-lock.json | 9 --------- package.json | 4 +--- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d6236b4..3b9fadb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3279,15 +3279,6 @@ "path-parse": "1.0.5" } }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.0.5" - } - }, "safe-buffer": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", diff --git a/package.json b/package.json index 58bcd3a7..f4b8c94b 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js mocha", "exec-tests": "mocha test/specs/", "test": "npm run test-v4 && npm run test-v3", - "clean-nyc": "rimraf .nyc_output && rimraf coverage && npm install", - "cover": "npm run clean-nyc && npm run cover-v4 && npm run clean-nyc && npm run cover-v3", + "cover": "npm run cover-v4", "lint": "tslint ." }, "repository": { @@ -71,7 +70,6 @@ "nyc": "11.2.1", "prettyjson": "1.2.1", "reflect-metadata": "0.1.9", - "rimraf": "2.6.2", "sinon": "1.17.7", "sinon-chai": "2.8.0", "source-map-support": "0.4.14", From fd12550bc11c3306d50b52713443ed0683180686 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Tue, 31 Oct 2017 15:19:32 +0100 Subject: [PATCH 09/20] typescript updated --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3b9fadb1..83d97b1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4651,9 +4651,9 @@ "dev": true }, "typescript": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.2.1.tgz", - "integrity": "sha1-SGK2YrmIpMj/aRzHlpYi0k23auk=", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz", + "integrity": "sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==", "dev": true }, "underscore.string": { diff --git a/package.json b/package.json index f4b8c94b..aff063b1 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "sqlite3": "3.1.8", "ts-node": "3.0.4", "tslint": "4.3.1", - "typescript": "2.2.1", + "typescript": "2.5.3", "uuid-validate": "0.0.2" }, "engines": { From 9a26eb5abcace1a1fae27db07d53f8660a7a29da Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Tue, 31 Oct 2017 15:48:20 +0100 Subject: [PATCH 10/20] ts-node updated --- package-lock.json | 104 +++++++++++++++------ package.json | 2 +- test/specs/association.spec.ts | 166 +++++++++++++++------------------ 3 files changed, 151 insertions(+), 121 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83d97b1f..449986fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -347,6 +347,21 @@ "urlgrey": "0.4.4" } }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", @@ -823,6 +838,15 @@ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, "http-signature": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", @@ -3050,6 +3074,12 @@ "error-ex": "1.3.1" } }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -4551,27 +4581,47 @@ } }, "ts-node": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.0.4.tgz", - "integrity": "sha1-oUdevyT9Ti7i+6ixqhYFuXe95QY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", + "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", "dev": true, "requires": { "arrify": "1.0.1", - "chalk": "1.1.3", - "diff": "3.2.0", + "chalk": "2.3.0", + "diff": "3.4.0", "make-error": "1.3.0", "minimist": "1.2.0", "mkdirp": "0.5.1", "source-map-support": "0.4.14", "tsconfig": "6.0.0", - "v8flags": "2.1.1", - "yn": "1.3.0" + "v8flags": "3.0.1", + "yn": "2.0.0" }, "dependencies": { - "diff": { + "ansi-styles": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "diff": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", "dev": true }, "minimist": { @@ -4579,6 +4629,15 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -4703,12 +4762,6 @@ "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", "dev": true }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -4745,12 +4798,12 @@ "dev": true }, "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", + "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", "dev": true, "requires": { - "user-home": "1.1.1" + "homedir-polyfill": "1.0.1" } }, "verror": { @@ -4816,13 +4869,10 @@ "dev": true }, "yn": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-1.3.0.tgz", - "integrity": "sha1-GwgSq7jYBdSJZvjfOF3J2syaGdg=", - "dev": true, - "requires": { - "object-assign": "4.1.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true } } } diff --git a/package.json b/package.json index aff063b1..8b9e7bb4 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "sinon-chai": "2.8.0", "source-map-support": "0.4.14", "sqlite3": "3.1.8", - "ts-node": "3.0.4", + "ts-node": "3.3.0", "tslint": "4.3.1", "typescript": "2.5.3", "uuid-validate": "0.0.2" diff --git a/test/specs/association.spec.ts b/test/specs/association.spec.ts index 9aeb63e2..cac5deb5 100644 --- a/test/specs/association.spec.ts +++ b/test/specs/association.spec.ts @@ -203,29 +203,28 @@ describe('association', () => { Book.create(sherlockHolmesBook, {include: [Page]}) .then(book => Book.findById(book.id)) - .then(book => { - if (!book) throw Error(`Book is null`); - return book + .then(book => + book .$get('pages') .then(pages => { + assertInstance(pages, sherlockHolmesBook.pages); - }); - }) + }) + ) ); it('should get related instance of source instance', () => Page.create(page1, {include: [Book]}) .then(page => Page.findById(page.id)) - .then(page => { - if (!page) throw Error(`Page is null`); - return page + .then(page => + page .$get('book') .then(book => { assertInstance(book, page1.book); - }); - }) + }) + ) ); }); @@ -434,11 +433,10 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => { - expect(_book).to.be.not.null; - if (_book) { - expect(_book.$has('pages', book.pages)).to.be.true; - } + .then(_book => _book.$has('pages', book.pages)) + .then(result => { + + expect(result).to.be.true; }) ) ); @@ -453,11 +451,10 @@ describe('association', () => { .then(([book, page]) => Book .findById(book.id) - .then(_book => { - expect(_book).to.be.not.null; - if (_book) { - expect(_book.$has('pages', book.pages)).to.be.false; - } + .then(_book => _book.$has('pages', page)) + .then(result => { + + expect(result).to.be.false; }) ) ); @@ -472,11 +469,10 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => { - expect(_book).to.be.not.null; - if (_book) { - expect(_book.$count('pages')).to.equal(sherlockHolmesBook.pages.length); - } + .then(_book => _book.$count('pages')) + .then(result => { + + expect(result).to.equal(sherlockHolmesBook.pages.length); }) ) ); @@ -487,11 +483,10 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => { - expect(_book).to.be.not.null; - if (_book) { - expect(_book.$count('pages')).to.equal(0); - } + .then(_book => _book.$count('pages')) + .then(result => { + + expect(result).to.equal(0); }) ) ); @@ -912,30 +907,24 @@ describe('association', () => { .all([ Book.create(sherlockHolmesBook, {include: [Author]}) .then(book => Book.findById(book.id)) - .then(book => { - expect(book).to.be.not.null; - if (book) { - return book - .$get('authors') - .then(authors => { - assertInstance(authors, sherlockHolmesBook.authors); - }); - } - - }), + .then(book => + book + .$get('authors') + .then(authors => { + + assertInstance(authors, sherlockHolmesBook.authors); + }) + ), Author.create(julesVerne, {include: [Book]}) .then(author => Author.findById(author.id)) - .then(author => { - expect(author).to.be.not.null; - if (author) { - return author - .$get('books') - .then(books => { - - assertInstance(books, julesVerne.books); - }); - } - }) + .then(author => + author + .$get('books') + .then(books => { + + assertInstance(books, julesVerne.books); + }) + ) ]) ); @@ -1108,11 +1097,10 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => { - expect(_book).to.be.not.null; - if (_book) { - expect(_book.$has('authors', book.authors)).to.be.true; - } + .then(_book => _book.$has('authors', book.authors)) + .then(result => { + + expect(result).to.be.true; }) ) ); @@ -1127,11 +1115,10 @@ describe('association', () => { .then(([book, author]) => Book .findById(book.id) - .then(_book => { - expect(_book).to.be.not.null; - if (_book) { - expect(_book.$has('authors', book.authors)).to.be.false; - } + .then(_book => _book.$has('authors', author)) + .then(result => { + + expect(result).to.be.false; }) ) ); @@ -1146,11 +1133,10 @@ describe('association', () => { .then((book) => Book .findById(book.id) - .then(_book => { - expect(_book).to.be.not.null; - if (_book) { - expect(_book.$count('authors')).to.equal(sherlockHolmesBook.authors.length); - } + .then(_book => _book.$count('authors')) + .then(result => { + + expect(result).to.equal(sherlockHolmesBook.authors.length); }) ) ); @@ -1161,11 +1147,10 @@ describe('association', () => { .then((author) => Author .findById(author.id) - .then(_book => { - expect(_book).to.be.not.null; - if (_book) { - expect(_book.$count('authors')).to.equal(0); - } + .then(_author => _author.$count('books')) + .then(result => { + + expect(result).to.equal(0); }) ) ); @@ -1524,29 +1509,24 @@ describe('association', () => { .all([ User.create(userWithAddress, {include: [Address]}) .then(user => User.findById(user.id)) - .then(user => { - expect(user).to.be.not.null; - if (user) { - return user - .$get('address') - .then(address => { - - assertInstance(address, userWithAddress.address); - }); - } - }), + .then(user => + user + .$get('address') + .then(address => { + + assertInstance(address, userWithAddress.address); + }) + ), Address.create(emancipatedAddress, {include: [User]}) .then(author => Address.findById(author.id)) - .then(author => { - expect(author).to.be.not.null; - if (author) { - return author - .$get('user') - .then(user => { - assertInstance(user, emancipatedAddress.user); - }); - } - }) + .then(author => + author + .$get('user') + .then(user => { + + assertInstance(user, emancipatedAddress.user); + }) + ) ]) ); From ba73cda7ddc933efe54490deb392cf743fa4c9de Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Tue, 31 Oct 2017 17:46:26 +0100 Subject: [PATCH 11/20] tests added for through options --- package.json | 2 +- test/specs/association.spec.ts | 130 +++++++++++++++++++++++++++++++ test/specs/model-methods.spec.ts | 18 ++--- 3 files changed, 140 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 8b9e7bb4..3104163b 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "test-v4": "npm run prepare-test-v4 && npm run exec-tests", "cover-v3": "npm run prepare-test-v3 && nyc --exclude lib/models/v4/**/*.js mocha", "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js mocha", - "exec-tests": "mocha test/specs/", + "exec-tests": "mocha", "test": "npm run test-v4 && npm run test-v3", "cover": "npm run cover-v4", "lint": "tslint ." diff --git a/test/specs/association.spec.ts b/test/specs/association.spec.ts index cac5deb5..6b66039e 100644 --- a/test/specs/association.spec.ts +++ b/test/specs/association.spec.ts @@ -12,6 +12,7 @@ import { import {expectAutoGeneratedFunctions} from "../utils/association"; import {assertInstance} from "../utils/common"; import {AllowNull} from "../../lib/annotations/AllowNull"; +import {PrimaryKey} from '../../lib/annotations/PrimaryKey'; use(chaiAsPromised); @@ -1338,6 +1339,135 @@ describe('association', () => { manyToManyTestSuites(Book3, Author3); }); + + describe('set through model via through options', () => { + + @Table + class Book66 extends Model { + + @Column + title: string; + + @BelongsToMany(() => Author66, { + through: { + model: () => AuthorBook66, + } + }) + authors: Author66[]; + } + + @Table + class AuthorBook66 extends Model { + + @ForeignKey(() => Book66) + bookId: number; + + @ForeignKey(() => Author66) + authorId: number; + } + + @Table + class Author66 extends Model { + + @Column + name: string; + + @BelongsToMany(() => Book66, { + through: { + model: () => AuthorBook66, + } + }) + books: Book66; + } + + manyToManyTestSuites(Book66, Author66, AuthorBook66); + }); + + describe('set through model string via through options', () => { + + @Table + class Book66 extends Model { + + @Column + title: string; + + @BelongsToMany(() => Author66, { + through: { + model: 'AuthorBook66', + }, + foreignKey: 'bookId', + otherKey: 'authorId', + }) + authors: Author66[]; + } + + @Table + class Author66 extends Model { + + @Column + name: string; + + @BelongsToMany(() => Book66, { + through: { + model: 'AuthorBook66', + }, + foreignKey: 'authorId', + otherKey: 'bookId', + }) + books: Book66; + } + + manyToManyTestSuites(Book66, Author66); + }); + + describe('ThroughOptions', () => { + + @Table + class User77 extends Model { + + @Column + name: string; + + @BelongsToMany(() => User77, { + through: { + model: () => Subscription, + scope: { + targetType: 'user' + } + }, + foreignKeyConstraint: true, + foreignKey: 'subscriberId', + otherKey: 'targetId', + constraints: false, + }) + usersSubscribedTo: User77[]; + } + + @Table + class Subscription extends Model { + + @PrimaryKey + @ForeignKey(() => User77) + @Column + subscriberId: number; + + @PrimaryKey + @Column + targetId: number; + + @Column + targetType: string; + } + + sequelize.addModels([User77, Subscription]); + + it('should set scope in pure sequelize association options', () => { + expect(User77['associations'].usersSubscribedTo.through) + .to.have.property('scope').that.eqls({targetType: 'user'}); + }); + + }); + }); describe('One-to-one', () => { diff --git a/test/specs/model-methods.spec.ts b/test/specs/model-methods.spec.ts index 4114a0eb..6ede8173 100644 --- a/test/specs/model-methods.spec.ts +++ b/test/specs/model-methods.spec.ts @@ -8,7 +8,7 @@ describe('model-methods', () => { const sequelize = createSequelize(); @Table - class User extends Model { + class User777 extends Model { @Column firstName: string; @@ -16,30 +16,30 @@ describe('model-methods', () => { @Column lastName: string; - static createDemoUser(): User { + static createDemoUser(): User777 { - return new User({firstName: 'Peter', lastName: 'Parker'}); + return new User777({firstName: 'Peter', lastName: 'Parker'}); } - static findDemoUser(): Promise { + static findDemoUser(): Promise { - return this.findOne({where: {firstName: 'Peter', lastName: 'Parker'}}); + return this.findOne({where: {firstName: 'Peter', lastName: 'Parker'}}); } } - sequelize.addModels([User]); + sequelize.addModels([User777]); beforeEach(() => sequelize.sync({force: true})); it('should work as expected', () => { - const user = User.createDemoUser(); + const user = User777.createDemoUser(); - expect(user).to.be.an.instanceOf(User); + expect(user).to.be.an.instanceOf(User777); return user .save() - .then(() => User.findDemoUser()) + .then(() => User777.findDemoUser()) .then(_user => expect(_user.equals(user)).to.be.true) ; }); From 082a1e9eba8c3138321717f54b68db60102fe53d Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Tue, 31 Oct 2017 20:05:06 +0100 Subject: [PATCH 12/20] clean process before running code coverage added --- package-lock.json | 40 ++++++++++++++++++++++++++++++++-------- package.json | 6 ++++-- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 449986fa..01d88b60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3309,6 +3309,15 @@ "path-parse": "1.0.5" } }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.0.5" + } + }, "safe-buffer": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", @@ -3376,18 +3385,18 @@ } }, "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.14.tgz", - "integrity": "sha1-nURjdyWYuGJxtPUj9sH04Cp9au8=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.0.tgz", + "integrity": "sha512-vUoN3I7fHQe0R/SJLKRdKYuEdRGogsviXFkHHo17AWaTGv17VLnxw+CFXvqy+y4ORZ3doWLQcxRYfwKrsd/H7Q==", "dev": true, "requires": { - "source-map": "0.5.6" + "source-map": "0.6.1" } }, "sprintf-js": { @@ -4592,7 +4601,7 @@ "make-error": "1.3.0", "minimist": "1.2.0", "mkdirp": "0.5.1", - "source-map-support": "0.4.14", + "source-map-support": "0.4.18", "tsconfig": "6.0.0", "v8flags": "3.0.1", "yn": "2.0.0" @@ -4630,6 +4639,21 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", diff --git a/package.json b/package.json index 3104163b..e1e09a10 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js mocha", "exec-tests": "mocha", "test": "npm run test-v4 && npm run test-v3", - "cover": "npm run cover-v4", + "clean-coverage": "rimraf .nyc_output && rimraf coverage", + "cover": "npm run clean-coverage && npm run cover-v4", "lint": "tslint ." }, "repository": { @@ -70,9 +71,10 @@ "nyc": "11.2.1", "prettyjson": "1.2.1", "reflect-metadata": "0.1.9", + "rimraf": "2.6.2", "sinon": "1.17.7", "sinon-chai": "2.8.0", - "source-map-support": "0.4.14", + "source-map-support": "0.5.0", "sqlite3": "3.1.8", "ts-node": "3.3.0", "tslint": "4.3.1", From 060252b32a36175eaf05df46879c07cc61ae0802 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Tue, 31 Oct 2017 20:13:34 +0100 Subject: [PATCH 13/20] running test for sequelize v3 before code coverage process of v 4 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b47915fa..4aff9663 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,7 @@ script: - npm run lint - npm run build - export SEQ_SILENT=true + - npm run test-v3 - npm run cover after_success: From 467831b8fc1f923e94a4a29e555a407b86f3e700 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Tue, 31 Oct 2017 20:35:10 +0100 Subject: [PATCH 14/20] reinstall packages --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e1e09a10..99a67fb2 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "exec-tests": "mocha", "test": "npm run test-v4 && npm run test-v3", "clean-coverage": "rimraf .nyc_output && rimraf coverage", - "cover": "npm run clean-coverage && npm run cover-v4", + "cover": "npm install && npm run clean-coverage && npm run cover-v4", "lint": "tslint ." }, "repository": { From 65ecaee7b876e930d216a544a2df477cc4bbaad3 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Thu, 2 Nov 2017 20:08:19 +0100 Subject: [PATCH 15/20] running testing + coverage without ts-node now --- package.json | 5 ++--- test/mocha.opts | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 99a67fb2..73b3e864 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ "cover-v4": "npm run prepare-test-v4 && nyc --exclude lib/models/v3/**/*.js mocha", "exec-tests": "mocha", "test": "npm run test-v4 && npm run test-v3", - "clean-coverage": "rimraf .nyc_output && rimraf coverage", - "cover": "npm install && npm run clean-coverage && npm run cover-v4", + "cover": "npm run cover-v4 && npm run cover-v3", "lint": "tslint ." }, "repository": { @@ -93,7 +92,7 @@ "lib/**/*" ], "extension": [ - ".ts" + ".js" ], "reporter": [ "lcov", diff --git a/test/mocha.opts b/test/mocha.opts index 6d6600e1..76d9a638 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,5 +1,4 @@ ---require test/tsconfig.mocha --require source-map-support/register --recursive -test/specs/**/*.ts +test/specs/**/*.js From 1625395d9060279af9d1db37d252c8cbdb4cfd7e Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Thu, 2 Nov 2017 21:22:40 +0100 Subject: [PATCH 16/20] removed rimraf from dev dependencies --- package-lock.json | 9 --------- package.json | 1 - 2 files changed, 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01d88b60..d9b9126f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3309,15 +3309,6 @@ "path-parse": "1.0.5" } }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.0.5" - } - }, "safe-buffer": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", diff --git a/package.json b/package.json index 73b3e864..082834ea 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,6 @@ "nyc": "11.2.1", "prettyjson": "1.2.1", "reflect-metadata": "0.1.9", - "rimraf": "2.6.2", "sinon": "1.17.7", "sinon-chai": "2.8.0", "source-map-support": "0.5.0", From c606da2a21d882ac1fd7951ef304d81064b74c1c Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Thu, 2 Nov 2017 21:25:48 +0100 Subject: [PATCH 17/20] removed test-v3 execution from travis.yml --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4aff9663..b47915fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,6 @@ script: - npm run lint - npm run build - export SEQ_SILENT=true - - npm run test-v3 - npm run cover after_success: From f2164dd4a56d346de0bae0eff1705d90128aa8fe Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Fri, 3 Nov 2017 22:45:48 +0100 Subject: [PATCH 18/20] more tests for hooks added to make coverage reporter happy --- test/models/Hook.ts | 32 ++++++++++++++++++++++++++++++++ test/specs/hooks/hooks.spec.ts | 18 ++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/test/models/Hook.ts b/test/models/Hook.ts index 7168c525..67b1a60d 100644 --- a/test/models/Hook.ts +++ b/test/models/Hook.ts @@ -8,6 +8,14 @@ import { AfterSave, AfterUpdate, BeforeSave, BeforeUpdate } from "../../index"; import { BeforeCreate, BeforeValidate, Column, Model, Table } from "../../index"; import { BeforeFind, BeforeFindAfterExpandIncludeAll } from "../../index"; import { BeforeBulkDelete, AfterBulkDelete, AfterDelete, BeforeDelete } from "../../index"; +import {AfterBulkSync} from '../../lib/annotations/hooks/AfterBulkSync'; +import {AfterConnect} from '../../lib/annotations/hooks/AfterConnect'; +import {AfterDefine} from '../../lib/annotations/hooks/AfterDefine'; +import {AfterInit} from '../../lib/annotations/hooks/AfterInit'; +import {BeforeBulkSync} from '../../lib/annotations/hooks/BeforeBulkSync'; +import {BeforeConnect} from '../../lib/annotations/hooks/BeforeConnect'; +import {BeforeDefine} from '../../lib/annotations/hooks/BeforeDefine'; +import {BeforeInit} from '../../lib/annotations/hooks/BeforeInit'; /** * Model used to test hook decorators. Defined hooks are mocked out for testing. @@ -79,6 +87,30 @@ export class Hook extends Model { @AfterBulkCreate static afterBulkCreateHook(instances: Hook[], options: any): void {} + @BeforeBulkSync + static beforeBulkSyncHook(instances: Hook[], options: any): void {} + + @AfterBulkSync + static afterBulkSyncHook(instances: Hook[], options: any): void {} + + @BeforeConnect + static beforeConnectHook(instances: Hook[], options: any): void {} + + @AfterConnect + static afterConnectHook(instances: Hook[], options: any): void {} + + @BeforeDefine + static beforeDefineHook(instances: Hook[], options: any): void {} + + @AfterDefine + static afterDefineHook(instances: Hook[], options: any): void {} + + @BeforeInit + static beforeInitHook(instances: Hook[], options: any): void {} + + @AfterInit + static afterInitHook(instances: Hook[], options: any): void {} + @BeforeBulkDestroy static beforeBulkDestroyHook(options: any): void {} diff --git a/test/specs/hooks/hooks.spec.ts b/test/specs/hooks/hooks.spec.ts index cdd4030a..14814e51 100644 --- a/test/specs/hooks/hooks.spec.ts +++ b/test/specs/hooks/hooks.spec.ts @@ -81,6 +81,15 @@ describe('hook', () => { const afterFindHookStub = sinon.stub(Hook, 'afterFindHook'); const beforeCountHookStub = sinon.stub(Hook, 'beforeCountHook'); + const beforeBulkSyncHookStub = sinon.stub(Hook, 'beforeBulkSyncHook'); + const afterBulkSyncHookStub = sinon.stub(Hook, 'afterBulkSyncHook'); + const beforeConnectHookStub = sinon.stub(Hook, 'beforeConnectHook'); + const afterConnectHookStub = sinon.stub(Hook, 'afterConnectHook'); + const beforeDefineHookStub = sinon.stub(Hook, 'beforeDefineHook'); + const afterDefineHookStub = sinon.stub(Hook, 'afterDefineHook'); + const beforeInitHookStub = sinon.stub(Hook, 'beforeInitHook'); + const afterInitHookStub = sinon.stub(Hook, 'afterInitHook'); + // these hooks are aliases for the equivalent “destroy” hooks const beforeDeleteHookStub = sinon.stub(Hook, 'beforeDeleteHook'); const afterDeleteHookStub = sinon.stub(Hook, 'afterDeleteHook'); @@ -176,6 +185,15 @@ describe('hook', () => { expect(Hook['options'].hooks['afterFind']).to.include(afterFindHookStub); expect(Hook['options'].hooks['beforeCount']).to.include(beforeCountHookStub); + expect(Hook['options'].hooks['beforeBulkSync']).to.include(beforeBulkSyncHookStub); + expect(Hook['options'].hooks['afterBulkSync']).to.include(afterBulkSyncHookStub); + expect(Hook['options'].hooks['beforeConnect']).to.include(beforeConnectHookStub); + expect(Hook['options'].hooks['afterConnect']).to.include(afterConnectHookStub); + expect(Hook['options'].hooks['beforeDefine']).to.include(beforeDefineHookStub); + expect(Hook['options'].hooks['afterDefine']).to.include(afterDefineHookStub); + expect(Hook['options'].hooks['beforeInit']).to.include(beforeInitHookStub); + expect(Hook['options'].hooks['afterInit']).to.include(afterInitHookStub); + expect(Hook['options'].hooks['beforeDestroy']).to.include(beforeDeleteHookStub); expect(Hook['options'].hooks['afterDestroy']).to.include(afterDeleteHookStub); expect(Hook['options'].hooks['beforeBulkDestroy']).to.include(beforeBulkDeleteHookStub); From 7a7d6f720e461abf0e0d63f5faf364779472f930 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Sat, 4 Nov 2017 20:16:23 +0100 Subject: [PATCH 19/20] nyc caching turned off again --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b6c4352f..cc09fabd 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "lcov", "text-summary" ], - "cache": true, + "cache": false, "all": true, "check-coverage": true, "report-dir": "./coverage" From 353258956f2173642fb7f3964c7ecbb6b11ea4e9 Mon Sep 17 00:00:00 2001 From: RobinBuschmann Date: Sat, 4 Nov 2017 22:06:48 +0100 Subject: [PATCH 20/20] tests added --- .../specs/annotations/belongs-to-many.spec.ts | 37 +++++++++++++++ test/specs/annotations/belongs-to.spec.ts | 47 +++++++++++++++++++ test/specs/annotations/has-many.spec.ts | 35 ++++++++++++++ test/specs/annotations/has-one.spec.ts | 36 ++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 test/specs/annotations/belongs-to-many.spec.ts create mode 100644 test/specs/annotations/belongs-to.spec.ts create mode 100644 test/specs/annotations/has-many.spec.ts create mode 100644 test/specs/annotations/has-one.spec.ts diff --git a/test/specs/annotations/belongs-to-many.spec.ts b/test/specs/annotations/belongs-to-many.spec.ts new file mode 100644 index 00000000..1d13c5e1 --- /dev/null +++ b/test/specs/annotations/belongs-to-many.spec.ts @@ -0,0 +1,37 @@ +import {expect, use} from 'chai'; +import * as chaiAsPromised from 'chai-as-promised'; +import {Table} from '../../../lib/annotations/Table'; +import {Model} from '../../../lib/models/Model'; +import {createSequelize} from '../../utils/sequelize'; +import {BelongsToMany} from '../../../lib/annotations/association/BelongsToMany'; + +use(chaiAsPromised); + +// tslint:disable:max-classes-per-file +describe('BelongsToMany', () => { + + const as = 'manyTeams'; + const sequelize = createSequelize(false); + + @Table + class Team extends Model {} + + @Table + class Player extends Model { + + @BelongsToMany(() => Team, { + as, + through: 'TeamPlayer', + foreignKey: 'playerId', + otherKey: 'teamId', + }) + teams: Team[]; + } + + sequelize.addModels([Team, Player]); + + it('should pass as options to sequelize association', () => { + expect(Player['associations']).to.have.property(as); + }); + +}); diff --git a/test/specs/annotations/belongs-to.spec.ts b/test/specs/annotations/belongs-to.spec.ts new file mode 100644 index 00000000..87f45973 --- /dev/null +++ b/test/specs/annotations/belongs-to.spec.ts @@ -0,0 +1,47 @@ +import {expect, use} from 'chai'; +import * as chaiAsPromised from 'chai-as-promised'; +import {Table} from '../../../lib/annotations/Table'; +import {BelongsTo} from '../../../lib/annotations/association/BelongsTo'; +import {Model} from '../../../lib/models/Model'; +import {createSequelize} from '../../utils/sequelize'; + +use(chaiAsPromised); + +// tslint:disable:max-classes-per-file +describe('BelongsTo', () => { + + const as = 'parent'; + const sequelize = createSequelize(false); + + @Table + class Team extends Model {} + + @Table + class Player extends Model { + + @BelongsTo(() => Team, {as, foreignKey: 'teamId'}) + team: Team; + } + + sequelize.addModels([Team, Player]); + + it('should pass as options to sequelize association', () => { + expect(Player['associations']).to.have.property(as); + }); + + it('should throw due to missing foreignKey', () => { + const _sequelize = createSequelize(false); + + @Table + class Team extends Model {} + + @Table + class Player extends Model { + @BelongsTo(() => Team) + team: Team; + } + + expect(() => _sequelize.addModels([Team, Player])).to.throw(/Foreign key for "\w+" is missing on "\w+"./); + }); + +}); diff --git a/test/specs/annotations/has-many.spec.ts b/test/specs/annotations/has-many.spec.ts new file mode 100644 index 00000000..5e5f744d --- /dev/null +++ b/test/specs/annotations/has-many.spec.ts @@ -0,0 +1,35 @@ +import {expect, use} from 'chai'; +import * as chaiAsPromised from 'chai-as-promised'; +import {Table} from '../../../lib/annotations/Table'; +import {Model} from '../../../lib/models/Model'; +import {createSequelize} from '../../utils/sequelize'; +import {HasMany} from '../../../lib/annotations/association/HasMany'; + +use(chaiAsPromised); + +// tslint:disable:max-classes-per-file +describe('HasMany', () => { + + const as = 'babies'; + const sequelize = createSequelize(false); + + @Table + class Player extends Model {} + + @Table + class Team extends Model { + + @HasMany(() => Player, { + as, + foreignKey: 'teamId' + }) + players: Player[]; + } + + sequelize.addModels([Team, Player]); + + it('should pass as options to sequelize association', () => { + expect(Team['associations']).to.have.property(as); + }); + +}); diff --git a/test/specs/annotations/has-one.spec.ts b/test/specs/annotations/has-one.spec.ts new file mode 100644 index 00000000..58c8a6e9 --- /dev/null +++ b/test/specs/annotations/has-one.spec.ts @@ -0,0 +1,36 @@ +import {expect, use} from 'chai'; +import * as chaiAsPromised from 'chai-as-promised'; +import {Table} from '../../../lib/annotations/Table'; +import {Model} from '../../../lib/models/Model'; +import {createSequelize} from '../../utils/sequelize'; +import {HasOne} from '../../../lib/annotations/association/HasOne'; + +use(chaiAsPromised); + +// tslint:disable:max-classes-per-file +describe('HasOne', () => { + + const as = 'baby'; + const sequelize = createSequelize(false); + + @Table + class Player extends Model {} + + @Table + class Team extends Model { + + @HasOne(() => Player, { + as, + foreignKey: 'teamId' + }) + player: Player; + } + + + sequelize.addModels([Team, Player]); + + it('should pass as options to sequelize association', () => { + expect(Team['associations']).to.have.property(as); + }); + +});