From 976a68b5d9f424fe57ba39616daca382912f50c4 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 1 Jun 2018 18:31:33 +0000 Subject: [PATCH 001/130] chore(package): update @types/mysql to version 2.15.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e793d40..0e6ea00 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@types/handlebars": "^4.0.37", "@types/mocha": "^5.2.0", "@types/mssql": "^4.0.7", - "@types/mysql": "2.15.4", + "@types/mysql": "2.15.5", "@types/node": "^10.0.1", "@types/oracledb": "^1.11.34", "@types/pg": "^7.4.8", From 177cb5ab96acbdfa1baa9a98d2999cef1a70e46f Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sat, 2 Jun 2018 20:38:41 +0000 Subject: [PATCH 002/130] chore(package): update dotenv to version 6.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e793d40..b797bf7 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "chai-as-promised": "^7.1.1", "chai-subset": "^1.6.0", "codecov": "^3.0.1", - "dotenv": "^5.0.1", + "dotenv": "^6.0.0", "fs-extra": "^6.0.0", "gulp": "^3.9.1", "gulp-clean": "^0.4.0", From 87502eab190ff6344ebd00cbbed4bba56b3c73c3 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 10 Jun 2018 16:12:55 +0200 Subject: [PATCH 003/130] #66 added union type with null for nullable columns --- src/Engine.ts | 2 +- src/entity.mst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Engine.ts b/src/Engine.ts index 799f321..047a250 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -223,7 +223,7 @@ export class Engine { "username": "${this.Options.user}", "password": "${this.Options.password}", "database": "${this.Options.databaseName}", - "synchronize": false + "synchronize": false, "entities": [ "entities/*.js" ] diff --git a/src/entity.mst b/src/entity.mst index 86d5279..14236f0 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -22,12 +22,12 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man enum:[{{.}}],{{/enumOptions}} name:"{{name}}" }) - {{toPropertyName name}}:{{ts_type}}; + {{toPropertyName name}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; {{/relations}}{{#relations}} @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toPropertyName ../name}}=>{{toPropertyName ../name}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#actionOnDelete}},{ onDelete: '{{.}}' }{{/actionOnDelete}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../name}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{toPropertyName ../name}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; - {{else}}{{toPropertyName ../name}}:{{toLazy (toEntityName relatedTable)}}; + {{else}}{{toPropertyName ../name}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; {{/if}}{{/relations}} {{/Columns}} {{#if GenerateConstructor}} From d88ca1975d0cf67ee6eaaa8a2e9b99ee574f9a9d Mon Sep 17 00:00:00 2001 From: Kononnable Date: Mon, 11 Jun 2018 01:07:54 +0200 Subject: [PATCH 004/130] basic naming strategy #65 #75 --- src/DefaultNamingStrategy.ts | 47 ++++++++++++++++++++++ src/Engine.ts | 11 +++-- src/NamingStrategy.ts | 9 +++++ src/drivers/AbstractDriver.ts | 69 +++++++++++++------------------- src/drivers/MssqlDriver.ts | 3 +- src/drivers/MysqlDriver.ts | 3 +- src/drivers/OracleDriver.ts | 3 +- src/drivers/PostgresDriver.ts | 3 +- src/drivers/SqliteDriver.ts | 31 +++++++------- src/entity.mst | 12 +++--- src/index.ts | 6 ++- src/models/ColumnInfo.ts | 3 +- test/drivers/MssqlDriver.test.ts | 5 ++- test/utils/GeneralTestUtils.ts | 26 +++++++++--- 14 files changed, 153 insertions(+), 78 deletions(-) create mode 100644 src/DefaultNamingStrategy.ts create mode 100644 src/NamingStrategy.ts diff --git a/src/DefaultNamingStrategy.ts b/src/DefaultNamingStrategy.ts new file mode 100644 index 0000000..40f95cd --- /dev/null +++ b/src/DefaultNamingStrategy.ts @@ -0,0 +1,47 @@ +import { NamingStrategy } from "./NamingStrategy"; +import { EntityInfo } from "./models/EntityInfo"; + +export class DefaultNamingStrategy extends NamingStrategy { + relationName( + ownerEntity: EntityInfo, + referencedEntity: EntityInfo, + isOneToMany: boolean + ): string { + let columnName = ownerEntity.EntityName.toLowerCase(); + if (columnName.endsWith("Id")) { + columnName = columnName.substring(0, columnName.lastIndexOf("Id")); + } + columnName += isOneToMany ? "s" : ""; + if ( + referencedEntity.Columns.filter(filterVal => { + return filterVal.tsName == columnName; + }).length > 0 + ) { + for (let i = 2; i <= ownerEntity.Columns.length; i++) { + columnName = ownerEntity.EntityName.toLowerCase(); + if (columnName.endsWith("Id")) { + columnName = columnName.substring( + 0, + columnName.lastIndexOf("Id") + ); + } + columnName += (isOneToMany ? "s" : "") + i.toString(); + if ( + referencedEntity.Columns.filter(filterVal => { + return filterVal.tsName == columnName; + }).length == 0 + ) + break; + } + } + return columnName; + } + + entityName(entityName: string): string { + return entityName; + } + + columnName(columnName: string): string { + return columnName; + } +} diff --git a/src/Engine.ts b/src/Engine.ts index 047a250..ed1e871 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -5,6 +5,7 @@ import fs = require("fs"); import path = require("path"); import * as TomgUtils from "./Utils"; import changeCase = require("change-case"); +import { NamingStrategy } from "./NamingStrategy"; export class Engine { constructor( @@ -20,7 +21,8 @@ export class Engine { this.Options.user, this.Options.password, this.Options.schemaName, - this.Options.ssl + this.Options.ssl, + this.Options.namingStrategy ); if (dbModel.entities.length > 0) { this.createModelFromMetadata(dbModel); @@ -39,7 +41,8 @@ export class Engine { user: string, password: string, schemaName: string, - ssl: boolean + ssl: boolean, + namingStrategy: NamingStrategy ): Promise { return await this.driver.GetDataFromServer( database, @@ -48,7 +51,8 @@ export class Engine { user, password, schemaName, - ssl + ssl, + namingStrategy ); } private createModelFromMetadata(databaseModel: DatabaseModel) { @@ -271,4 +275,5 @@ export interface EngineOptions { convertCaseProperty: "pascal" | "camel" | "none"; lazy: boolean; constructor: boolean; + namingStrategy: NamingStrategy; } diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts new file mode 100644 index 0000000..4f79f33 --- /dev/null +++ b/src/NamingStrategy.ts @@ -0,0 +1,9 @@ +import { EntityInfo } from "./models/EntityInfo"; + +export abstract class NamingStrategy { + abstract relationName(ownerEntity: EntityInfo, referencedEntity: EntityInfo, isOneToMany: boolean): string; + + abstract entityName(entityName: string): string; + + abstract columnName(columnName: string): string; +} diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index b3d6103..d0093ad 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -8,6 +8,7 @@ import { WithPrecisionColumnType, WithLengthColumnType } from "./../../node_modules/typeorm/driver/types/ColumnTypes"; +import { NamingStrategy } from "../NamingStrategy"; export abstract class AbstractDriver { ColumnTypesWithWidth: WithWidthColumnType[] = [ @@ -52,6 +53,7 @@ export abstract class AbstractDriver { "binary", "varbinary" ]; + namingStrategy: NamingStrategy; FindManyToManyRelations(dbModel: DatabaseModel) { let manyToManyEntities = dbModel.entities.filter(entity => { @@ -79,7 +81,7 @@ export abstract class AbstractDriver { )[0]; relatedTable1.Columns = relatedTable1.Columns.filter( v => - !v.name + !v.tsName .toLowerCase() .startsWith(entity.EntityName.toLowerCase()) ); @@ -88,7 +90,7 @@ export abstract class AbstractDriver { )[0]; relatedTable2.Columns = relatedTable2.Columns.filter( v => - !v.name + !v.tsName .toLowerCase() .startsWith(entity.EntityName.toLowerCase()) ); @@ -97,21 +99,21 @@ export abstract class AbstractDriver { }); let column1 = new ColumnInfo(); - column1.name = namesOfRelatedTables[1]; + column1.tsName = this.namingStrategy.entityName(namesOfRelatedTables[1]); let col1Rel = new RelationInfo(); col1Rel.relatedTable = namesOfRelatedTables[1]; - col1Rel.relatedColumn = namesOfRelatedTables[1]; + col1Rel.relatedColumn = this.namingStrategy.entityName(namesOfRelatedTables[1]); col1Rel.relationType = "ManyToMany"; col1Rel.isOwner = true; - col1Rel.ownerColumn = namesOfRelatedTables[0]; + col1Rel.ownerColumn = this.namingStrategy.entityName(namesOfRelatedTables[0]); column1.relations.push(col1Rel); relatedTable1.Columns.push(column1); let column2 = new ColumnInfo(); - column2.name = namesOfRelatedTables[0]; + column2.tsName = this.namingStrategy.entityName(namesOfRelatedTables[0]); let col2Rel = new RelationInfo(); col2Rel.relatedTable = namesOfRelatedTables[0]; - col2Rel.relatedColumn = namesOfRelatedTables[1]; + col2Rel.relatedColumn = this.namingStrategy.entityName(namesOfRelatedTables[1]); col2Rel.relationType = "ManyToMany"; col2Rel.isOwner = false; column2.relations.push(col2Rel); @@ -126,9 +128,11 @@ export abstract class AbstractDriver { user: string, password: string, schema: string, - ssl: boolean + ssl: boolean, + namingStrategy:NamingStrategy ): Promise { let dbModel = {}; + this.namingStrategy = namingStrategy; await this.ConnectToServer(database, server, port, user, password, ssl); let sqlEscapedSchema = "'" + schema.split(",").join("','") + "'"; dbModel.entities = await this.GetAllTables(sqlEscapedSchema); @@ -209,7 +213,7 @@ export abstract class AbstractDriver { ) { let ownerColumn = ownerEntity.Columns.find(column => { return ( - column.name == + column.tsName == relationTmp.ownerColumnsNames[relationColumnIndex] ); }); @@ -227,7 +231,7 @@ export abstract class AbstractDriver { } let relatedColumn = referencedEntity.Columns.find(column => { return ( - column.name == + column.tsName == relationTmp.referencedColumnsNames[relationColumnIndex] ); }); @@ -249,48 +253,29 @@ export abstract class AbstractDriver { return ( index.isUnique && index.columns.some(col => { - return col.name == ownerColumn!.name; + return col.name == ownerColumn!.tsName; }) ); }); isOneToMany = !index; let ownerRelation = new RelationInfo(); - let columnName = - ownerEntity.EntityName.toLowerCase() + - (isOneToMany ? "s" : ""); - if ( - referencedEntity.Columns.filter(filterVal => { - return filterVal.name == columnName; - }).length > 0 - ) { - for (let i = 2; i <= ownerEntity.Columns.length; i++) { - columnName = - ownerEntity.EntityName.toLowerCase() + - (isOneToMany ? "s" : "") + - i.toString(); - if ( - referencedEntity.Columns.filter(filterVal => { - return filterVal.name == columnName; - }).length == 0 - ) - break; - } - } ownerRelation.actionOnDelete = relationTmp.actionOnDelete; ownerRelation.actionOnUpdate = relationTmp.actionOnUpdate; ownerRelation.isOwner = true; - ownerRelation.relatedColumn = relatedColumn.name.toLowerCase(); + ownerRelation.relatedColumn = relatedColumn.tsName.toLowerCase(); ownerRelation.relatedTable = relationTmp.referencedTable; ownerRelation.ownerTable = relationTmp.ownerTable; - ownerRelation.ownerColumn = columnName; ownerRelation.relationType = isOneToMany - ? "ManyToOne" + ? "ManyToOne" : "OneToOne"; + + let columnName = this.namingStrategy.relationName(ownerEntity,referencedEntity,isOneToMany); + ownerRelation.ownerColumn = columnName; ownerColumn.relations.push(ownerRelation); if (isOneToMany) { let col = new ColumnInfo(); - col.name = columnName; + col.tsName = columnName; let referencedRelation = new RelationInfo(); col.relations.push(referencedRelation); referencedRelation.actionOnDelete = @@ -298,15 +283,15 @@ export abstract class AbstractDriver { referencedRelation.actionOnUpdate = relationTmp.actionOnUpdate; referencedRelation.isOwner = false; - referencedRelation.relatedColumn = ownerColumn.name; + referencedRelation.relatedColumn = ownerColumn.tsName; referencedRelation.relatedTable = relationTmp.ownerTable; referencedRelation.ownerTable = relationTmp.referencedTable; - referencedRelation.ownerColumn = relatedColumn.name.toLowerCase(); + referencedRelation.ownerColumn = relatedColumn.tsName.toLowerCase(); referencedRelation.relationType = "OneToMany"; referencedEntity.Columns.push(col); } else { let col = new ColumnInfo(); - col.name = columnName; + col.tsName = columnName; let referencedRelation = new RelationInfo(); col.relations.push(referencedRelation); referencedRelation.actionOnDelete = @@ -314,10 +299,10 @@ export abstract class AbstractDriver { referencedRelation.actionOnUpdate = relationTmp.actionOnUpdate; referencedRelation.isOwner = false; - referencedRelation.relatedColumn = ownerColumn.name; + referencedRelation.relatedColumn = ownerColumn.tsName; referencedRelation.relatedTable = relationTmp.ownerTable; referencedRelation.ownerTable = relationTmp.referencedTable; - referencedRelation.ownerColumn = relatedColumn.name.toLowerCase(); + referencedRelation.ownerColumn = relatedColumn.tsName.toLowerCase(); referencedRelation.relationType = "OneToOne"; referencedEntity.Columns.push(col); } @@ -344,7 +329,7 @@ export abstract class AbstractDriver { entity.Columns.forEach(col => { if ( primaryIndex && - primaryIndex.columns.some(cIndex => cIndex.name == col.name) + primaryIndex.columns.some(cIndex => cIndex.name == col.tsName) ) col.isPrimary = true; }); diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 0b03735..b27052f 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -53,7 +53,8 @@ export class MssqlDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.name = resp.COLUMN_NAME; + colInfo.tsName = this.namingStrategy.entityName(resp.COLUMN_NAME); + colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.IS_NULLABLE == "YES"; colInfo.is_generated = resp.IsIdentity == 1; colInfo.is_unique = resp.IsUnique == 1; diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index d091150..75cac77 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -45,7 +45,8 @@ export class MysqlDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.name = resp.COLUMN_NAME; + colInfo.tsName = this.namingStrategy.entityName(resp.COLUMN_NAME); + colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.IS_NULLABLE == "YES"; colInfo.is_generated = resp.IsIdentity == 1; colInfo.is_unique = resp.column_key == "UNI"; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 563ef7e..bf79fa5 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -55,7 +55,8 @@ export class OracleDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.name = resp.COLUMN_NAME; + colInfo.tsName = this.namingStrategy.entityName(resp.COLUMN_NAME); + colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.NULLABLE == "Y"; colInfo.is_generated = resp.IDENTITY_COLUMN == "YES"; colInfo.default = diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 5f9e9d2..aa449f8 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -54,7 +54,8 @@ export class PostgresDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.name = resp.column_name; + colInfo.tsName = this.namingStrategy.entityName(resp.column_name); + colInfo.sqlName = resp.column_name; colInfo.is_nullable = resp.is_nullable == "YES"; colInfo.is_generated = resp.isidentity == "YES"; colInfo.is_unique = resp.isunique == 1; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 563d40e..3409577 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -41,7 +41,8 @@ export class SqliteDriver extends AbstractDriver { }>(`PRAGMA table_info('${ent.EntityName}');`); response.forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.name = resp.name; + colInfo.tsName = this.namingStrategy.entityName(resp.name); + colInfo.sqlName = resp.name; colInfo.is_nullable = resp.notnull == 0; colInfo.isPrimary = resp.pk > 0; colInfo.default = resp.dflt_value ? resp.dflt_value : null; @@ -152,12 +153,16 @@ export class SqliteDriver extends AbstractDriver { ) && options ) { - colInfo.numericPrecision = options[0] - .substring(1, options[0].length - 1) - .split(",")[0]; - colInfo.numericScale = options[0] - .substring(1, options[0].length - 1) - .split(",")[1]; + colInfo.numericPrecision = ( + options[0] + .substring(1, options[0].length - 1) + .split(",")[0] + ); + colInfo.numericScale = ( + options[0] + .substring(1, options[0].length - 1) + .split(",")[1] + ); } if ( this.ColumnTypesWithLength.some( @@ -165,9 +170,8 @@ export class SqliteDriver extends AbstractDriver { ) && options ) { - colInfo.lenght = options[0].substring( - 1, - options[0].length - 1 + colInfo.lenght = ( + options[0].substring(1, options[0].length - 1) ); } if ( @@ -178,9 +182,8 @@ export class SqliteDriver extends AbstractDriver { ) && options ) { - colInfo.width = options[0].substring( - 1, - options[0].length - 1 + colInfo.width = ( + options[0].substring(1, options[0].length - 1) ); } @@ -231,7 +234,7 @@ export class SqliteDriver extends AbstractDriver { indexInfo.isUnique ) { ent.Columns.filter( - v => v.name == indexColumnInfo.name + v => v.tsName == indexColumnInfo.name ).map(v => (v.is_unique = true)); } indexInfo.columns.push(indexColumnInfo); diff --git a/src/entity.mst b/src/entity.mst index 14236f0..c094fea 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -20,14 +20,14 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man scale:{{.}},{{/numericScale}}{{#isPrimary}} primary:{{isPrimary}},{{/isPrimary}}{{#enumOptions}} enum:[{{.}}],{{/enumOptions}} - name:"{{name}}" + name:"{{sqlName}}" }) - {{toPropertyName name}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; + {{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; {{/relations}}{{#relations}} - @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toPropertyName ../name}}=>{{toPropertyName ../name}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#actionOnDelete}},{ onDelete: '{{.}}' }{{/actionOnDelete}}{{/if}}){{#isOwner}} - {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../name}}'}){{/if}}{{/isOwner}} - {{#if (or isOneToMany isManyToMany)}}{{toPropertyName ../name}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; - {{else}}{{toPropertyName ../name}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; + @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toPropertyName ../tsName}}=>{{toPropertyName ../tsName}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#actionOnDelete}},{ onDelete: '{{.}}' }{{/actionOnDelete}}{{/if}}){{#isOwner}} + {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../tsName}}'}){{/if}}{{/isOwner}} + {{#if (or isOneToMany isManyToMany)}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; + {{else}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; {{/if}}{{/relations}} {{/Columns}} {{#if GenerateConstructor}} diff --git a/src/index.ts b/src/index.ts index c334bce..5a62514 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,8 @@ import { Engine } from "./Engine"; import * as Yargs from "yargs"; import * as TomgUtils from "./Utils"; import path = require("path"); +import { DefaultNamingStrategy } from "./DefaultNamingStrategy"; +import { NamingStrategy } from "./NamingStrategy"; var argv = Yargs.usage( "Usage: typeorm-model-generator -h -d -p [port] -u -x [password] -e [engine]" @@ -130,6 +132,7 @@ switch (argv.e) { TomgUtils.LogError("Database engine not recognized.", false); throw new Error("Database engine not recognized."); } +let namingStrategy: NamingStrategy= new DefaultNamingStrategy(); let engine = new Engine(driver, { host: argv.h, @@ -146,7 +149,8 @@ let engine = new Engine(driver, { convertCaseEntity: argv.ce, convertCaseProperty: argv.cp, lazy: argv.lazy, - constructor: argv.constructor + constructor: argv.constructor, + namingStrategy: namingStrategy }); console.log(TomgUtils.packageVersion()); diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index 1507011..9540496 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -1,7 +1,8 @@ import { RelationInfo } from "./RelationInfo"; export class ColumnInfo { - name: string = ""; + tsName: string = ""; + sqlName: string = ""; default: string | null = null; is_nullable: boolean = false; is_unique: boolean = false; diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 9649ce1..898faa6 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -6,6 +6,7 @@ import { EntityInfo } from './../../src/models/EntityInfo' import { ColumnInfo } from './../../src/models/ColumnInfo' import { RelationInfo } from './../../src/models/RelationInfo' import { Table, IColumnMetadata } from "mssql"; +import { DefaultNamingStrategy } from "../../src/DefaultNamingStrategy"; class fakeResponse implements MSSQL.IResult { recordsets: MSSQL.IRecordSet[]; @@ -27,6 +28,7 @@ describe('MssqlDriver', function () { beforeEach(() => { driver = new MssqlDriver(); + driver.namingStrategy = new DefaultNamingStrategy(); }) afterEach(() => { @@ -84,7 +86,8 @@ describe('MssqlDriver', function () { is_nullable: true, isPrimary: false, is_generated: true, - name: 'name', + tsName: 'name', + sqlName: 'name', numericPrecision: null, numericScale: null, width: null, diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index b9b9d0f..137bc50 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -10,6 +10,8 @@ import { Engine } from "../../src/Engine"; import { createConnection, ConnectionOptions } from "typeorm"; import * as yn from "yn" import path = require('path') +import { NamingStrategy } from "../../src/NamingStrategy"; +import { DefaultNamingStrategy } from "../../src/DefaultNamingStrategy"; export async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Promise { @@ -45,6 +47,7 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin if (conn.isConnected) await conn.close() + let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); driver = new MssqlDriver(); let engine = new Engine( @@ -63,7 +66,8 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin convertCaseFile: 'none', convertCaseProperty: 'none', lazy: false, - constructor:false + constructor: false, + namingStrategy: namingStrategy }); conn = await createConnection(connOpt) @@ -110,6 +114,7 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st if (conn.isConnected) await conn.close() + let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); driver = new PostgresDriver(); let engine = new Engine( @@ -128,7 +133,8 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st convertCaseFile: 'none', convertCaseProperty: 'none', lazy: false, - constructor:false + constructor:false, + namingStrategy: namingStrategy }); conn = await createConnection(connOpt) @@ -167,6 +173,7 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri if (conn.isConnected) await conn.close() + let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); driver = new SqliteDriver(); let engine = new Engine( @@ -185,7 +192,8 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri convertCaseFile: 'none', convertCaseProperty: 'none', lazy: false, - constructor:false + constructor:false, + namingStrategy: namingStrategy }); conn = await createConnection(connOpt) @@ -222,6 +230,7 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin if (conn.isConnected) await conn.close() + let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); driver = new MysqlDriver(); let engine = new Engine( @@ -240,7 +249,8 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin convertCaseFile: 'none', convertCaseProperty: 'none', lazy: false, - constructor:false + constructor:false, + namingStrategy: namingStrategy }); return engine; @@ -270,6 +280,7 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str if (conn.isConnected) await conn.close() + let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); driver = new MariaDbDriver(); let engine = new Engine( @@ -288,7 +299,8 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str convertCaseFile: 'none', convertCaseProperty: 'none', lazy: false, - constructor:false + constructor:false, + namingStrategy: namingStrategy }); @@ -321,6 +333,7 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st if (conn.isConnected) await conn.close() + let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); driver = new OracleDriver(); let engine = new Engine( @@ -339,7 +352,8 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st convertCaseFile: 'none', convertCaseProperty: 'none', lazy: false, - constructor:false + constructor:false, + namingStrategy: namingStrategy }); return engine; From f258ff04a443ef154cb4c5757077fe1ae56cabf8 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 11 Jun 2018 06:40:13 +0000 Subject: [PATCH 005/130] chore(package): update sinon to version 6.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e793d40..d2f400c 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "mocha": "^5.1.1", "prettier": "^1.12.1", "remap-istanbul": "^0.11.1", - "sinon": "^5.0.1", + "sinon": "^6.0.0", "sinon-chai": "^3.0.0", "typings": "^2.1.1" } From 87ea4df1ecf9f47722626146d0fbe8783dc242a6 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 14 Jun 2018 20:15:29 +0200 Subject: [PATCH 006/130] removed oracledb from dependencies --- .travis.yml | 6 +- package-lock.json | 3122 ++++++++++++++++++++++----------------------- package.json | 1 - 3 files changed, 1560 insertions(+), 1569 deletions(-) diff --git a/.travis.yml b/.travis.yml index 10bd436..6649f6a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,11 +33,11 @@ before_install: - if [ -z "$DOCKER_USERNAME" ]; then mv docker-compose-without-login.yml docker-compose.yml; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; fi - docker-compose up -d -- mkdir /opt/oracle -- if [ -n "$DOCKER_USERNAME" ]; then docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi -- export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH - npm install -g npm@5 - npm install -g greenkeeper-lockfile@1 +- mkdir /opt/oracle +- if [ -n "$DOCKER_USERNAME" ]; then npm i oracledb --no-save; docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi +- export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH before_script: - greenkeeper-lockfile-update - typings install diff --git a/package-lock.json b/package-lock.json index 23ffa04..90c8b27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,9 +19,9 @@ "integrity": "sha512-r4snW6Q8ICL3Y8hGzYJRvyG/+sc+kvkewXNedG9tQjoHmUFMwMSv/o45GWQUQswevGnWghiGkpRPivFfOuMsOA==", "dev": true, "requires": { - "chalk": "2.3.0", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" } }, "@gulp-sourcemaps/identity-map": { @@ -30,11 +30,11 @@ "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=", "dev": true, "requires": { - "acorn": "5.4.1", - "css": "2.2.1", - "normalize-path": "2.1.1", - "source-map": "0.5.7", - "through2": "2.0.3" + "acorn": "^5.0.3", + "css": "^2.2.1", + "normalize-path": "^2.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.3" }, "dependencies": { "normalize-path": { @@ -43,7 +43,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "source-map": { @@ -58,8 +58,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } } } @@ -70,8 +70,8 @@ "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", "dev": true, "requires": { - "normalize-path": "2.1.1", - "through2": "2.0.3" + "normalize-path": "^2.0.1", + "through2": "^2.0.3" }, "dependencies": { "normalize-path": { @@ -80,7 +80,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "through2": { @@ -89,8 +89,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } } } @@ -116,7 +116,7 @@ "integrity": "sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==", "dev": true, "requires": { - "@types/chai": "4.1.3" + "@types/chai": "*" } }, "@types/chai-subset": { @@ -125,7 +125,7 @@ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==", "dev": true, "requires": { - "@types/chai": "4.1.3" + "@types/chai": "*" } }, "@types/events": { @@ -140,7 +140,7 @@ "integrity": "sha512-Q3FWsbdmkQd1ib11A4XNWQvRD//5KpPoGawA8aB2DR7pWKoW9XQv3+dGxD/Z1eVFze23Okdo27ZQytVFlweKvQ==", "dev": true, "requires": { - "@types/node": "10.0.1" + "@types/node": "*" } }, "@types/handlebars": { @@ -161,8 +161,8 @@ "integrity": "sha512-N06zogdWXWrI9Giqz+5M3xM9B4FZ68lwsRgIbVwaijHrhY4XuLy0BVNhyMUqDYlUsBJk++k2NtpFiuhr861BkQ==", "dev": true, "requires": { - "@types/events": "1.2.0", - "@types/node": "10.0.1" + "@types/events": "*", + "@types/node": "*" } }, "@types/mysql": { @@ -171,7 +171,7 @@ "integrity": "sha512-qjiJUk8vPIuTtvIPx5sAtwVwProXAQm6t6+fvJOIfL0bO8Pj0ap8PEFJ3df5MVyjYzTKRxLudidhoCk642RoZQ==", "dev": true, "requires": { - "@types/node": "10.0.1" + "@types/node": "*" } }, "@types/node": { @@ -185,7 +185,7 @@ "integrity": "sha512-7cgZaKEfYcPPTScxxCoYoLxmmhM/PBobGBfxE3RGzRJl8YKhkyGKyExFu8fTOpF2cPgdfh83NGKBVX7prWzb+Q==", "dev": true, "requires": { - "@types/node": "10.0.1" + "@types/node": "*" } }, "@types/pg": { @@ -194,9 +194,9 @@ "integrity": "sha512-naSYLMOIBU+/BddUlQUyQuba9reG5yN0MR7g4EcN/AEt3zll48fGozX8s7xjaXuKmFOS1qqOrr/ZeF6SSOjKCw==", "dev": true, "requires": { - "@types/events": "1.2.0", - "@types/node": "10.0.1", - "@types/pg-types": "1.11.4" + "@types/events": "*", + "@types/node": "*", + "@types/pg-types": "*" } }, "@types/pg-types": { @@ -205,7 +205,7 @@ "integrity": "sha512-WdIiQmE347LGc1Vq3Ki8sk3iyCuLgnccqVzgxek6gEHp2H0p3MQ3jniIHt+bRODXKju4kNQ+mp53lmP5+/9moQ==", "dev": true, "requires": { - "moment": "2.22.1" + "moment": ">=2.14.0" } }, "@types/sinon": { @@ -238,7 +238,7 @@ "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "dev": true, "requires": { - "acorn": "5.4.1" + "acorn": "^5.0.0" } }, "agent-base": { @@ -247,8 +247,8 @@ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", "dev": true, "requires": { - "extend": "3.0.1", - "semver": "5.0.3" + "extend": "~3.0.0", + "semver": "~5.0.1" }, "dependencies": { "semver": { @@ -265,10 +265,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "align-text": { @@ -276,9 +276,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -292,7 +292,7 @@ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.0.0" } }, "ansi-colors": { @@ -301,7 +301,7 @@ "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "requires": { - "ansi-wrap": "0.1.0" + "ansi-wrap": "^0.1.0" } }, "ansi-cyan": { @@ -347,7 +347,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "ansi-wrap": { @@ -378,7 +378,7 @@ "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", "dev": true, "requires": { - "buffer-equal": "1.0.0" + "buffer-equal": "^1.0.0" } }, "archy": { @@ -392,7 +392,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "argv": { @@ -407,8 +407,8 @@ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-slice": "0.2.3" + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" } }, "arr-flatten": { @@ -523,8 +523,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "balanced-match": { @@ -538,13 +538,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -553,7 +553,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } } } @@ -570,7 +570,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "beeper": { @@ -594,7 +594,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.5" } }, "bluebird": { @@ -609,7 +609,7 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "boxen": { @@ -618,13 +618,13 @@ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.3.0", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" }, "dependencies": { "camelcase": { @@ -640,7 +640,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -650,9 +650,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "browser-process-hrtime": { @@ -681,8 +681,8 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.11" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, "buffer-equal": { @@ -708,15 +708,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "callsites": { @@ -730,8 +730,8 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -758,8 +758,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chai": { @@ -768,12 +768,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.6" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, "chai-as-promised": { @@ -782,7 +782,7 @@ "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, "requires": { - "check-error": "1.0.2" + "check-error": "^1.0.2" } }, "chai-subset": { @@ -796,9 +796,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" } }, "change-case": { @@ -806,24 +806,24 @@ "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", "requires": { - "camel-case": "3.0.0", - "constant-case": "2.0.0", - "dot-case": "2.1.1", - "header-case": "1.0.1", - "is-lower-case": "1.1.3", - "is-upper-case": "1.1.2", - "lower-case": "1.1.4", - "lower-case-first": "1.0.2", - "no-case": "2.3.2", - "param-case": "2.1.1", - "pascal-case": "2.0.1", - "path-case": "2.1.1", - "sentence-case": "2.1.1", - "snake-case": "2.1.0", - "swap-case": "1.1.2", - "title-case": "2.1.1", - "upper-case": "1.1.3", - "upper-case-first": "1.1.2" + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" } }, "check-error": { @@ -844,10 +844,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "arr-union": { @@ -862,7 +862,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -871,7 +871,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -880,7 +880,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -891,7 +891,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -900,7 +900,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -911,9 +911,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -936,7 +936,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-highlight": { @@ -944,11 +944,11 @@ "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-1.2.3.tgz", "integrity": "sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg==", "requires": { - "chalk": "2.3.0", - "highlight.js": "9.12.0", - "mz": "2.7.0", - "parse5": "3.0.3", - "yargs": "10.1.2" + "chalk": "^2.3.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^3.0.3", + "yargs": "^10.0.3" }, "dependencies": { "camelcase": { @@ -961,9 +961,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "yargs": { @@ -971,18 +971,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.1.0" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^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": "^8.1.0" } }, "yargs-parser": { @@ -990,7 +990,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -1007,8 +1007,8 @@ "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", "dev": true, "requires": { - "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "slice-ansi": "^1.0.0", + "string-width": "^2.0.0" } }, "cliui": { @@ -1017,8 +1017,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -1054,9 +1054,9 @@ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "dev": true, "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.5" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" }, "dependencies": { "process-nextick-args": { @@ -1071,13 +1071,13 @@ "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } } } @@ -1100,7 +1100,7 @@ "dev": true, "requires": { "argv": "0.0.2", - "request": "2.85.0", + "request": "^2.81.0", "urlgrey": "0.4.4" } }, @@ -1110,8 +1110,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -1119,7 +1119,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -1139,8 +1139,8 @@ "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", "dev": true, "requires": { - "strip-ansi": "3.0.1", - "wcwidth": "1.0.1" + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" }, "dependencies": { "ansi-regex": { @@ -1155,7 +1155,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -1166,7 +1166,7 @@ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -1192,9 +1192,9 @@ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "configstore": { @@ -1203,12 +1203,12 @@ "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", "dev": true, "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.1.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "constant-case": { @@ -1216,8 +1216,8 @@ "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", "requires": { - "snake-case": "2.1.0", - "upper-case": "1.1.3" + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" } }, "convert-source-map": { @@ -1248,10 +1248,10 @@ "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.10.0", - "parse-json": "4.0.0", - "require-from-string": "2.0.2" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" }, "dependencies": { "parse-json": { @@ -1260,8 +1260,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } } } @@ -1272,7 +1272,7 @@ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "cross-spawn": { @@ -1280,9 +1280,9 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -1291,7 +1291,7 @@ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -1300,7 +1300,7 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } } } @@ -1317,10 +1317,10 @@ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", "dev": true, "requires": { - "inherits": "2.0.3", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" + "inherits": "^2.0.1", + "source-map": "^0.1.38", + "source-map-resolve": "^0.3.0", + "urix": "^0.1.0" }, "dependencies": { "atob": { @@ -1335,7 +1335,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "source-map-resolve": { @@ -1344,10 +1344,10 @@ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", "dev": true, "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" + "atob": "~1.1.0", + "resolve-url": "~0.2.1", + "source-map-url": "~0.3.0", + "urix": "~0.1.0" } }, "source-map-url": { @@ -1370,7 +1370,7 @@ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", "dev": true, "requires": { - "cssom": "0.3.2" + "cssom": "0.3.x" } }, "d": { @@ -1379,7 +1379,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.41" + "es5-ext": "^0.10.9" } }, "dargs": { @@ -1394,7 +1394,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "data-urls": { @@ -1403,9 +1403,9 @@ "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", "dev": true, "requires": { - "abab": "1.0.4", - "whatwg-mimetype": "2.1.0", - "whatwg-url": "6.4.1" + "abab": "^1.0.4", + "whatwg-mimetype": "^2.0.0", + "whatwg-url": "^6.4.0" } }, "date-fns": { @@ -1434,9 +1434,9 @@ "integrity": "sha512-dsd50qQ1atDeurcxL7XOjPp4nZCGZzWIONDujDXzl1atSyC3hMbZD+v6440etw+Vt0Pr8ce4TQzHfX3KZM05Mw==", "dev": true, "requires": { - "debug": "3.1.0", - "memoizee": "0.4.12", - "object-assign": "4.1.1" + "debug": "3.X", + "memoizee": "0.4.X", + "object-assign": "4.X" }, "dependencies": { "debug": { @@ -1473,7 +1473,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.6" + "type-detect": "^4.0.0" } }, "deep-extend": { @@ -1494,7 +1494,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.3" + "clone": "^1.0.2" } }, "define-properties": { @@ -1503,8 +1503,8 @@ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "define-property": { @@ -1513,8 +1513,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" } }, "delayed-stream": { @@ -1559,7 +1559,7 @@ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "dev": true, "requires": { - "webidl-conversions": "4.0.2" + "webidl-conversions": "^4.0.2" } }, "dot-case": { @@ -1567,7 +1567,7 @@ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "dot-prop": { @@ -1576,7 +1576,7 @@ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "dotenv": { @@ -1590,7 +1590,7 @@ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { - "readable-stream": "1.1.14" + "readable-stream": "~1.1.9" }, "dependencies": { "isarray": { @@ -1605,10 +1605,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1631,10 +1631,10 @@ "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" }, "dependencies": { "end-of-stream": { @@ -1643,7 +1643,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } } } @@ -1655,7 +1655,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "elegant-spinner": { @@ -1670,7 +1670,7 @@ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", "dev": true, "requires": { - "once": "1.3.3" + "once": "~1.3.0" }, "dependencies": { "once": { @@ -1679,7 +1679,7 @@ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } } } @@ -1690,7 +1690,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es5-ext": { @@ -1699,9 +1699,9 @@ "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -1710,9 +1710,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.41", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-symbol": { @@ -1721,8 +1721,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.41" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -1731,10 +1731,10 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.41", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-string-regexp": { @@ -1748,11 +1748,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" }, "dependencies": { "esprima": { @@ -1768,7 +1768,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -1796,8 +1796,8 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.41" + "d": "1", + "es5-ext": "~0.10.14" } }, "execa": { @@ -1805,13 +1805,13 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "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" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "exit-hook": { @@ -1826,7 +1826,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -1835,7 +1835,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "expand-tilde": { @@ -1844,7 +1844,7 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" } }, "expect": { @@ -1853,12 +1853,12 @@ "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "jest-diff": "22.4.3", - "jest-get-type": "22.4.3", - "jest-matcher-utils": "22.4.3", - "jest-message-util": "22.4.3", - "jest-regex-util": "22.4.3" + "ansi-styles": "^3.2.0", + "jest-diff": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-regex-util": "^22.4.3" } }, "extend": { @@ -1873,7 +1873,7 @@ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { - "kind-of": "1.1.0" + "kind-of": "^1.1.0" }, "dependencies": { "kind-of": { @@ -1890,7 +1890,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" }, "dependencies": { "is-extglob": { @@ -1913,9 +1913,9 @@ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", "dev": true, "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "time-stamp": "1.1.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" } }, "fast-deep-equal": { @@ -1947,8 +1947,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "filename-regex": { @@ -1963,11 +1963,11 @@ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" }, "dependencies": { "isobject": { @@ -1998,7 +1998,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "findup-sync": { @@ -2007,21 +2007,10 @@ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "1.0.0", - "is-glob": "3.1.0", - "micromatch": "3.1.8", - "resolve-dir": "1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -2030,11 +2019,11 @@ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.2" + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" } }, "first-chunk-stream": { @@ -2055,8 +2044,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "for-in": { @@ -2071,7 +2060,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -2092,9 +2081,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fragment-cache": { @@ -2103,7 +2092,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fs-extra": { @@ -2112,9 +2101,9 @@ "integrity": "sha512-lk2cUCo8QzbiEWEbt7Cw3m27WMiRG321xsssbcIpfMhpRjrlC08WBOVQqj1/nQYYNnPtyIhP1oqLO3QwT2tPCw==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-mkdirp-stream": { @@ -2123,8 +2112,8 @@ "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "through2": "2.0.3" + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" }, "dependencies": { "through2": { @@ -2133,8 +2122,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } } } @@ -2156,7 +2145,7 @@ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", "dev": true, "requires": { - "globule": "0.1.0" + "globule": "~0.1.0" } }, "generic-pool": { @@ -2198,7 +2187,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -2206,12 +2195,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "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" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -2220,8 +2209,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "glob-parent": { @@ -2230,7 +2219,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -2245,7 +2234,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -2256,8 +2245,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, "glob-stream": { @@ -2266,12 +2255,12 @@ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" }, "dependencies": { "glob": { @@ -2280,10 +2269,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, "isarray": { @@ -2298,7 +2287,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.0.0" } }, "readable-stream": { @@ -2307,10 +2296,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -2325,8 +2314,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -2337,7 +2326,7 @@ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", "dev": true, "requires": { - "gaze": "0.5.2" + "gaze": "^0.5.1" } }, "glob2base": { @@ -2346,7 +2335,7 @@ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", "dev": true, "requires": { - "find-index": "0.1.1" + "find-index": "^0.1.1" } }, "global-dirs": { @@ -2355,7 +2344,7 @@ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "1.3.5" + "ini": "^1.3.4" } }, "global-modules": { @@ -2364,9 +2353,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "dependencies": { "is-windows": { @@ -2383,11 +2372,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "dependencies": { "is-windows": { @@ -2404,9 +2393,9 @@ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" }, "dependencies": { "glob": { @@ -2415,9 +2404,9 @@ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" } }, "graceful-fs": { @@ -2450,8 +2439,8 @@ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "lru-cache": "2", + "sigmund": "~1.0.0" } } } @@ -2462,7 +2451,7 @@ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { - "sparkles": "1.0.0" + "sparkles": "^1.0.0" } }, "got": { @@ -2471,17 +2460,17 @@ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" } }, "graceful-fs": { @@ -2502,19 +2491,19 @@ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", "dev": true, "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.1.0", - "liftoff": "2.5.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.2", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" }, "dependencies": { "ansi-regex": { @@ -2535,11 +2524,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "minimist": { @@ -2554,7 +2543,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -2571,11 +2560,11 @@ "integrity": "sha512-DARK8rNMo4lHOFLGTiHEJdf19GuoBDHqGUaypz+fOhrvOs3iFO7ntdYtdpNxv+AzSJBx/JfypF0yEj9ks1IStQ==", "dev": true, "requires": { - "fancy-log": "1.3.2", - "plugin-error": "0.1.2", - "rimraf": "2.6.2", - "through2": "2.0.3", - "vinyl": "2.1.0" + "fancy-log": "^1.3.2", + "plugin-error": "^0.1.2", + "rimraf": "^2.6.2", + "through2": "^2.0.3", + "vinyl": "^2.1.0" }, "dependencies": { "clone": { @@ -2602,8 +2591,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "vinyl": { @@ -2612,12 +2601,12 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } @@ -2628,12 +2617,12 @@ "integrity": "sha512-uMLSdqPDnBAV/B9rNyOgVMgrVC1tPbe+5GH6P13UOyxbRDT/w4sKYHWftPMA8j9om+NFvfeRlqpDXL2fixFWNA==", "dev": true, "requires": { - "istanbul": "0.4.5", - "istanbul-threshold-checker": "0.2.1", - "lodash": "4.17.5", - "plugin-error": "0.1.2", - "through2": "2.0.1", - "vinyl-sourcemaps-apply": "0.2.1" + "istanbul": "^0.4.0", + "istanbul-threshold-checker": "^0.2.1", + "lodash": "^4.0.0", + "plugin-error": "^0.1.2", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.1" } }, "gulp-mocha": { @@ -2795,13 +2784,13 @@ "integrity": "sha512-f3m1WcS0o2B72/PGj1Jbv9zYR9rynBh/EQJv64n01xQUo7j7anols0eww9GG/WtDTzGVQLrupVDYkifRFnj5Zg==", "dev": true, "requires": { - "async": "2.6.0", - "chalk": "2.3.0", - "fancy-log": "1.3.2", - "lodash": "4.17.5", - "lodash.template": "4.4.0", - "plugin-error": "0.1.2", - "through2": "2.0.3" + "async": "^2.1.5", + "chalk": "^2.3.0", + "fancy-log": "^1.3.2", + "lodash": "^4.17.4", + "lodash.template": "^4.4.0", + "plugin-error": "^0.1.2", + "through2": "^2.0.3" }, "dependencies": { "async": { @@ -2810,7 +2799,7 @@ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.5" + "lodash": "^4.14.0" } }, "lodash.template": { @@ -2819,8 +2808,8 @@ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { @@ -2829,7 +2818,7 @@ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0" + "lodash._reinterpolate": "~3.0.0" } }, "through2": { @@ -2838,8 +2827,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } } } @@ -2850,17 +2839,17 @@ "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=", "dev": true, "requires": { - "@gulp-sourcemaps/identity-map": "1.0.1", - "@gulp-sourcemaps/map-sources": "1.0.0", - "acorn": "5.4.1", - "convert-source-map": "1.5.1", - "css": "2.2.1", - "debug-fabulous": "1.0.0", - "detect-newline": "2.1.0", - "graceful-fs": "4.1.11", - "source-map": "0.6.1", - "strip-bom-string": "1.0.0", - "through2": "2.0.1" + "@gulp-sourcemaps/identity-map": "1.X", + "@gulp-sourcemaps/map-sources": "1.X", + "acorn": "5.X", + "convert-source-map": "1.X", + "css": "2.X", + "debug-fabulous": "1.X", + "detect-newline": "2.X", + "graceful-fs": "4.X", + "source-map": "~0.6.0", + "strip-bom-string": "1.X", + "through2": "2.X" }, "dependencies": { "source-map": { @@ -2877,12 +2866,12 @@ "integrity": "sha512-Hhbn5Aa2l3T+tnn0KqsG6RRJmcYEsr3byTL2nBpNBeAK8pqug9Od4AwddU4JEI+hRw7mzZyjRbB8DDWR6paGVA==", "dev": true, "requires": { - "ansi-colors": "1.1.0", - "plugin-error": "0.1.2", - "source-map": "0.6.1", - "through2": "2.0.3", - "vinyl": "2.1.0", - "vinyl-fs": "3.0.2" + "ansi-colors": "^1.0.1", + "plugin-error": "^0.1.2", + "source-map": "^0.6.1", + "through2": "^2.0.3", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.0" }, "dependencies": { "clone": { @@ -2903,16 +2892,16 @@ "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", "dev": true, "requires": { - "extend": "3.0.1", - "glob": "7.1.2", - "glob-parent": "3.1.0", - "is-negated-glob": "1.0.0", - "ordered-read-streams": "1.0.1", - "pumpify": "1.4.0", - "readable-stream": "2.3.3", - "remove-trailing-separator": "1.1.0", - "to-absolute-glob": "2.0.2", - "unique-stream": "2.2.1" + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" } }, "ordered-read-streams": { @@ -2921,7 +2910,7 @@ "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.1" } }, "replace-ext": { @@ -2942,8 +2931,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "unique-stream": { @@ -2952,8 +2941,8 @@ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", "dev": true, "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" } }, "vinyl": { @@ -2962,12 +2951,12 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } }, "vinyl-fs": { @@ -2976,23 +2965,23 @@ "integrity": "sha512-AUSFda1OukBwuLPBTbyuO4IRWgfXmqC4UTW0f8xrCa8Hkv9oyIU+NSqBlgfOLZRoUt7cHdo75hKQghCywpIyIw==", "dev": true, "requires": { - "fs-mkdirp-stream": "1.0.0", - "glob-stream": "6.1.0", - "graceful-fs": "4.1.11", - "is-valid-glob": "1.0.0", - "lazystream": "1.0.0", - "lead": "1.0.0", - "object.assign": "4.1.0", - "pumpify": "1.4.0", - "readable-stream": "2.3.3", - "remove-bom-buffer": "3.0.0", - "remove-bom-stream": "1.2.0", - "resolve-options": "1.1.0", - "through2": "2.0.3", - "to-through": "2.0.0", - "value-or-function": "3.0.0", - "vinyl": "2.1.0", - "vinyl-sourcemap": "1.1.0" + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" } } } @@ -3003,24 +2992,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.1", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" }, "dependencies": { "ansi-regex": { @@ -3041,11 +3030,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "minimist": { @@ -3066,7 +3055,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -3083,7 +3072,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "1.0.1" + "glogg": "^1.0.0" } }, "handlebars": { @@ -3091,10 +3080,10 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" } }, "har-schema": { @@ -3109,8 +3098,8 @@ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has": { @@ -3119,7 +3108,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -3127,7 +3116,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -3148,7 +3137,7 @@ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "sparkles": "1.0.0" + "sparkles": "^1.0.0" } }, "has-symbols": { @@ -3169,9 +3158,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -3180,8 +3169,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -3190,7 +3179,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3199,7 +3188,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3210,7 +3199,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3221,10 +3210,10 @@ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "he": { @@ -3238,8 +3227,8 @@ "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.3" } }, "highlight.js": { @@ -3259,7 +3248,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "html-encoding-sniffer": { @@ -3268,7 +3257,7 @@ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "requires": { - "whatwg-encoding": "1.0.3" + "whatwg-encoding": "^1.0.1" } }, "http-proxy-agent": { @@ -3277,9 +3266,9 @@ "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "agent-base": "2", + "debug": "2", + "extend": "3" } }, "http-signature": { @@ -3288,9 +3277,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-proxy-agent": { @@ -3299,9 +3288,9 @@ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "agent-base": "2", + "debug": "2", + "extend": "3" } }, "husky": { @@ -3310,9 +3299,9 @@ "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", "dev": true, "requires": { - "is-ci": "1.1.0", - "normalize-path": "1.0.0", - "strip-indent": "2.0.0" + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" } }, "iconv-lite": { @@ -3343,7 +3332,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "inflight": { @@ -3351,8 +3340,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3378,7 +3367,7 @@ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -3392,8 +3381,8 @@ "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", "dev": true, "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" + "is-relative": "^0.2.1", + "is-windows": "^0.2.0" } }, "is-accessor-descriptor": { @@ -3402,7 +3391,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" }, "dependencies": { "kind-of": { @@ -3430,7 +3419,7 @@ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "dev": true, "requires": { - "ci-info": "1.1.2" + "ci-info": "^1.0.0" } }, "is-data-descriptor": { @@ -3439,7 +3428,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" }, "dependencies": { "kind-of": { @@ -3456,9 +3445,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { @@ -3487,7 +3476,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -3508,7 +3497,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -3528,7 +3517,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } }, "is-installed-globally": { @@ -3537,8 +3526,8 @@ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-lower-case": { @@ -3546,7 +3535,7 @@ "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.0" } }, "is-negated-glob": { @@ -3567,7 +3556,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-obj": { @@ -3582,7 +3571,7 @@ "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", "dev": true, "requires": { - "symbol-observable": "0.2.4" + "symbol-observable": "^0.2.2" } }, "is-odd": { @@ -3591,7 +3580,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -3608,7 +3597,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -3623,7 +3612,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -3662,7 +3651,7 @@ "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", "dev": true, "requires": { - "is-unc-path": "0.1.2" + "is-unc-path": "^0.1.1" } }, "is-retry-allowed": { @@ -3688,7 +3677,7 @@ "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.0" } }, "is-upper-case": { @@ -3696,7 +3685,7 @@ "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", "requires": { - "upper-case": "1.1.3" + "upper-case": "^1.1.0" } }, "is-utf8": { @@ -3745,20 +3734,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.11", - "js-yaml": "3.10.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.0", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "esprima": { @@ -3773,11 +3762,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-flag": { @@ -3792,7 +3781,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } }, "wordwrap": { @@ -3809,8 +3798,8 @@ "integrity": "sha1-xdyU6PLMXNP/0zVFL4S1U8QkgzE=", "dev": true, "requires": { - "istanbul": "0.4.5", - "lodash": "4.17.5" + "istanbul": "~0.4.5", + "lodash": "~4.17.2" } }, "jest-config": { @@ -3819,17 +3808,17 @@ "integrity": "sha512-KSg3EOToCgkX+lIvenKY7J8s426h6ahXxaUFJxvGoEk0562Z6inWj1TnKoGycTASwiLD+6kSYFALcjdosq9KIQ==", "dev": true, "requires": { - "chalk": "2.3.0", - "glob": "7.1.2", - "jest-environment-jsdom": "22.4.3", - "jest-environment-node": "22.4.3", - "jest-get-type": "22.4.3", - "jest-jasmine2": "22.4.3", - "jest-regex-util": "22.4.3", - "jest-resolve": "22.4.3", - "jest-util": "22.4.3", - "jest-validate": "22.4.3", - "pretty-format": "22.4.3" + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^22.4.3", + "jest-environment-node": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-jasmine2": "^22.4.3", + "jest-regex-util": "^22.4.3", + "jest-resolve": "^22.4.3", + "jest-util": "^22.4.3", + "jest-validate": "^22.4.3", + "pretty-format": "^22.4.3" } }, "jest-diff": { @@ -3838,10 +3827,10 @@ "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", "dev": true, "requires": { - "chalk": "2.3.0", - "diff": "3.5.0", - "jest-get-type": "22.4.3", - "pretty-format": "22.4.3" + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" } }, "jest-environment-jsdom": { @@ -3850,9 +3839,9 @@ "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", "dev": true, "requires": { - "jest-mock": "22.4.3", - "jest-util": "22.4.3", - "jsdom": "11.10.0" + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3", + "jsdom": "^11.5.1" } }, "jest-environment-node": { @@ -3861,8 +3850,8 @@ "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", "dev": true, "requires": { - "jest-mock": "22.4.3", - "jest-util": "22.4.3" + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3" } }, "jest-get-type": { @@ -3877,17 +3866,17 @@ "integrity": "sha512-yZCPCJUcEY6R5KJB/VReo1AYI2b+5Ky+C+JA1v34jndJsRcLpU4IZX4rFJn7yDTtdNbO/nNqg+3SDIPNH2ecnw==", "dev": true, "requires": { - "chalk": "2.3.0", - "co": "4.6.0", - "expect": "22.4.3", - "graceful-fs": "4.1.11", - "is-generator-fn": "1.0.0", - "jest-diff": "22.4.3", - "jest-matcher-utils": "22.4.3", - "jest-message-util": "22.4.3", - "jest-snapshot": "22.4.3", - "jest-util": "22.4.3", - "source-map-support": "0.5.5" + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^22.4.3", + "graceful-fs": "^4.1.11", + "is-generator-fn": "^1.0.0", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-snapshot": "^22.4.3", + "jest-util": "^22.4.3", + "source-map-support": "^0.5.0" } }, "jest-matcher-utils": { @@ -3896,9 +3885,9 @@ "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-get-type": "22.4.3", - "pretty-format": "22.4.3" + "chalk": "^2.0.1", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" } }, "jest-message-util": { @@ -3907,11 +3896,11 @@ "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.46", - "chalk": "2.3.0", - "micromatch": "2.3.11", - "slash": "1.0.0", - "stack-utils": "1.0.1" + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" }, "dependencies": { "arr-diff": { @@ -3920,7 +3909,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "is-extglob": { @@ -3935,7 +3924,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "micromatch": { @@ -3944,19 +3933,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "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.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "normalize-path": { @@ -3965,7 +3954,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } } } @@ -3988,8 +3977,8 @@ "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", "dev": true, "requires": { - "browser-resolve": "1.11.2", - "chalk": "2.3.0" + "browser-resolve": "^1.11.2", + "chalk": "^2.0.1" } }, "jest-snapshot": { @@ -3998,12 +3987,12 @@ "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-diff": "22.4.3", - "jest-matcher-utils": "22.4.3", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "pretty-format": "22.4.3" + "chalk": "^2.0.1", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^22.4.3" } }, "jest-util": { @@ -4012,13 +4001,13 @@ "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", "dev": true, "requires": { - "callsites": "2.0.0", - "chalk": "2.3.0", - "graceful-fs": "4.1.11", - "is-ci": "1.1.0", - "jest-message-util": "22.4.3", - "mkdirp": "0.5.1", - "source-map": "0.6.1" + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^22.4.3", + "mkdirp": "^0.5.1", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -4035,11 +4024,11 @@ "integrity": "sha512-CfFM18W3GSP/xgmA4UouIx0ljdtfD2mjeBC6c89Gg17E44D4tQhAcTrZmf9djvipwU30kSTnk6CzcxdCCeSXfA==", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-config": "22.4.3", - "jest-get-type": "22.4.3", - "leven": "2.1.0", - "pretty-format": "22.4.3" + "chalk": "^2.0.1", + "jest-config": "^22.4.3", + "jest-get-type": "^22.4.3", + "leven": "^2.1.0", + "pretty-format": "^22.4.3" } }, "js-string-escape": { @@ -4059,8 +4048,8 @@ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -4076,32 +4065,32 @@ "integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==", "dev": true, "requires": { - "abab": "1.0.4", - "acorn": "5.4.1", - "acorn-globals": "4.1.0", - "array-equal": "1.0.0", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "data-urls": "1.0.0", - "domexception": "1.0.1", - "escodegen": "1.9.1", - "html-encoding-sniffer": "1.0.2", - "left-pad": "1.3.0", - "nwmatcher": "1.4.4", + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwmatcher": "^1.4.3", "parse5": "4.0.0", - "pn": "1.1.0", - "request": "2.85.0", - "request-promise-native": "1.0.5", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", - "w3c-hr-time": "1.0.1", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-mimetype": "2.1.0", - "whatwg-url": "6.4.1", - "ws": "4.1.0", - "xml-name-validator": "3.0.0" + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.0", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" }, "dependencies": { "escodegen": { @@ -4110,11 +4099,11 @@ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" } }, "esprima": { @@ -4168,7 +4157,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -4183,7 +4172,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -4198,15 +4187,15 @@ "integrity": "sha1-RMJpAuSujs4jZs7cn/FrEKXzkcY=", "dev": true, "requires": { - "any-promise": "1.3.0", - "graceful-fs": "4.1.11", - "make-error-cause": "1.2.2", - "object.pick": "1.3.0", - "parse-json": "2.2.0", - "strip-bom": "3.0.0", - "thenify": "3.3.0", - "throat": "3.2.0", - "xtend": "4.0.1" + "any-promise": "^1.3.0", + "graceful-fs": "^4.1.4", + "make-error-cause": "^1.2.1", + "object.pick": "^1.1.2", + "parse-json": "^2.2.0", + "strip-bom": "^3.0.0", + "thenify": "^3.2.0", + "throat": "^3.0.0", + "xtend": "^4.0.1" } }, "jsprim": { @@ -4232,7 +4221,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "latest-version": { @@ -4241,7 +4230,7 @@ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "package-json": "4.0.1" + "package-json": "^4.0.0" } }, "lazy-cache": { @@ -4256,7 +4245,7 @@ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.5" } }, "lcid": { @@ -4264,7 +4253,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "lead": { @@ -4273,7 +4262,7 @@ "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", "dev": true, "requires": { - "flush-write-stream": "1.0.3" + "flush-write-stream": "^1.0.2" } }, "left-pad": { @@ -4294,8 +4283,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "liftoff": { @@ -4304,14 +4293,14 @@ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", "dev": true, "requires": { - "extend": "3.0.1", - "findup-sync": "2.0.0", - "fined": "1.1.0", - "flagged-respawn": "1.0.0", - "is-plain-object": "2.0.4", - "object.map": "1.0.1", - "rechoir": "0.6.2", - "resolve": "1.1.7" + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" } }, "lint-staged": { @@ -4320,28 +4309,28 @@ "integrity": "sha512-dCzqskhum0WXQBE0RawBkOlRjg2pc7PkAJD4yRB12+ct5CMTOU9tvzzbsyqJwaGHjTdSFUxiT8n+sww77p2r7w==", "dev": true, "requires": { - "app-root-path": "2.0.1", - "chalk": "2.4.1", - "commander": "2.15.1", - "cosmiconfig": "4.0.0", - "debug": "3.1.0", - "dedent": "0.7.0", - "execa": "0.9.0", - "find-parent-dir": "0.3.0", - "is-glob": "4.0.0", - "jest-validate": "22.4.3", - "listr": "0.13.0", - "lodash": "4.17.5", - "log-symbols": "2.2.0", - "micromatch": "3.1.8", - "npm-which": "3.0.1", - "p-map": "1.2.0", - "path-is-inside": "1.0.2", - "pify": "3.0.0", - "please-upgrade-node": "3.0.2", + "app-root-path": "^2.0.1", + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^4.0.0", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "execa": "^0.9.0", + "find-parent-dir": "^0.3.0", + "is-glob": "^4.0.0", + "jest-validate": "^22.4.0", + "listr": "^0.13.0", + "lodash": "^4.17.5", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", "staged-git-files": "1.1.1", - "string-argv": "0.0.2", - "stringify-object": "3.2.2" + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2" }, "dependencies": { "ansi-styles": { @@ -4350,7 +4339,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -4359,9 +4348,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -4379,13 +4368,13 @@ "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", "dev": true, "requires": { - "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" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "has-flag": { @@ -4400,7 +4389,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "supports-color": { @@ -4409,7 +4398,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -4426,23 +4415,23 @@ "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-observable": "0.2.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.4.0", - "listr-verbose-renderer": "0.4.1", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "5.5.10", - "stream-to-observable": "0.2.0", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-observable": "^0.2.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.4.0", + "listr-verbose-renderer": "^0.4.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "ora": "^0.2.3", + "p-map": "^1.1.1", + "rxjs": "^5.4.2", + "stream-to-observable": "^0.2.0", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -4463,11 +4452,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-truncate": { @@ -4477,7 +4466,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" } }, "is-fullwidth-code-point": { @@ -4486,7 +4475,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "log-symbols": { @@ -4495,7 +4484,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } }, "slice-ansi": { @@ -4510,9 +4499,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -4521,7 +4510,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -4544,14 +4533,14 @@ "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -4572,11 +4561,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-truncate": { @@ -4586,7 +4575,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" } }, "indent-string": { @@ -4601,7 +4590,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "log-symbols": { @@ -4610,7 +4599,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } }, "slice-ansi": { @@ -4625,9 +4614,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -4636,7 +4625,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -4653,10 +4642,10 @@ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" }, "dependencies": { "ansi-regex": { @@ -4677,11 +4666,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -4690,7 +4679,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -4706,8 +4695,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lockfile": { @@ -4782,7 +4771,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.get": { @@ -4809,9 +4798,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.restparam": { @@ -4832,15 +4821,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -4849,8 +4838,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "log-symbols": { @@ -4859,7 +4848,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "2.3.0" + "chalk": "^2.0.1" } }, "log-update": { @@ -4868,8 +4857,8 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" } }, "lolex": { @@ -4889,7 +4878,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lower-case": { @@ -4902,7 +4891,7 @@ "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.2" } }, "lowercase-keys": { @@ -4916,8 +4905,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "lru-queue": { @@ -4926,7 +4915,7 @@ "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", "dev": true, "requires": { - "es5-ext": "0.10.41" + "es5-ext": "~0.10.2" } }, "make-dir": { @@ -4935,7 +4924,7 @@ "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -4958,16 +4947,24 @@ "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", "dev": true, "requires": { - "make-error": "1.3.2" + "make-error": "^1.2.0" } }, "make-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz", - "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "map-cache": { @@ -4982,7 +4979,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "mem": { @@ -4990,7 +4987,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "memoizee": { @@ -4999,14 +4996,14 @@ "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.41", - "es6-weak-map": "2.0.2", - "event-emitter": "0.3.5", - "is-promise": "2.1.0", - "lru-queue": "0.1.0", - "next-tick": "1.0.0", - "timers-ext": "0.1.5" + "d": "1", + "es5-ext": "^0.10.30", + "es6-weak-map": "^2.0.2", + "event-emitter": "^0.3.5", + "is-promise": "^2.1", + "lru-queue": "0.1", + "next-tick": "1", + "timers-ext": "^0.1.2" } }, "micromatch": { @@ -5015,19 +5012,19 @@ "integrity": "sha512-/XeuOQqYg+B5kwjDWekXseSwGS7CzE0w9Gjo4Cjkf/uFitNh47NrZHAY2vp/oS2YQVfebPIdbEIvgdy+kIcAog==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.1", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -5048,18 +5045,18 @@ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "kind-of": "6.0.2", - "repeat-element": "1.1.2", - "snapdragon": "0.8.1", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.1" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "kind-of": "^6.0.2", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -5068,7 +5065,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -5077,7 +5074,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -5088,13 +5085,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -5103,7 +5100,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -5112,7 +5109,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-descriptor": { @@ -5121,9 +5118,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -5140,8 +5137,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -5150,7 +5147,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -5161,14 +5158,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -5177,7 +5174,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -5186,7 +5183,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -5197,10 +5194,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -5209,7 +5206,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -5220,7 +5217,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5229,7 +5226,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5240,7 +5237,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5249,7 +5246,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5260,7 +5257,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5269,7 +5266,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5294,7 +5291,7 @@ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "dev": true, "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.30.0" } }, "mimic-fn": { @@ -5307,7 +5304,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -5321,8 +5318,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -5331,7 +5328,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -5391,7 +5388,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -5412,9 +5409,9 @@ "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.1.0.tgz", "integrity": "sha512-ekht0eILEV0P1CbpkwpAxhgO+/5goYizUJrt7pgDm3fP6lGKe0+8V9jhTvQZ8DPHkycSd0wYGUoz/YA7VN7kQQ==", "requires": { - "debug": "2.6.9", - "generic-pool": "3.4.0", - "tedious": "2.1.5" + "debug": "^2.6.3", + "generic-pool": "^3.1.7", + "tedious": "^2.0.0" } }, "multipipe": { @@ -5442,9 +5439,9 @@ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "requires": { - "any-promise": "1.3.0", - "object-assign": "4.1.1", - "thenify-all": "1.6.0" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, "nan": { @@ -5458,18 +5455,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -5490,8 +5487,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -5500,7 +5497,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } }, "is-windows": { @@ -5518,9 +5515,9 @@ } }, "natives": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.2.tgz", - "integrity": "sha512-5bRASydE1gu6zPOenLN043++J8xj1Ob7ArkfdYO3JN4DF5rDmG7bMoiybkTyD+GnXQEMixVeDHMzuqm6kpBmiA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", + "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", "dev": true }, "natural-compare": { @@ -5547,11 +5544,11 @@ "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "just-extend": "1.1.27", - "lolex": "2.3.2", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" + "@sinonjs/formatio": "^2.0.0", + "just-extend": "^1.1.27", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" } }, "no-case": { @@ -5559,7 +5556,7 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "nopt": { @@ -5568,7 +5565,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "normalize-path": { @@ -5583,7 +5580,7 @@ "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.3.2" } }, "npm-path": { @@ -5592,7 +5589,7 @@ "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", "dev": true, "requires": { - "which": "1.3.0" + "which": "^1.2.10" } }, "npm-run-path": { @@ -5600,7 +5597,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npm-which": { @@ -5609,9 +5606,9 @@ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "dev": true, "requires": { - "commander": "2.15.1", - "npm-path": "2.0.4", - "which": "1.3.0" + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" } }, "number-is-nan": { @@ -5642,9 +5639,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -5653,7 +5650,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -5662,7 +5659,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-data-descriptor": { @@ -5671,7 +5668,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-descriptor": { @@ -5680,9 +5677,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -5707,7 +5704,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { @@ -5716,10 +5713,10 @@ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.11" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.defaults": { @@ -5728,10 +5725,10 @@ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { - "array-each": "1.0.1", - "array-slice": "1.1.0", - "for-own": "1.0.0", - "isobject": "3.0.1" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "array-slice": { @@ -5746,7 +5743,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } } } @@ -5757,8 +5754,8 @@ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dev": true, "requires": { - "for-own": "1.0.0", - "make-iterator": "1.0.0" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" }, "dependencies": { "for-own": { @@ -5767,7 +5764,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } } } @@ -5778,8 +5775,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -5788,7 +5785,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "once": { @@ -5796,7 +5793,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -5810,8 +5807,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "optionator": { @@ -5820,12 +5817,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "dependencies": { "wordwrap": { @@ -5842,10 +5839,10 @@ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" }, "dependencies": { "ansi-regex": { @@ -5866,11 +5863,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -5879,7 +5876,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -5890,20 +5887,15 @@ } } }, - "oracledb": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-2.2.0.tgz", - "integrity": "sha512-ywwalyryeJYb5dr1JScyPcNxCeN0zExrKLtorSdptBZqhfS5Dp9KLgGOExc+XMMfEejXGtC/RfiDxKaGn6+VJA==" - }, "orchestrator": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.1" + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" } }, "ordered-read-streams": { @@ -5923,9 +5915,9 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "p-finally": { @@ -5938,7 +5930,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -5946,7 +5938,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -5966,10 +5958,10 @@ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.1", - "registry-url": "3.1.0", - "semver": "5.5.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" }, "dependencies": { "semver": { @@ -5990,7 +5982,7 @@ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parent-require": { @@ -6004,9 +5996,9 @@ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-absolute": "1.0.0", - "map-cache": "0.2.2", - "path-root": "0.1.1" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" }, "dependencies": { "is-absolute": { @@ -6015,8 +6007,8 @@ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "1.0.0", - "is-windows": "1.0.2" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-relative": { @@ -6025,7 +6017,7 @@ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "is-unc-path": "1.0.0" + "is-unc-path": "^1.0.0" } }, "is-unc-path": { @@ -6034,7 +6026,7 @@ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.2" } }, "is-windows": { @@ -6051,10 +6043,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "is-extglob": { @@ -6069,7 +6061,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -6080,7 +6072,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -6094,7 +6086,7 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "requires": { - "@types/node": "10.0.1" + "@types/node": "*" } }, "pascal-case": { @@ -6102,8 +6094,8 @@ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", "requires": { - "camel-case": "3.0.0", - "upper-case-first": "1.1.2" + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" } }, "pascalcase": { @@ -6117,7 +6109,7 @@ "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "path-dirname": { @@ -6153,7 +6145,7 @@ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "path-root-regex": "0.1.2" + "path-root-regex": "^0.1.0" } }, "path-root-regex": { @@ -6200,9 +6192,9 @@ "js-string-escape": "1.0.1", "packet-reader": "0.3.1", "pg-connection-string": "0.1.3", - "pg-pool": "2.0.3", - "pg-types": "1.12.1", - "pgpass": "1.0.2", + "pg-pool": "~2.0.3", + "pg-types": "~1.12.1", + "pgpass": "1.x", "semver": "4.3.2" } }, @@ -6221,10 +6213,10 @@ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.1.tgz", "integrity": "sha1-1kCH45A7WP+q0nnnWVxSIIoUw9I=", "requires": { - "postgres-array": "1.0.2", - "postgres-bytea": "1.0.0", - "postgres-date": "1.0.3", - "postgres-interval": "1.1.1" + "postgres-array": "~1.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.0", + "postgres-interval": "^1.1.0" } }, "pgpass": { @@ -6232,7 +6224,7 @@ "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", "requires": { - "split": "1.0.1" + "split": "^1.0.0" } }, "pify": { @@ -6247,7 +6239,7 @@ "integrity": "sha512-bslfSeW+ksUbB/sYZeEdKFyTG4YWU9YKRvqfSRvZKE675khAuBUPqV5RUwJZaGuWmVQLweK45Q+lPHFVnSlSug==", "dev": true, "requires": { - "semver-compare": "1.0.0" + "semver-compare": "^1.0.0" } }, "plugin-error": { @@ -6256,11 +6248,11 @@ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { - "ansi-cyan": "0.1.1", - "ansi-red": "0.1.1", - "arr-diff": "1.1.0", - "arr-union": "2.1.0", - "extend-shallow": "1.1.4" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" } }, "pn": { @@ -6275,10 +6267,10 @@ "integrity": "sha512-petRj39w05GvH1WKuGFmzxR9+k+R9E7zX5XWTFee7P/qf88hMuLT7aAO/RsmldpQMtJsWQISkTQlfMRECKlxhw==", "dev": true, "requires": { - "concat-stream": "1.6.0", - "form-data": "2.1.4", - "make-error-cause": "1.2.2", - "tough-cookie": "2.3.3" + "concat-stream": "^1.4.7", + "form-data": "^2.0.0", + "make-error-cause": "^1.2.1", + "tough-cookie": "^2.0.0" } }, "popsicle-proxy-agent": { @@ -6287,8 +6279,8 @@ "integrity": "sha1-uRM8VdlFdZq37mG3cRNkYg066tw=", "dev": true, "requires": { - "http-proxy-agent": "1.0.0", - "https-proxy-agent": "1.0.0" + "http-proxy-agent": "^1.0.0", + "https-proxy-agent": "^1.0.0" } }, "popsicle-retry": { @@ -6297,8 +6289,8 @@ "integrity": "sha1-4G6GZTO0KnoSPrMwy+Y6fOvLoQw=", "dev": true, "requires": { - "any-promise": "1.3.0", - "xtend": "4.0.1" + "any-promise": "^1.1.0", + "xtend": "^4.0.1" } }, "popsicle-rewrite": { @@ -6339,7 +6331,7 @@ "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", "requires": { - "xtend": "4.0.1" + "xtend": "^4.0.0" } }, "prelude-ls": { @@ -6372,8 +6364,8 @@ "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", "dev": true, "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" } }, "pretty-hrtime": { @@ -6404,8 +6396,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" }, "dependencies": { "end-of-stream": { @@ -6414,7 +6406,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } } } @@ -6425,9 +6417,9 @@ "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", "dev": true, "requires": { - "duplexify": "3.5.4", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -6448,8 +6440,8 @@ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -6458,7 +6450,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -6467,7 +6459,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6478,7 +6470,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6489,10 +6481,10 @@ "integrity": "sha1-UVdakA+N1oOBxxC0cSwhVMPiA1s=", "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -6508,13 +6500,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "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.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "rechoir": { @@ -6523,7 +6515,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.1.7" + "resolve": "^1.1.6" } }, "reflect-metadata": { @@ -6542,7 +6534,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -6551,8 +6543,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "dependencies": { "extend-shallow": { @@ -6561,8 +6553,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -6571,7 +6563,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6582,8 +6574,8 @@ "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", "dev": true, "requires": { - "rc": "1.2.3", - "safe-buffer": "5.1.1" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -6592,7 +6584,7 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "1.2.3" + "rc": "^1.0.1" } }, "remap-istanbul": { @@ -6601,11 +6593,11 @@ "integrity": "sha512-Itv3XvYjD6G+9xDzAeFohx4GUwbFjfqFt0UXlC826jHR18E49fEiEGqZUxUASwMq4z7wwUv2H9/XF2d6qj0iaQ==", "dev": true, "requires": { - "amdefine": "1.0.1", + "amdefine": "^1.0.0", "istanbul": "0.4.5", - "minimatch": "3.0.4", - "plugin-error": "0.1.2", - "source-map": "0.6.1", + "minimatch": "^3.0.3", + "plugin-error": "^0.1.2", + "source-map": "^0.6.1", "through2": "2.0.1" }, "dependencies": { @@ -6623,8 +6615,8 @@ "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, "requires": { - "is-buffer": "1.1.6", - "is-utf8": "0.2.1" + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" } }, "remove-bom-stream": { @@ -6633,9 +6625,9 @@ "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", "dev": true, "requires": { - "remove-bom-buffer": "3.0.0", - "safe-buffer": "5.1.1", - "through2": "2.0.3" + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" }, "dependencies": { "through2": { @@ -6644,8 +6636,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } } } @@ -6673,7 +6665,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -6688,28 +6680,28 @@ "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" }, "dependencies": { "form-data": { @@ -6718,9 +6710,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.17" + "mime-types": "^2.1.12" }, "dependencies": { "combined-stream": { @@ -6729,7 +6721,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } } } @@ -6742,7 +6734,7 @@ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", "dev": true, "requires": { - "lodash": "4.17.5" + "lodash": "^4.13.1" } }, "request-promise-native": { @@ -6752,8 +6744,8 @@ "dev": true, "requires": { "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.3.3" + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" } }, "require-directory": { @@ -6784,8 +6776,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-options": { @@ -6794,7 +6786,7 @@ "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", "dev": true, "requires": { - "value-or-function": "3.0.0" + "value-or-function": "^3.0.0" } }, "resolve-url": { @@ -6809,8 +6801,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "ret": { @@ -6825,7 +6817,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -6834,7 +6826,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "rxjs": { @@ -6865,7 +6857,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "samsam": { @@ -6896,7 +6888,7 @@ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { - "semver": "5.5.0" + "semver": "^5.0.3" }, "dependencies": { "semver": { @@ -6912,8 +6904,8 @@ "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", "requires": { - "no-case": "2.3.2", - "upper-case-first": "1.1.2" + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, "sequencify": { @@ -6933,7 +6925,7 @@ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", "dev": true, "requires": { - "to-object-path": "0.3.0" + "to-object-path": "^0.3.0" } }, "set-value": { @@ -6942,10 +6934,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -6954,7 +6946,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6964,7 +6956,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -6989,13 +6981,13 @@ "integrity": "sha512-xhPMTWl8dusKsa/4Px+K0FCHsAhcpxjMurofDzPr6BF1I5C2G6r4JLIaHKSOcMnXkt7X4Md0OZgJuuIqlw9ieA==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "diff": "3.5.0", - "lodash.get": "4.4.2", - "lolex": "2.3.2", - "nise": "1.3.3", - "supports-color": "5.4.0", - "type-detect": "4.0.6" + "@sinonjs/formatio": "^2.0.0", + "diff": "^3.1.0", + "lodash.get": "^4.4.2", + "lolex": "^2.2.0", + "nise": "^1.2.0", + "supports-color": "^5.1.0", + "type-detect": "^4.0.5" }, "dependencies": { "has-flag": { @@ -7010,7 +7002,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -7033,7 +7025,7 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "snake-case": { @@ -7041,7 +7033,7 @@ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "snapdragon": { @@ -7050,14 +7042,14 @@ "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "2.0.2" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^2.0.0" }, "dependencies": { "define-property": { @@ -7066,7 +7058,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -7075,7 +7067,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -7084,7 +7076,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -7093,7 +7085,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7104,7 +7096,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -7113,7 +7105,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7124,9 +7116,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -7149,9 +7141,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -7160,7 +7152,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } } } @@ -7171,7 +7163,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sntp": { @@ -7180,7 +7172,7 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "sort-keys": { @@ -7189,7 +7181,7 @@ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-map": { @@ -7197,7 +7189,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "source-map-resolve": { @@ -7206,11 +7198,11 @@ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "atob": "2.0.3", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -7219,8 +7211,8 @@ "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -7238,9 +7230,9 @@ "dev": true }, "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", "dev": true }, "split": { @@ -7248,7 +7240,7 @@ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -7257,7 +7249,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" }, "dependencies": { "extend-shallow": { @@ -7266,8 +7258,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -7276,7 +7268,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -7296,8 +7288,8 @@ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.0.tgz", "integrity": "sha512-6OlcAQNGaRSBLK1CuaRbKwlMFBb9DEhzmZyQP+fltNRF6XcIMpVIfXCBEcXPe1d4v9LnhkQUYkknDbA5JReqJg==", "requires": { - "nan": "2.9.2", - "node-pre-gyp": "0.9.0" + "nan": "~2.9.2", + "node-pre-gyp": "~0.9.0" }, "dependencies": { "abbrev": { @@ -7316,8 +7308,8 @@ "version": "1.1.4", "bundled": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.5" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -7328,7 +7320,7 @@ "version": "1.1.11", "bundled": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -7375,7 +7367,7 @@ "version": "1.2.5", "bundled": true, "requires": { - "minipass": "2.2.1" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -7386,26 +7378,26 @@ "version": "2.7.4", "bundled": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { "version": "7.1.2", "bundled": 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" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -7420,15 +7412,15 @@ "version": "3.0.1", "bundled": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -7443,7 +7435,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -7454,7 +7446,7 @@ "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -7465,14 +7457,14 @@ "version": "2.2.1", "bundled": true, "requires": { - "yallist": "3.0.2" + "yallist": "^3.0.0" } }, "minizlib": { "version": "1.1.0", "bundled": true, "requires": { - "minipass": "2.2.1" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -7490,33 +7482,33 @@ "version": "2.2.0", "bundled": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.19", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { "version": "0.9.0", "bundled": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.6", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.0" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { "version": "4.0.1", "bundled": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -7527,18 +7519,18 @@ "version": "1.1.10", "bundled": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { "version": "4.1.2", "bundled": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -7553,7 +7545,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -7568,8 +7560,8 @@ "version": "0.1.5", "bundled": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -7584,10 +7576,10 @@ "version": "1.2.6", "bundled": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -7600,20 +7592,20 @@ "version": "2.3.5", "bundled": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "rimraf": { "version": "2.6.2", "bundled": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -7640,23 +7632,23 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { "version": "1.0.3", "bundled": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -7667,12 +7659,12 @@ "version": "4.4.0", "bundled": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.1", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.3", + "minipass": "^2.2.1", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -7683,7 +7675,7 @@ "version": "1.1.2", "bundled": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -7707,14 +7699,14 @@ "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "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", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "stack-utils": { @@ -7735,8 +7727,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -7745,7 +7737,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -7754,7 +7746,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -7763,7 +7755,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7774,7 +7766,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -7783,7 +7775,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7794,9 +7786,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -7831,7 +7823,7 @@ "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", "dev": true, "requires": { - "any-observable": "0.2.0" + "any-observable": "^0.2.0" } }, "string-argv": { @@ -7851,8 +7843,8 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -7860,7 +7852,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringify-object": { @@ -7869,9 +7861,9 @@ "integrity": "sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg==", "dev": true, "requires": { - "get-own-enumerable-property-symbols": "2.0.1", - "is-obj": "1.0.1", - "is-regexp": "1.0.0" + "get-own-enumerable-property-symbols": "^2.0.1", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" } }, "stringstream": { @@ -7885,7 +7877,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-bom": { @@ -7922,7 +7914,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } }, "swap-case": { @@ -7930,8 +7922,8 @@ "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", "requires": { - "lower-case": "1.1.4", - "upper-case": "1.1.3" + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" } }, "symbol-observable": { @@ -7951,11 +7943,11 @@ "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.1.5.tgz", "integrity": "sha1-hVdNIs3hdp3+TMSg1pcXWxPl0xg=", "requires": { - "babel-runtime": "6.26.0", + "babel-runtime": "^6.26.0", "big-number": "0.3.1", - "bl": "1.2.1", - "iconv-lite": "0.4.19", - "readable-stream": "2.3.3", + "bl": "^1.2.0", + "iconv-lite": "^0.4.11", + "readable-stream": "^2.2.6", "sprintf": "0.1.5" } }, @@ -7965,7 +7957,7 @@ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "execa": "0.7.0" + "execa": "^0.7.0" } }, "text-encoding": { @@ -7979,7 +7971,7 @@ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", "requires": { - "any-promise": "1.3.0" + "any-promise": "^1.0.0" } }, "thenify-all": { @@ -7987,7 +7979,7 @@ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", "requires": { - "thenify": "3.3.0" + "thenify": ">= 3.1.0 < 4" } }, "throat": { @@ -8007,8 +7999,8 @@ "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", "dev": true, "requires": { - "readable-stream": "2.0.6", - "xtend": "4.0.1" + "readable-stream": "~2.0.0", + "xtend": "~4.0.0" }, "dependencies": { "readable-stream": { @@ -8017,12 +8009,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "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" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -8039,8 +8031,8 @@ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", "dev": true, "requires": { - "through2": "2.0.1", - "xtend": "4.0.1" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, "tildify": { @@ -8049,7 +8041,7 @@ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" } }, "time-stamp": { @@ -8070,8 +8062,8 @@ "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==", "dev": true, "requires": { - "es5-ext": "0.10.41", - "next-tick": "1.0.0" + "es5-ext": "~0.10.14", + "next-tick": "1" } }, "title-case": { @@ -8079,8 +8071,8 @@ "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.0.3" } }, "to-absolute-glob": { @@ -8089,8 +8081,8 @@ "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", "dev": true, "requires": { - "is-absolute": "1.0.0", - "is-negated-glob": "1.0.0" + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" }, "dependencies": { "is-absolute": { @@ -8099,8 +8091,8 @@ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "1.0.0", - "is-windows": "1.0.2" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-relative": { @@ -8109,7 +8101,7 @@ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "is-unc-path": "1.0.0" + "is-unc-path": "^1.0.0" } }, "is-unc-path": { @@ -8118,7 +8110,7 @@ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.2" } }, "is-windows": { @@ -8135,7 +8127,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -8144,9 +8136,9 @@ "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", "dev": true, "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.2" + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "regex-not": "^1.0.0" }, "dependencies": { "define-property": { @@ -8155,7 +8147,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8164,7 +8156,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -8173,7 +8165,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8182,7 +8174,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8193,7 +8185,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8202,7 +8194,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8213,9 +8205,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -8232,8 +8224,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { @@ -8242,7 +8234,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } } } @@ -8253,7 +8245,7 @@ "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", "dev": true, "requires": { - "through2": "2.0.3" + "through2": "^2.0.3" }, "dependencies": { "through2": { @@ -8262,8 +8254,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } } } @@ -8274,7 +8266,7 @@ "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", "dev": true, "requires": { - "nopt": "1.0.10" + "nopt": "~1.0.10" }, "dependencies": { "nopt": { @@ -8283,7 +8275,7 @@ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } } } @@ -8294,7 +8286,7 @@ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tr46": { @@ -8303,7 +8295,7 @@ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, "requires": { - "punycode": "2.1.0" + "punycode": "^2.1.0" }, "dependencies": { "punycode": { @@ -8320,7 +8312,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -8336,7 +8328,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { @@ -8356,19 +8348,19 @@ "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.4.tgz", "integrity": "sha512-TLoLZaPCDZt4UAYxcdNO7Ta68+EkG0CwwuaWdxgs11cWHRTs4njFyKzW+cvgGQ2TlJX53adyb3tqbGAR19TBmg==", "requires": { - "app-root-path": "2.0.1", - "buffer": "5.1.0", - "chalk": "2.4.1", - "cli-highlight": "1.2.3", - "debug": "3.1.0", - "dotenv": "5.0.1", - "glob": "7.1.2", - "js-yaml": "3.11.0", - "mkdirp": "0.5.1", - "reflect-metadata": "0.1.12", - "xml2js": "0.4.19", - "yargonaut": "1.1.2", - "yargs": "11.1.0" + "app-root-path": "^2.0.1", + "buffer": "^5.1.0", + "chalk": "^2.3.2", + "cli-highlight": "^1.2.3", + "debug": "^3.1.0", + "dotenv": "^5.0.1", + "glob": "^7.1.2", + "js-yaml": "^3.11.0", + "mkdirp": "^0.5.1", + "reflect-metadata": "^0.1.12", + "xml2js": "^0.4.17", + "yargonaut": "^1.1.2", + "yargs": "^11.1.0" }, "dependencies": { "ansi-styles": { @@ -8376,7 +8368,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -8384,9 +8376,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -8407,8 +8399,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "supports-color": { @@ -8416,7 +8408,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -8432,21 +8424,21 @@ "integrity": "sha1-usxp0lWXCkeOCfdsf2iZddU1p4o=", "dev": true, "requires": { - "archy": "1.0.0", - "bluebird": "3.5.1", - "chalk": "1.1.3", - "cli-truncate": "1.1.0", - "columnify": "1.5.4", - "elegant-spinner": "1.0.1", - "has-unicode": "2.0.1", - "listify": "1.0.0", - "log-update": "1.0.2", - "minimist": "1.2.0", - "promise-finally": "3.0.0", - "typings-core": "2.3.3", - "update-notifier": "2.3.0", - "wordwrap": "1.0.0", - "xtend": "4.0.1" + "archy": "^1.0.0", + "bluebird": "^3.1.1", + "chalk": "^1.0.0", + "cli-truncate": "^1.0.0", + "columnify": "^1.5.2", + "elegant-spinner": "^1.0.1", + "has-unicode": "^2.0.1", + "listify": "^1.0.0", + "log-update": "^1.0.2", + "minimist": "^1.2.0", + "promise-finally": "^3.0.0", + "typings-core": "^2.3.3", + "update-notifier": "^2.0.0", + "wordwrap": "^1.0.0", + "xtend": "^4.0.1" }, "dependencies": { "ansi-regex": { @@ -8467,11 +8459,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "minimist": { @@ -8486,7 +8478,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -8509,38 +8501,38 @@ "integrity": "sha1-CexUzVsR3V8e8vwKsx03ACyita0=", "dev": true, "requires": { - "array-uniq": "1.0.3", - "configstore": "3.1.1", - "debug": "2.6.9", - "detect-indent": "5.0.0", - "graceful-fs": "4.1.11", - "has": "1.0.1", - "invariant": "2.2.2", - "is-absolute": "0.2.6", - "jspm-config": "0.3.4", - "listify": "1.0.0", - "lockfile": "1.0.3", - "make-error-cause": "1.2.2", - "mkdirp": "0.5.1", - "object.pick": "1.3.0", - "parse-json": "2.2.0", - "popsicle": "9.2.0", - "popsicle-proxy-agent": "3.0.0", - "popsicle-retry": "3.2.1", - "popsicle-rewrite": "1.0.0", - "popsicle-status": "2.0.1", - "promise-finally": "3.0.0", - "rc": "1.2.3", - "rimraf": "2.6.2", - "sort-keys": "1.1.2", - "string-template": "1.0.0", - "strip-bom": "3.0.0", - "thenify": "3.3.0", - "throat": "3.2.0", - "touch": "1.0.0", - "typescript": "2.8.3", - "xtend": "4.0.1", - "zip-object": "0.1.0" + "array-uniq": "^1.0.2", + "configstore": "^3.0.0", + "debug": "^2.2.0", + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "has": "^1.0.1", + "invariant": "^2.2.0", + "is-absolute": "^0.2.3", + "jspm-config": "^0.3.0", + "listify": "^1.0.0", + "lockfile": "^1.0.1", + "make-error-cause": "^1.2.1", + "mkdirp": "^0.5.1", + "object.pick": "^1.1.1", + "parse-json": "^2.2.0", + "popsicle": "^9.0.0", + "popsicle-proxy-agent": "^3.0.0", + "popsicle-retry": "^3.2.0", + "popsicle-rewrite": "^1.0.0", + "popsicle-status": "^2.0.0", + "promise-finally": "^3.0.0", + "rc": "^1.1.5", + "rimraf": "^2.4.4", + "sort-keys": "^1.0.0", + "string-template": "^1.0.0", + "strip-bom": "^3.0.0", + "thenify": "^3.1.0", + "throat": "^3.0.0", + "touch": "^1.0.0", + "typescript": "^2.1.4", + "xtend": "^4.0.0", + "zip-object": "^0.1.0" } }, "uglify-js": { @@ -8549,9 +8541,9 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -8566,9 +8558,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -8592,10 +8584,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "arr-union": { @@ -8610,7 +8602,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -8619,10 +8611,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -8639,7 +8631,7 @@ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "requires": { - "crypto-random-string": "1.0.0" + "crypto-random-string": "^1.0.0" } }, "universalify": { @@ -8654,8 +8646,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -8664,9 +8656,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -8700,15 +8692,15 @@ "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", "dev": true, "requires": { - "boxen": "1.3.0", - "chalk": "2.3.0", - "configstore": "3.1.1", - "import-lazy": "2.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "upper-case": { @@ -8721,7 +8713,7 @@ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", "requires": { - "upper-case": "1.1.3" + "upper-case": "^1.1.1" } }, "urix": { @@ -8736,7 +8728,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "urlgrey": { @@ -8751,9 +8743,9 @@ "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", "dev": true, "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2" }, "dependencies": { "define-property": { @@ -8762,7 +8754,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -8771,7 +8763,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8780,7 +8772,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8791,7 +8783,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8800,7 +8792,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8811,9 +8803,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -8828,7 +8820,7 @@ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", "dev": true, "requires": { - "set-getter": "0.1.0" + "set-getter": "^0.1.0" } } } @@ -8856,7 +8848,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "value-or-function": { @@ -8871,9 +8863,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "vinyl": { @@ -8882,8 +8874,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } }, @@ -8893,14 +8885,14 @@ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" + "defaults": "^1.0.0", + "glob-stream": "^3.1.5", + "glob-watcher": "^0.0.6", + "graceful-fs": "^3.0.0", + "mkdirp": "^0.5.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" }, "dependencies": { "clone": { @@ -8915,7 +8907,7 @@ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "dev": true, "requires": { - "natives": "1.1.2" + "natives": "^1.1.0" } }, "isarray": { @@ -8930,10 +8922,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -8948,8 +8940,8 @@ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" + "first-chunk-stream": "^1.0.0", + "is-utf8": "^0.2.0" } }, "through2": { @@ -8958,8 +8950,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -8968,8 +8960,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -8980,13 +8972,13 @@ "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", "dev": true, "requires": { - "append-buffer": "1.0.2", - "convert-source-map": "1.5.1", - "graceful-fs": "4.1.11", - "normalize-path": "2.1.1", - "now-and-later": "2.0.0", - "remove-bom-buffer": "3.0.0", - "vinyl": "2.1.0" + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" }, "dependencies": { "clone": { @@ -9007,7 +8999,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "replace-ext": { @@ -9022,12 +9014,12 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } @@ -9038,7 +9030,7 @@ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.1" }, "dependencies": { "source-map": { @@ -9055,7 +9047,7 @@ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", "dev": true, "requires": { - "browser-process-hrtime": "0.1.2" + "browser-process-hrtime": "^0.1.2" } }, "wcwidth": { @@ -9064,7 +9056,7 @@ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "requires": { - "defaults": "1.0.3" + "defaults": "^1.0.3" } }, "webidl-conversions": { @@ -9094,9 +9086,9 @@ "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", "dev": true, "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, "which": { @@ -9104,7 +9096,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -9118,7 +9110,7 @@ "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.1.1" } }, "window-size": { @@ -9137,8 +9129,8 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -9151,7 +9143,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -9159,9 +9151,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -9169,7 +9161,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -9185,9 +9177,9 @@ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "ws": { @@ -9196,8 +9188,8 @@ "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "dev": true, "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" } }, "xdg-basedir": { @@ -9217,8 +9209,8 @@ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.7" + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" } }, "xmlbuilder": { @@ -9246,9 +9238,9 @@ "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.2.tgz", "integrity": "sha1-7nuJ6YEho/JB+pJqKm4bZkHIGz8=", "requires": { - "chalk": "1.1.3", - "figlet": "1.2.0", - "parent-require": "1.0.0" + "chalk": "^1.1.1", + "figlet": "^1.1.1", + "parent-require": "^1.0.0" }, "dependencies": { "ansi-regex": { @@ -9266,11 +9258,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -9278,7 +9270,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -9293,18 +9285,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^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": "^9.0.2" }, "dependencies": { "cliui": { @@ -9312,9 +9304,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } } } @@ -9324,7 +9316,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { diff --git a/package.json b/package.json index e793d40..bd392fe 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "handlebars": "^4.0.11", "mssql": "^4.0.4", "mysql": "^2.15.0", - "oracledb": "^2.2.0", "pg": "^7.4.0", "reflect-metadata": "^0.1.10", "typeorm": "^0.2.4", From 0530e1357bfda9d6cf0c5f2d97f70c407210b32b Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 14 Jun 2018 20:17:06 +0200 Subject: [PATCH 007/130] formatting --- src/drivers/AbstractDriver.ts | 34 +++++++++++++++++++++++++--------- src/drivers/MssqlDriver.ts | 4 +++- src/drivers/MysqlDriver.ts | 4 +++- src/drivers/OracleDriver.ts | 4 +++- src/drivers/PostgresDriver.ts | 4 +++- src/drivers/SqliteDriver.ts | 26 ++++++++++++-------------- 6 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index d0093ad..c0b3402 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -99,21 +99,31 @@ export abstract class AbstractDriver { }); let column1 = new ColumnInfo(); - column1.tsName = this.namingStrategy.entityName(namesOfRelatedTables[1]); + column1.tsName = this.namingStrategy.entityName( + namesOfRelatedTables[1] + ); let col1Rel = new RelationInfo(); col1Rel.relatedTable = namesOfRelatedTables[1]; - col1Rel.relatedColumn = this.namingStrategy.entityName(namesOfRelatedTables[1]); + col1Rel.relatedColumn = this.namingStrategy.entityName( + namesOfRelatedTables[1] + ); col1Rel.relationType = "ManyToMany"; col1Rel.isOwner = true; - col1Rel.ownerColumn = this.namingStrategy.entityName(namesOfRelatedTables[0]); + col1Rel.ownerColumn = this.namingStrategy.entityName( + namesOfRelatedTables[0] + ); column1.relations.push(col1Rel); relatedTable1.Columns.push(column1); let column2 = new ColumnInfo(); - column2.tsName = this.namingStrategy.entityName(namesOfRelatedTables[0]); + column2.tsName = this.namingStrategy.entityName( + namesOfRelatedTables[0] + ); let col2Rel = new RelationInfo(); col2Rel.relatedTable = namesOfRelatedTables[0]; - col2Rel.relatedColumn = this.namingStrategy.entityName(namesOfRelatedTables[1]); + col2Rel.relatedColumn = this.namingStrategy.entityName( + namesOfRelatedTables[1] + ); col2Rel.relationType = "ManyToMany"; col2Rel.isOwner = false; column2.relations.push(col2Rel); @@ -129,7 +139,7 @@ export abstract class AbstractDriver { password: string, schema: string, ssl: boolean, - namingStrategy:NamingStrategy + namingStrategy: NamingStrategy ): Promise { let dbModel = {}; this.namingStrategy = namingStrategy; @@ -267,10 +277,14 @@ export abstract class AbstractDriver { ownerRelation.relatedTable = relationTmp.referencedTable; ownerRelation.ownerTable = relationTmp.ownerTable; ownerRelation.relationType = isOneToMany - ? "ManyToOne" + ? "ManyToOne" : "OneToOne"; - let columnName = this.namingStrategy.relationName(ownerEntity,referencedEntity,isOneToMany); + let columnName = this.namingStrategy.relationName( + ownerEntity, + referencedEntity, + isOneToMany + ); ownerRelation.ownerColumn = columnName; ownerColumn.relations.push(ownerRelation); if (isOneToMany) { @@ -329,7 +343,9 @@ export abstract class AbstractDriver { entity.Columns.forEach(col => { if ( primaryIndex && - primaryIndex.columns.some(cIndex => cIndex.name == col.tsName) + primaryIndex.columns.some( + cIndex => cIndex.name == col.tsName + ) ) col.isPrimary = true; }); diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index b27052f..cf5517c 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -53,7 +53,9 @@ export class MssqlDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName(resp.COLUMN_NAME); + colInfo.tsName = this.namingStrategy.entityName( + resp.COLUMN_NAME + ); colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.IS_NULLABLE == "YES"; colInfo.is_generated = resp.IsIdentity == 1; diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 75cac77..f9cf700 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -45,7 +45,9 @@ export class MysqlDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName(resp.COLUMN_NAME); + colInfo.tsName = this.namingStrategy.entityName( + resp.COLUMN_NAME + ); colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.IS_NULLABLE == "YES"; colInfo.is_generated = resp.IsIdentity == 1; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index bf79fa5..a70456e 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -55,7 +55,9 @@ export class OracleDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName(resp.COLUMN_NAME); + colInfo.tsName = this.namingStrategy.entityName( + resp.COLUMN_NAME + ); colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.NULLABLE == "Y"; colInfo.is_generated = resp.IDENTITY_COLUMN == "YES"; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index aa449f8..ed7879e 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -54,7 +54,9 @@ export class PostgresDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName(resp.column_name); + colInfo.tsName = this.namingStrategy.entityName( + resp.column_name + ); colInfo.sqlName = resp.column_name; colInfo.is_nullable = resp.is_nullable == "YES"; colInfo.is_generated = resp.isidentity == "YES"; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 3409577..6f3b418 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -153,16 +153,12 @@ export class SqliteDriver extends AbstractDriver { ) && options ) { - colInfo.numericPrecision = ( - options[0] - .substring(1, options[0].length - 1) - .split(",")[0] - ); - colInfo.numericScale = ( - options[0] - .substring(1, options[0].length - 1) - .split(",")[1] - ); + colInfo.numericPrecision = options[0] + .substring(1, options[0].length - 1) + .split(",")[0]; + colInfo.numericScale = options[0] + .substring(1, options[0].length - 1) + .split(",")[1]; } if ( this.ColumnTypesWithLength.some( @@ -170,8 +166,9 @@ export class SqliteDriver extends AbstractDriver { ) && options ) { - colInfo.lenght = ( - options[0].substring(1, options[0].length - 1) + colInfo.lenght = options[0].substring( + 1, + options[0].length - 1 ); } if ( @@ -182,8 +179,9 @@ export class SqliteDriver extends AbstractDriver { ) && options ) { - colInfo.width = ( - options[0].substring(1, options[0].length - 1) + colInfo.width = options[0].substring( + 1, + options[0].length - 1 ); } From 893162b881d3fcac4a09d5cb6d66c433e68f6e9f Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 16 Jun 2018 11:40:04 +0200 Subject: [PATCH 008/130] generating constructor fixed --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 5a62514..b7fae4d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -149,7 +149,7 @@ let engine = new Engine(driver, { convertCaseEntity: argv.ce, convertCaseProperty: argv.cp, lazy: argv.lazy, - constructor: argv.constructor, + constructor: argv.generateConstructor, namingStrategy: namingStrategy }); From 6b3c0bf9de467cb06d0aadac38ae0ce4f1a3f1e4 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 02:34:45 +0200 Subject: [PATCH 009/130] naming strategy --- src/DefaultNamingStrategy.ts | 73 +++++--- src/NamingStrategy.ts | 5 +- src/drivers/AbstractDriver.ts | 172 +++++++++++++++--- src/drivers/MssqlDriver.ts | 10 +- src/drivers/MysqlDriver.ts | 10 +- src/drivers/OracleDriver.ts | 10 +- src/drivers/PostgresDriver.ts | 10 +- src/drivers/SqliteDriver.ts | 8 +- src/entity.mst | 4 +- .../entity/Category.ts | 4 +- .../sample18-lazy-relations/entity/Post.ts | 4 +- .../sample4-many-to-many/entity/Post.ts | 24 +-- .../sample4-many-to-many/entity/PostAuthor.ts | 4 +- .../entity/{PostDetails.ts => PostDetail.ts} | 8 +- .../sample4-many-to-many/entity/PostImage.ts | 4 +- .../entity/PostInformation.ts | 4 +- .../entity/PostMetadata.ts | 4 +- .../entity/Post.ts | 4 +- .../entity/PostAuthor.ts | 4 +- .../github-issues/58/entity/feedextrainfo.ts | 28 +-- .../github-issues/58/entity/quests.ts | 10 +- .../github-issues/58/entity/users.ts | 16 +- 22 files changed, 276 insertions(+), 144 deletions(-) rename test/integration/examples/sample4-many-to-many/entity/{PostDetails.ts => PostDetail.ts} (72%) diff --git a/src/DefaultNamingStrategy.ts b/src/DefaultNamingStrategy.ts index 40f95cd..b505c58 100644 --- a/src/DefaultNamingStrategy.ts +++ b/src/DefaultNamingStrategy.ts @@ -1,39 +1,58 @@ import { NamingStrategy } from "./NamingStrategy"; -import { EntityInfo } from "./models/EntityInfo"; +import { RelationInfo } from "./models/RelationInfo"; +import { DatabaseModel } from "./models/DatabaseModel"; export class DefaultNamingStrategy extends NamingStrategy { relationName( - ownerEntity: EntityInfo, - referencedEntity: EntityInfo, - isOneToMany: boolean + columnOldName:string, + relation: RelationInfo, + dbModel:DatabaseModel ): string { - let columnName = ownerEntity.EntityName.toLowerCase(); - if (columnName.endsWith("Id")) { - columnName = columnName.substring(0, columnName.lastIndexOf("Id")); + let isRelationToMany = relation.isOneToMany || relation.isManyToMany + let ownerEntity = dbModel.entities.filter(v => { + return v.EntityName==relation.ownerTable + })[0] + let referencedEntity = dbModel.entities.filter(v => { + return v.EntityName == relation.relatedTable + })[0] + + + + let columnName = columnOldName[0].toLowerCase()+ columnOldName.substring(1,columnOldName.length); + if ( columnName.endsWith("id")) { + columnName = columnName.substring(0, columnName.lastIndexOf("id")); } - columnName += isOneToMany ? "s" : ""; - if ( - referencedEntity.Columns.filter(filterVal => { - return filterVal.tsName == columnName; - }).length > 0 - ) { - for (let i = 2; i <= ownerEntity.Columns.length; i++) { - columnName = ownerEntity.EntityName.toLowerCase(); - if (columnName.endsWith("Id")) { - columnName = columnName.substring( - 0, - columnName.lastIndexOf("Id") - ); + if (!isNaN(parseInt(columnName[columnName.length-1]))) { + let num = columnName[columnName.length-1] + columnName = columnName.substring(0, columnName.length - 1) + columnName += (isRelationToMany ? "s" : "")+num.toString(); + } else { + columnName += isRelationToMany ? "s" : ""; + } + + if (relation.relationType!="ManyToMany") { + + if (columnOldName!=columnName) { + if (!relation.isOwner) { + if (ownerEntity.Columns.some(v => v.tsName == columnName)) { + columnName = columnName + "_" + for (let i = 2; i <= ownerEntity.Columns.length; i++) { + columnName = columnName.substring(0, columnName.length - 1) + i.toString(); + if (ownerEntity.Columns.every(v => v.tsName != columnName)) break; + } + } + } else { + if (referencedEntity.Columns.some(v => v.tsName == columnName)) { + columnName = columnName + "_" + for (let i = 2; i <= referencedEntity.Columns.length; i++) { + columnName = columnName.substring(0, columnName.length - 1) + i.toString(); + if (referencedEntity.Columns.every(v => v.tsName != columnName)) break; + } } - columnName += (isOneToMany ? "s" : "") + i.toString(); - if ( - referencedEntity.Columns.filter(filterVal => { - return filterVal.tsName == columnName; - }).length == 0 - ) - break; } } + } + return columnName; } diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index 4f79f33..1af86d8 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -1,7 +1,8 @@ -import { EntityInfo } from "./models/EntityInfo"; +import { RelationInfo } from "./models/RelationInfo"; +import { DatabaseModel } from "./models/DatabaseModel"; export abstract class NamingStrategy { - abstract relationName(ownerEntity: EntityInfo, referencedEntity: EntityInfo, isOneToMany: boolean): string; + abstract relationName(columnName: string, relation: RelationInfo, dbModel: DatabaseModel): string; abstract entityName(entityName: string): string; diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index c0b3402..29b22b0 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -1,16 +1,120 @@ -import { EntityInfo } from "./../models/EntityInfo"; -import { DatabaseModel } from "./../models/DatabaseModel"; -import * as TomgUtils from "./../Utils"; +import { EntityInfo } from "../models/EntityInfo"; +import { DatabaseModel } from "../models/DatabaseModel"; +import * as TomgUtils from "../Utils"; import { RelationInfo } from "../models/RelationInfo"; import { ColumnInfo } from "../models/ColumnInfo"; import { WithWidthColumnType, WithPrecisionColumnType, WithLengthColumnType -} from "./../../node_modules/typeorm/driver/types/ColumnTypes"; +} from "typeorm/driver/types/ColumnTypes"; import { NamingStrategy } from "../NamingStrategy"; export abstract class AbstractDriver { + changeColumnNames(dbModel: DatabaseModel) { + dbModel.entities.forEach(entity => { + entity.Columns.forEach(column => { + let newName = this.namingStrategy.columnName(column.tsName); + entity.Indexes.forEach(index => { + index.columns + .filter(column2 => { + return column2.name == column.tsName; + }) + .forEach(column2 => { + column2.name = newName; + }); + }); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column2 => { + column2.relations + .filter(relation => { + return ( + relation.relatedTable == + entity.EntityName && + relation.relatedColumn == column.tsName + ); + }) + .map(v => { + v.relatedColumn = newName; + }); + column2.relations + .filter(relation => { + return ( + relation.ownerTable == entity.EntityName && + relation.ownerColumn == column.tsName + ); + }) + .map(v => { + v.ownerColumn = newName; + }); + }); + }); + + column.tsName = newName; + }); + }); + } + changeEntityNames(dbModel: DatabaseModel) { + dbModel.entities.forEach(entity => { + let newName = this.namingStrategy.columnName(entity.EntityName); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column => { + column.relations.forEach(relation => { + if (relation.ownerTable == entity.EntityName) + relation.ownerTable = newName; + if (relation.relatedTable == entity.EntityName) + relation.relatedTable = newName; + }); + }); + }); + entity.EntityName = newName; + }); + } + changeRelationNames(dbModel: DatabaseModel) { + dbModel.entities.forEach(entity => { + entity.Columns.forEach(column => { + column.relations.forEach(relation => { + if (true || !relation.isOwner) { + let newName = this.namingStrategy.relationName( + column.tsName, + relation, + dbModel + ); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column2 => { + column2.relations.forEach(relation2 => { + if ( + relation2.relatedTable == + entity.EntityName && + relation2.ownerColumn == column.tsName + ) { + relation2.ownerColumn = newName; + } + if ( + relation2.relatedTable == + entity.EntityName && + relation2.relatedColumn == column.tsName + ) { + relation2.relatedColumn = newName; + } + if (relation.isOwner) { + entity.Indexes.forEach(ind => { + ind.columns.forEach(col => { + if (col.name == column.tsName) { + col.name = newName; + } + }); + }); + } + }); + }); + }); + column.tsName = newName; + } + }); + }); + }); + } ColumnTypesWithWidth: WithWidthColumnType[] = [ "tinyint", "smallint", @@ -99,31 +203,26 @@ export abstract class AbstractDriver { }); let column1 = new ColumnInfo(); - column1.tsName = this.namingStrategy.entityName( - namesOfRelatedTables[1] - ); + column1.tsName = namesOfRelatedTables[1]; + let col1Rel = new RelationInfo(); col1Rel.relatedTable = namesOfRelatedTables[1]; - col1Rel.relatedColumn = this.namingStrategy.entityName( - namesOfRelatedTables[1] - ); + col1Rel.relatedColumn = namesOfRelatedTables[1]; + col1Rel.relationType = "ManyToMany"; col1Rel.isOwner = true; - col1Rel.ownerColumn = this.namingStrategy.entityName( - namesOfRelatedTables[0] - ); + col1Rel.ownerColumn = namesOfRelatedTables[0]; + column1.relations.push(col1Rel); relatedTable1.Columns.push(column1); let column2 = new ColumnInfo(); - column2.tsName = this.namingStrategy.entityName( - namesOfRelatedTables[0] - ); + column2.tsName = namesOfRelatedTables[0]; + let col2Rel = new RelationInfo(); col2Rel.relatedTable = namesOfRelatedTables[0]; - col2Rel.relatedColumn = this.namingStrategy.entityName( - namesOfRelatedTables[1] - ); + col2Rel.relatedColumn = namesOfRelatedTables[1]; + col2Rel.relationType = "ManyToMany"; col2Rel.isOwner = false; column2.relations.push(col2Rel); @@ -155,8 +254,16 @@ export abstract class AbstractDriver { await this.DisconnectFromServer(); this.FindManyToManyRelations(dbModel); this.FindPrimaryColumnsFromIndexes(dbModel); + this.ApplyNamingStrategy(dbModel); return dbModel; } + + private ApplyNamingStrategy(dbModel: DatabaseModel) { + this.changeColumnNames(dbModel); + this.changeEntityNames(dbModel); + this.changeRelationNames(dbModel); + } + abstract async ConnectToServer( database: string, server: string, @@ -280,11 +387,24 @@ export abstract class AbstractDriver { ? "ManyToOne" : "OneToOne"; - let columnName = this.namingStrategy.relationName( - ownerEntity, - referencedEntity, - isOneToMany - ); + let columnName = ownerEntity.EntityName; + if ( + referencedEntity.Columns.some(v => v.tsName == columnName) + ) { + columnName = columnName + "_"; + for (let i = 2; i <= referencedEntity.Columns.length; i++) { + columnName = + columnName.substring(0, columnName.length - 1) + + i.toString(); + if ( + referencedEntity.Columns.every( + v => v.tsName != columnName + ) + ) + break; + } + } + ownerRelation.ownerColumn = columnName; ownerColumn.relations.push(ownerRelation); if (isOneToMany) { @@ -300,7 +420,7 @@ export abstract class AbstractDriver { referencedRelation.relatedColumn = ownerColumn.tsName; referencedRelation.relatedTable = relationTmp.ownerTable; referencedRelation.ownerTable = relationTmp.referencedTable; - referencedRelation.ownerColumn = relatedColumn.tsName.toLowerCase(); + referencedRelation.ownerColumn = relatedColumn.tsName; referencedRelation.relationType = "OneToMany"; referencedEntity.Columns.push(col); } else { @@ -316,7 +436,7 @@ export abstract class AbstractDriver { referencedRelation.relatedColumn = ownerColumn.tsName; referencedRelation.relatedTable = relationTmp.ownerTable; referencedRelation.ownerTable = relationTmp.referencedTable; - referencedRelation.ownerColumn = relatedColumn.tsName.toLowerCase(); + referencedRelation.ownerColumn = relatedColumn.tsName; referencedRelation.relationType = "OneToOne"; referencedEntity.Columns.push(col); } diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index cf5517c..ac64a13 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -1,8 +1,8 @@ import { AbstractDriver } from "./AbstractDriver"; import * as MSSQL from "mssql"; -import { ColumnInfo } from "./../models/ColumnInfo"; -import { EntityInfo } from "./../models/EntityInfo"; -import * as TomgUtils from "./../Utils"; +import { ColumnInfo } from "../models/ColumnInfo"; +import { EntityInfo } from "../models/EntityInfo"; +import * as TomgUtils from "../Utils"; export class MssqlDriver extends AbstractDriver { GetAllTablesQuery = async (schema: string) => { @@ -53,9 +53,7 @@ export class MssqlDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName( - resp.COLUMN_NAME - ); + colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.IS_NULLABLE == "YES"; colInfo.is_generated = resp.IsIdentity == 1; diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index f9cf700..b4ffe98 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -1,8 +1,8 @@ import { AbstractDriver } from "./AbstractDriver"; import * as MYSQL from "mysql"; -import { ColumnInfo } from "./../models/ColumnInfo"; -import { EntityInfo } from "./../models/EntityInfo"; -import * as TomgUtils from "./../Utils"; +import { ColumnInfo } from "../models/ColumnInfo"; +import { EntityInfo } from "../models/EntityInfo"; +import * as TomgUtils from "../Utils"; export class MysqlDriver extends AbstractDriver { readonly EngineName: string = "MySQL"; @@ -45,9 +45,7 @@ export class MysqlDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName( - resp.COLUMN_NAME - ); + colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.IS_NULLABLE == "YES"; colInfo.is_generated = resp.IsIdentity == 1; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index a70456e..2b9b5d3 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -1,7 +1,7 @@ import { AbstractDriver } from "./AbstractDriver"; -import { ColumnInfo } from "./../models/ColumnInfo"; -import { EntityInfo } from "./../models/EntityInfo"; -import * as TomgUtils from "./../Utils"; +import { ColumnInfo } from "../models/ColumnInfo"; +import { EntityInfo } from "../models/EntityInfo"; +import * as TomgUtils from "../Utils"; export class OracleDriver extends AbstractDriver { Oracle: any; @@ -55,9 +55,7 @@ export class OracleDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName( - resp.COLUMN_NAME - ); + colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; colInfo.is_nullable = resp.NULLABLE == "Y"; colInfo.is_generated = resp.IDENTITY_COLUMN == "YES"; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index ed7879e..989322e 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -1,8 +1,8 @@ import { AbstractDriver } from "./AbstractDriver"; import * as PG from "pg"; -import { ColumnInfo } from "./../models/ColumnInfo"; -import { EntityInfo } from "./../models/EntityInfo"; -import * as TomgUtils from "./../Utils"; +import { ColumnInfo } from "../models/ColumnInfo"; +import { EntityInfo } from "../models/EntityInfo"; +import * as TomgUtils from "../Utils"; export class PostgresDriver extends AbstractDriver { private Connection: PG.Client; @@ -54,9 +54,7 @@ export class PostgresDriver extends AbstractDriver { }) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName( - resp.column_name - ); + colInfo.tsName = resp.column_name; colInfo.sqlName = resp.column_name; colInfo.is_nullable = resp.is_nullable == "YES"; colInfo.is_generated = resp.isidentity == "YES"; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 6f3b418..9768316 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -1,7 +1,7 @@ import { AbstractDriver } from "./AbstractDriver"; -import { ColumnInfo } from "./../models/ColumnInfo"; -import { EntityInfo } from "./../models/EntityInfo"; -import * as TomgUtils from "./../Utils"; +import { ColumnInfo } from "../models/ColumnInfo"; +import { EntityInfo } from "../models/EntityInfo"; +import * as TomgUtils from "../Utils"; export class SqliteDriver extends AbstractDriver { sqlite = require("sqlite3").verbose(); @@ -41,7 +41,7 @@ export class SqliteDriver extends AbstractDriver { }>(`PRAGMA table_info('${ent.EntityName}');`); response.forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); - colInfo.tsName = this.namingStrategy.entityName(resp.name); + colInfo.tsName = resp.name; colInfo.sqlName = resp.name; colInfo.is_nullable = resp.notnull == 0; colInfo.isPrimary = resp.pk > 0; diff --git a/src/entity.mst b/src/entity.mst index c094fea..9da5ef7 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -24,8 +24,8 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man }) {{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; {{/relations}}{{#relations}} - @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toPropertyName ../tsName}}=>{{toPropertyName ../tsName}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#actionOnDelete}},{ onDelete: '{{.}}' }{{/actionOnDelete}}{{/if}}){{#isOwner}} - {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../tsName}}'}){{/if}}{{/isOwner}} + @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#actionOnDelete}},{ onDelete: '{{.}}' }{{/actionOnDelete}}{{/if}}){{#isOwner}} + {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; {{else}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; {{/if}}{{/relations}} diff --git a/test/integration/examples/sample18-lazy-relations/entity/Category.ts b/test/integration/examples/sample18-lazy-relations/entity/Category.ts index 42ce1f2..410df9b 100644 --- a/test/integration/examples/sample18-lazy-relations/entity/Category.ts +++ b/test/integration/examples/sample18-lazy-relations/entity/Category.ts @@ -10,7 +10,7 @@ export class Category { @Column() name: string; - @ManyToMany(type => Post, post => post.Category) - Post: Promise; + @ManyToMany(type => Post, post => post.categorys) + posts: Promise; } diff --git a/test/integration/examples/sample18-lazy-relations/entity/Post.ts b/test/integration/examples/sample18-lazy-relations/entity/Post.ts index 88bfe40..6d74a76 100644 --- a/test/integration/examples/sample18-lazy-relations/entity/Post.ts +++ b/test/integration/examples/sample18-lazy-relations/entity/Post.ts @@ -21,10 +21,10 @@ export class Post { }) author: Promise; - @ManyToMany(type => Category, category => category.Post, { + @ManyToMany(type => Category, category => category.posts, { // cascade: true }) @JoinTable() - Category: Promise; + categorys: Promise; } diff --git a/test/integration/examples/sample4-many-to-many/entity/Post.ts b/test/integration/examples/sample4-many-to-many/entity/Post.ts index 0495570..83b80c0 100644 --- a/test/integration/examples/sample4-many-to-many/entity/Post.ts +++ b/test/integration/examples/sample4-many-to-many/entity/Post.ts @@ -1,5 +1,5 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable } from "typeorm"; -import {PostDetails} from "./PostDetails"; +import {PostDetail} from "./PostDetail"; import {PostCategory} from "./PostCategory"; import {PostAuthor} from "./PostAuthor"; import {PostInformation} from "./PostInformation"; @@ -23,40 +23,40 @@ export class Post { cascade: true }) @JoinTable() - PostCategory: PostCategory[]; + postCategorys: PostCategory[]; // post has relation with details. cascade inserts here means if new PostDetails instance will be set to this // relation it will be inserted automatically to the db when you save this Post entity - @ManyToMany(type => PostDetails, details => details.Post, { + @ManyToMany(type => PostDetail, details => details.posts, { cascade: true }) @JoinTable() - PostDetails: PostDetails[]; + postDetails: PostDetail[]; // post has relation with details. cascade update here means if new PostDetail instance will be set to this relation // it will be inserted automatically to the db when you save this Post entity - @ManyToMany(type => PostImage, image => image.Post, { + @ManyToMany(type => PostImage, image => image.posts, { cascade: true }) @JoinTable() - PostImage: PostImage[]; + postImages: PostImage[]; // post has relation with details. cascade update here means if new PostDetail instance will be set to this relation // it will be inserted automatically to the db when you save this Post entity - @ManyToMany(type => PostMetadata, metadata => metadata.Post) + @ManyToMany(type => PostMetadata, metadata => metadata.posts) @JoinTable() - PostMetadata: PostMetadata[]; + postMetadatas: PostMetadata[]; // post has relation with details. full cascades here - @ManyToMany(type => PostInformation, information => information.Post, { + @ManyToMany(type => PostInformation, information => information.posts, { cascade: true }) @JoinTable() - PostInformation: PostInformation[]; + postInformations: PostInformation[]; // post has relation with details. not cascades here. means cannot be persisted, updated or removed - @ManyToMany(type => PostAuthor, author => author.Post) + @ManyToMany(type => PostAuthor, author => author.posts) @JoinTable() - PostAuthor: PostAuthor[]; + postAuthors: PostAuthor[]; } diff --git a/test/integration/examples/sample4-many-to-many/entity/PostAuthor.ts b/test/integration/examples/sample4-many-to-many/entity/PostAuthor.ts index abb6d03..fcebbca 100644 --- a/test/integration/examples/sample4-many-to-many/entity/PostAuthor.ts +++ b/test/integration/examples/sample4-many-to-many/entity/PostAuthor.ts @@ -10,7 +10,7 @@ export class PostAuthor { @Column() name: string; - @ManyToMany(type => Post, post => post.PostAuthor) - Post: Post[]; + @ManyToMany(type => Post, post => post.postAuthors) + posts: Post[]; } diff --git a/test/integration/examples/sample4-many-to-many/entity/PostDetails.ts b/test/integration/examples/sample4-many-to-many/entity/PostDetail.ts similarity index 72% rename from test/integration/examples/sample4-many-to-many/entity/PostDetails.ts rename to test/integration/examples/sample4-many-to-many/entity/PostDetail.ts index 2b570d8..c5d799d 100644 --- a/test/integration/examples/sample4-many-to-many/entity/PostDetails.ts +++ b/test/integration/examples/sample4-many-to-many/entity/PostDetail.ts @@ -1,8 +1,8 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable } from "typeorm"; import {Post} from "./Post"; -@Entity("PostDetails") -export class PostDetails { +@Entity("PostDetail") +export class PostDetail { @PrimaryGeneratedColumn() id: number; @@ -16,7 +16,7 @@ export class PostDetails { @Column() metadata: string; - @ManyToMany(type => Post, post => post.PostDetails) - Post: Post[]; + @ManyToMany(type => Post, post => post.postDetails) + posts: Post[]; } diff --git a/test/integration/examples/sample4-many-to-many/entity/PostImage.ts b/test/integration/examples/sample4-many-to-many/entity/PostImage.ts index d758949..32b8af4 100644 --- a/test/integration/examples/sample4-many-to-many/entity/PostImage.ts +++ b/test/integration/examples/sample4-many-to-many/entity/PostImage.ts @@ -10,7 +10,7 @@ export class PostImage { @Column() url: string; - @ManyToMany(type => Post, post => post.PostImage) - Post: Post[]; + @ManyToMany(type => Post, post => post.postImages) + posts: Post[]; } diff --git a/test/integration/examples/sample4-many-to-many/entity/PostInformation.ts b/test/integration/examples/sample4-many-to-many/entity/PostInformation.ts index 600fea7..037eed5 100644 --- a/test/integration/examples/sample4-many-to-many/entity/PostInformation.ts +++ b/test/integration/examples/sample4-many-to-many/entity/PostInformation.ts @@ -10,7 +10,7 @@ export class PostInformation { @Column() text: string; - @ManyToMany(type => Post, post => post.PostInformation) - Post: Post[]; + @ManyToMany(type => Post, post => post.postInformations) + posts: Post[]; } diff --git a/test/integration/examples/sample4-many-to-many/entity/PostMetadata.ts b/test/integration/examples/sample4-many-to-many/entity/PostMetadata.ts index 283f2d4..9bb0f38 100644 --- a/test/integration/examples/sample4-many-to-many/entity/PostMetadata.ts +++ b/test/integration/examples/sample4-many-to-many/entity/PostMetadata.ts @@ -10,7 +10,7 @@ export class PostMetadata { @Column() description: string; - @ManyToMany(type => Post, post => post.PostMetadata) - Post: Post[]; + @ManyToMany(type => Post, post => post.postMetadatas) + posts: Post[]; } diff --git a/test/integration/examples/sample4_2-many-to-many_composite_keys/entity/Post.ts b/test/integration/examples/sample4_2-many-to-many_composite_keys/entity/Post.ts index 8f7e369..a9929bf 100644 --- a/test/integration/examples/sample4_2-many-to-many_composite_keys/entity/Post.ts +++ b/test/integration/examples/sample4_2-many-to-many_composite_keys/entity/Post.ts @@ -11,8 +11,8 @@ export class Post { type: string; // post has relation with details. not cascades here. means cannot be persisted, updated or removed - @ManyToMany(type => PostAuthor, author => author.Post) + @ManyToMany(type => PostAuthor, author => author.posts) @JoinTable() - PostAuthor: PostAuthor[]; + postAuthors: PostAuthor[]; } diff --git a/test/integration/examples/sample4_2-many-to-many_composite_keys/entity/PostAuthor.ts b/test/integration/examples/sample4_2-many-to-many_composite_keys/entity/PostAuthor.ts index b807231..99394f6 100644 --- a/test/integration/examples/sample4_2-many-to-many_composite_keys/entity/PostAuthor.ts +++ b/test/integration/examples/sample4_2-many-to-many_composite_keys/entity/PostAuthor.ts @@ -15,7 +15,7 @@ export class PostAuthor { @Column() name: string; - @ManyToMany(type => Post, post => post.PostAuthor) - Post: Post[]; + @ManyToMany(type => Post, post => post.postAuthors) + posts: Post[]; } diff --git a/test/integration/github-issues/58/entity/feedextrainfo.ts b/test/integration/github-issues/58/entity/feedextrainfo.ts index f402b83..7413759 100644 --- a/test/integration/github-issues/58/entity/feedextrainfo.ts +++ b/test/integration/github-issues/58/entity/feedextrainfo.ts @@ -4,33 +4,33 @@ import {quests} from "./quests"; @Entity("feedextrainfo") -@Index("feedExtraInfo_FeedOwnerId_idx",["FeedOwnerId",]) -@Index("feedExtraInfo_ReaderId_idx",["ReaderId",]) -@Index("feedExtraInfo_QuestId_idx",["QuestId",]) +@Index("feedExtraInfo_FeedOwnerId_idx",["feedOwnerId",]) +@Index("feedExtraInfo_ReaderId_idx",["readerId",]) +@Index("feedExtraInfo_QuestId_idx",["questId",]) export class feedextrainfo { - + @OneToOne(type=>users, FeedOwnerId=>FeedOwnerId.feedextrainfo,{primary:true, nullable:false, }) @JoinColumn({ name:'FeedOwnerId'}) - FeedOwnerId:users; - + feedOwnerId:users; + + - @OneToOne(type=>quests, QuestId=>QuestId.feedextrainfo,{primary:true, nullable:false, }) @JoinColumn({ name:'QuestId'}) - QuestId:quests; - + questId:quests; + + - @OneToOne(type=>users, ReaderId=>ReaderId.feedextrainfo2,{primary:true, nullable:false, }) @JoinColumn({ name:'ReaderId'}) - ReaderId:users; - + readerId:users; - @Column("int",{ + + @Column("int",{ nullable:false, name:"MostUpdatedFeedEntryIdUserRead" }) MostUpdatedFeedEntryIdUserRead:number; - + } diff --git a/test/integration/github-issues/58/entity/quests.ts b/test/integration/github-issues/58/entity/quests.ts index f24de9d..acdc56d 100644 --- a/test/integration/github-issues/58/entity/quests.ts +++ b/test/integration/github-issues/58/entity/quests.ts @@ -5,16 +5,16 @@ import {feedextrainfo} from "./feedextrainfo"; @Entity("quests") export class quests { - @Column("int",{ + @Column("int",{ nullable:false, primary:true, name:"QuestId" }) QuestId:number; - - - @OneToOne(type=>feedextrainfo, feedextrainfo=>feedextrainfo.QuestId) + + + @OneToOne(type=>feedextrainfo, feedextrainfo=>feedextrainfo.questId) feedextrainfo:feedextrainfo; - + } diff --git a/test/integration/github-issues/58/entity/users.ts b/test/integration/github-issues/58/entity/users.ts index 88da779..754e1e1 100644 --- a/test/integration/github-issues/58/entity/users.ts +++ b/test/integration/github-issues/58/entity/users.ts @@ -5,21 +5,21 @@ import {feedextrainfo} from "./feedextrainfo"; @Entity("users") export class users { - @Column("int",{ + @Column("int",{ nullable:false, primary:true, name:"UserId" }) UserId:number; - - - @OneToOne(type=>feedextrainfo, feedextrainfo=>feedextrainfo.FeedOwnerId) + + + @OneToOne(type=>feedextrainfo, feedextrainfo=>feedextrainfo.feedOwnerId) feedextrainfo:feedextrainfo; - - - @OneToOne(type=>feedextrainfo, feedextrainfo2=>feedextrainfo2.ReaderId) + + + @OneToOne(type=>feedextrainfo, feedextrainfo2=>feedextrainfo2.readerId) feedextrainfo2:feedextrainfo; - + } From dfd2c763a8c1e82b5176653b5c743b48f06bb2eb Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 02:35:10 +0200 Subject: [PATCH 010/130] polishing imports --- test/drivers/MssqlDriver.test.ts | 8 ++++---- test/integration/entityTypes.test.ts | 2 +- test/integration/githubIssues.test.ts | 2 +- test/integration/integration.test.ts | 2 +- test/utils/GeneralTestUtils.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 898faa6..4797886 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -1,10 +1,10 @@ import { expect } from "chai"; -import { MssqlDriver } from './../../src/drivers/MssqlDriver' +import { MssqlDriver } from '../../src/drivers/MssqlDriver' import * as Sinon from 'sinon' import * as MSSQL from 'mssql' -import { EntityInfo } from './../../src/models/EntityInfo' -import { ColumnInfo } from './../../src/models/ColumnInfo' -import { RelationInfo } from './../../src/models/RelationInfo' +import { EntityInfo } from '../../src/models/EntityInfo' +import { ColumnInfo } from '../../src/models/ColumnInfo' +import { RelationInfo } from '../../src/models/RelationInfo' import { Table, IColumnMetadata } from "mssql"; import { DefaultNamingStrategy } from "../../src/DefaultNamingStrategy"; diff --git a/test/integration/entityTypes.test.ts b/test/integration/entityTypes.test.ts index a4ffab0..10e570f 100644 --- a/test/integration/entityTypes.test.ts +++ b/test/integration/entityTypes.test.ts @@ -8,7 +8,7 @@ var chai = require('chai'); var chaiSubset = require('chai-subset'); import * as ts from "typescript"; import * as GTU from "../utils/GeneralTestUtils" -import { Engine } from "./../../src/Engine"; +import { Engine } from "../../src/Engine"; chai.use(chaiSubset); diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index 02edcc0..7a9a4c8 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -3,7 +3,7 @@ import "reflect-metadata"; import { createConnection, ConnectionOptions, Connection } from "typeorm"; import fs = require('fs-extra'); import path = require('path') -import { Engine } from "./../../src/Engine"; +import { Engine } from "../../src/Engine"; import { expect } from "chai"; import * as Sinon from 'sinon' import { EntityFileToJson } from "../utils/EntityFileToJson"; diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index 1900d8e..d75bb1a 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -2,7 +2,7 @@ require('dotenv').config() import "reflect-metadata"; import fs = require('fs-extra'); import path = require('path') -import { Engine } from "./../../src/Engine"; +import { Engine } from "../../src/Engine"; import { expect } from "chai"; import { EntityFileToJson } from "../utils/EntityFileToJson"; var chai = require('chai'); diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index 137bc50..7c68ccf 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -1,7 +1,7 @@ import * as ts from "typescript"; import { AbstractDriver } from "../../src/drivers/AbstractDriver"; import { MssqlDriver } from "../../src/drivers/MssqlDriver"; -import { PostgresDriver } from "./../../src/drivers/PostgresDriver"; +import { PostgresDriver } from "../../src/drivers/PostgresDriver"; import { MysqlDriver } from "../../src/drivers/MysqlDriver"; import { MariaDbDriver } from "../../src/drivers/MariaDbDriver"; import { OracleDriver } from "../../src/drivers/OracleDriver"; From 8bb80c13a62957b0d053c1b59ad91c3810d5e2e1 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 11:01:47 +0200 Subject: [PATCH 011/130] parameter for custom naming strategy --- src/AbstractNamingStrategy.ts | 10 +++++ src/DefaultNamingStrategy.ts | 66 -------------------------------- src/Engine.ts | 6 +-- src/NamingStrategy.ts | 64 +++++++++++++++++++++++++++++-- src/drivers/AbstractDriver.ts | 6 +-- src/index.ts | 17 ++++++-- test/drivers/MssqlDriver.test.ts | 4 +- test/utils/GeneralTestUtils.ts | 14 +++---- 8 files changed, 99 insertions(+), 88 deletions(-) create mode 100644 src/AbstractNamingStrategy.ts delete mode 100644 src/DefaultNamingStrategy.ts diff --git a/src/AbstractNamingStrategy.ts b/src/AbstractNamingStrategy.ts new file mode 100644 index 0000000..ad4585b --- /dev/null +++ b/src/AbstractNamingStrategy.ts @@ -0,0 +1,10 @@ +import { RelationInfo } from "./models/RelationInfo"; +import { DatabaseModel } from "./models/DatabaseModel"; + +export abstract class AbstractNamingStrategy { + abstract relationName(columnName: string, relation: RelationInfo, dbModel: DatabaseModel): string; + + abstract entityName(entityName: string): string; + + abstract columnName(columnName: string): string; +} diff --git a/src/DefaultNamingStrategy.ts b/src/DefaultNamingStrategy.ts deleted file mode 100644 index b505c58..0000000 --- a/src/DefaultNamingStrategy.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { NamingStrategy } from "./NamingStrategy"; -import { RelationInfo } from "./models/RelationInfo"; -import { DatabaseModel } from "./models/DatabaseModel"; - -export class DefaultNamingStrategy extends NamingStrategy { - relationName( - columnOldName:string, - relation: RelationInfo, - dbModel:DatabaseModel - ): string { - let isRelationToMany = relation.isOneToMany || relation.isManyToMany - let ownerEntity = dbModel.entities.filter(v => { - return v.EntityName==relation.ownerTable - })[0] - let referencedEntity = dbModel.entities.filter(v => { - return v.EntityName == relation.relatedTable - })[0] - - - - let columnName = columnOldName[0].toLowerCase()+ columnOldName.substring(1,columnOldName.length); - if ( columnName.endsWith("id")) { - columnName = columnName.substring(0, columnName.lastIndexOf("id")); - } - if (!isNaN(parseInt(columnName[columnName.length-1]))) { - let num = columnName[columnName.length-1] - columnName = columnName.substring(0, columnName.length - 1) - columnName += (isRelationToMany ? "s" : "")+num.toString(); - } else { - columnName += isRelationToMany ? "s" : ""; - } - - if (relation.relationType!="ManyToMany") { - - if (columnOldName!=columnName) { - if (!relation.isOwner) { - if (ownerEntity.Columns.some(v => v.tsName == columnName)) { - columnName = columnName + "_" - for (let i = 2; i <= ownerEntity.Columns.length; i++) { - columnName = columnName.substring(0, columnName.length - 1) + i.toString(); - if (ownerEntity.Columns.every(v => v.tsName != columnName)) break; - } - } - } else { - if (referencedEntity.Columns.some(v => v.tsName == columnName)) { - columnName = columnName + "_" - for (let i = 2; i <= referencedEntity.Columns.length; i++) { - columnName = columnName.substring(0, columnName.length - 1) + i.toString(); - if (referencedEntity.Columns.every(v => v.tsName != columnName)) break; - } - } - } - } - } - - return columnName; - } - - entityName(entityName: string): string { - return entityName; - } - - columnName(columnName: string): string { - return columnName; - } -} diff --git a/src/Engine.ts b/src/Engine.ts index ed1e871..74d5d93 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -5,7 +5,7 @@ import fs = require("fs"); import path = require("path"); import * as TomgUtils from "./Utils"; import changeCase = require("change-case"); -import { NamingStrategy } from "./NamingStrategy"; +import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; export class Engine { constructor( @@ -42,7 +42,7 @@ export class Engine { password: string, schemaName: string, ssl: boolean, - namingStrategy: NamingStrategy + namingStrategy: AbstractNamingStrategy ): Promise { return await this.driver.GetDataFromServer( database, @@ -275,5 +275,5 @@ export interface EngineOptions { convertCaseProperty: "pascal" | "camel" | "none"; lazy: boolean; constructor: boolean; - namingStrategy: NamingStrategy; + namingStrategy: AbstractNamingStrategy; } diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index 1af86d8..aef42a4 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -1,10 +1,66 @@ +import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { RelationInfo } from "./models/RelationInfo"; import { DatabaseModel } from "./models/DatabaseModel"; -export abstract class NamingStrategy { - abstract relationName(columnName: string, relation: RelationInfo, dbModel: DatabaseModel): string; +export class NamingStrategy extends AbstractNamingStrategy { + relationName( + columnOldName:string, + relation: RelationInfo, + dbModel:DatabaseModel + ): string { + let isRelationToMany = relation.isOneToMany || relation.isManyToMany + let ownerEntity = dbModel.entities.filter(v => { + return v.EntityName==relation.ownerTable + })[0] + let referencedEntity = dbModel.entities.filter(v => { + return v.EntityName == relation.relatedTable + })[0] - abstract entityName(entityName: string): string; - abstract columnName(columnName: string): string; + + let columnName = columnOldName[0].toLowerCase()+ columnOldName.substring(1,columnOldName.length); + if ( columnName.endsWith("id")) { + columnName = columnName.substring(0, columnName.lastIndexOf("id")); + } + if (!isNaN(parseInt(columnName[columnName.length-1]))) { + let num = columnName[columnName.length-1] + columnName = columnName.substring(0, columnName.length - 1) + columnName += (isRelationToMany ? "s" : "")+num.toString(); + } else { + columnName += isRelationToMany ? "s" : ""; + } + + if (relation.relationType!="ManyToMany") { + + if (columnOldName!=columnName) { + if (!relation.isOwner) { + if (ownerEntity.Columns.some(v => v.tsName == columnName)) { + columnName = columnName + "_" + for (let i = 2; i <= ownerEntity.Columns.length; i++) { + columnName = columnName.substring(0, columnName.length - 1) + i.toString(); + if (ownerEntity.Columns.every(v => v.tsName != columnName)) break; + } + } + } else { + if (referencedEntity.Columns.some(v => v.tsName == columnName)) { + columnName = columnName + "_" + for (let i = 2; i <= referencedEntity.Columns.length; i++) { + columnName = columnName.substring(0, columnName.length - 1) + i.toString(); + if (referencedEntity.Columns.every(v => v.tsName != columnName)) break; + } + } + } + } + } + + return columnName; + } + + entityName(entityName: string): string { + return entityName; + } + + columnName(columnName: string): string { + return columnName; + } } diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 29b22b0..aeb25b5 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -8,7 +8,7 @@ import { WithPrecisionColumnType, WithLengthColumnType } from "typeorm/driver/types/ColumnTypes"; -import { NamingStrategy } from "../NamingStrategy"; +import { AbstractNamingStrategy } from "../AbstractNamingStrategy"; export abstract class AbstractDriver { changeColumnNames(dbModel: DatabaseModel) { @@ -157,7 +157,7 @@ export abstract class AbstractDriver { "binary", "varbinary" ]; - namingStrategy: NamingStrategy; + namingStrategy: AbstractNamingStrategy; FindManyToManyRelations(dbModel: DatabaseModel) { let manyToManyEntities = dbModel.entities.filter(entity => { @@ -238,7 +238,7 @@ export abstract class AbstractDriver { password: string, schema: string, ssl: boolean, - namingStrategy: NamingStrategy + namingStrategy: AbstractNamingStrategy ): Promise { let dbModel = {}; this.namingStrategy = namingStrategy; diff --git a/src/index.ts b/src/index.ts index b7fae4d..af8c144 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,7 +9,7 @@ import { Engine } from "./Engine"; import * as Yargs from "yargs"; import * as TomgUtils from "./Utils"; import path = require("path"); -import { DefaultNamingStrategy } from "./DefaultNamingStrategy"; +import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { NamingStrategy } from "./NamingStrategy"; var argv = Yargs.usage( @@ -86,6 +86,9 @@ var argv = Yargs.usage( boolean: true, default: false }) + .option("namingStrategy", { + describe: "Use custom naming strategy", + }) .option("generateConstructor", { describe: "Generate constructor allowing partial initialization", boolean: true, @@ -131,9 +134,17 @@ switch (argv.e) { default: TomgUtils.LogError("Database engine not recognized.", false); throw new Error("Database engine not recognized."); -} -let namingStrategy: NamingStrategy= new DefaultNamingStrategy(); +} + +let namingStrategy: AbstractNamingStrategy; +if (argv.namingStrategy && argv.namingStrategy!='') { + let req = require(argv.namingStrategy); + namingStrategy= new req.NamingStrategy(); +} else { + namingStrategy= new NamingStrategy(); +} +debugger; let engine = new Engine(driver, { host: argv.h, port: parseInt(argv.p) || standardPort, diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 4797886..4a61143 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -6,7 +6,7 @@ import { EntityInfo } from '../../src/models/EntityInfo' import { ColumnInfo } from '../../src/models/ColumnInfo' import { RelationInfo } from '../../src/models/RelationInfo' import { Table, IColumnMetadata } from "mssql"; -import { DefaultNamingStrategy } from "../../src/DefaultNamingStrategy"; +import { NamingStrategy } from "../../src/NamingStrategy"; class fakeResponse implements MSSQL.IResult { recordsets: MSSQL.IRecordSet[]; @@ -28,7 +28,7 @@ describe('MssqlDriver', function () { beforeEach(() => { driver = new MssqlDriver(); - driver.namingStrategy = new DefaultNamingStrategy(); + driver.namingStrategy = new NamingStrategy(); }) afterEach(() => { diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index 7c68ccf..38e8d14 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -10,8 +10,8 @@ import { Engine } from "../../src/Engine"; import { createConnection, ConnectionOptions } from "typeorm"; import * as yn from "yn" import path = require('path') +import { AbstractNamingStrategy } from "../../src/AbstractNamingStrategy"; import { NamingStrategy } from "../../src/NamingStrategy"; -import { DefaultNamingStrategy } from "../../src/DefaultNamingStrategy"; export async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Promise { @@ -47,7 +47,7 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin if (conn.isConnected) await conn.close() - let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); + let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new MssqlDriver(); let engine = new Engine( @@ -114,7 +114,7 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st if (conn.isConnected) await conn.close() - let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); + let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new PostgresDriver(); let engine = new Engine( @@ -173,7 +173,7 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri if (conn.isConnected) await conn.close() - let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); + let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new SqliteDriver(); let engine = new Engine( @@ -230,7 +230,7 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin if (conn.isConnected) await conn.close() - let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); + let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new MysqlDriver(); let engine = new Engine( @@ -280,7 +280,7 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str if (conn.isConnected) await conn.close() - let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); + let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new MariaDbDriver(); let engine = new Engine( @@ -333,7 +333,7 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st if (conn.isConnected) await conn.close() - let namingStrategy: NamingStrategy = new DefaultNamingStrategy(); + let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new OracleDriver(); let engine = new Engine( From 14ef1e7ddba3ab9914638d00b310737542d73ba9 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 20:46:50 +0200 Subject: [PATCH 012/130] relationId #65 --- gulpfile.js | 1 + src/AbstractNamingStrategy.ts | 6 +- src/Engine.ts | 10 ++- src/NamingStrategy.ts | 84 +++++++++++-------- src/drivers/AbstractDriver.ts | 16 ++-- src/entity.mst | 8 +- src/index.ts | 20 +++-- src/models/ColumnInfo.ts | 1 - src/models/RelationInfo.ts | 7 ++ test/drivers/MssqlDriver.test.ts | 2 +- .../github-issues/65/entity/Post.ts | 24 ++++++ .../github-issues/65/entity/PostAuthor.ts | 23 +++++ .../github-issues/65/entity/PostReader.ts | 21 +++++ test/integration/githubIssues.test.ts | 8 ++ test/utils/GeneralTestUtils.ts | 18 ++-- 15 files changed, 185 insertions(+), 64 deletions(-) create mode 100644 test/integration/github-issues/65/entity/Post.ts create mode 100644 test/integration/github-issues/65/entity/PostAuthor.ts create mode 100644 test/integration/github-issues/65/entity/PostReader.ts diff --git a/gulpfile.js b/gulpfile.js index 5e795ba..d8dac98 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -24,6 +24,7 @@ gulp.task('clean', function () { gulp.task('prettier', function () { return gulp.src('.prettierrc') .pipe(shell(['prettier ./src/**/*.ts --write'])) + .pipe(shell(['prettier ./src/*.ts --write'])) }); gulp.task('pre-commit', ['prettier'], function () { diff --git a/src/AbstractNamingStrategy.ts b/src/AbstractNamingStrategy.ts index ad4585b..c0ea4bf 100644 --- a/src/AbstractNamingStrategy.ts +++ b/src/AbstractNamingStrategy.ts @@ -2,7 +2,11 @@ import { RelationInfo } from "./models/RelationInfo"; import { DatabaseModel } from "./models/DatabaseModel"; export abstract class AbstractNamingStrategy { - abstract relationName(columnName: string, relation: RelationInfo, dbModel: DatabaseModel): string; + abstract relationName( + columnName: string, + relation: RelationInfo, + dbModel: DatabaseModel + ): string; abstract entityName(entityName: string): string; diff --git a/src/Engine.ts b/src/Engine.ts index 74d5d93..8f86dff 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -22,7 +22,8 @@ export class Engine { this.Options.password, this.Options.schemaName, this.Options.ssl, - this.Options.namingStrategy + this.Options.namingStrategy, + this.Options.relationIds ); if (dbModel.entities.length > 0) { this.createModelFromMetadata(dbModel); @@ -42,7 +43,8 @@ export class Engine { password: string, schemaName: string, ssl: boolean, - namingStrategy: AbstractNamingStrategy + namingStrategy: AbstractNamingStrategy, + relationIds: boolean ): Promise { return await this.driver.GetDataFromServer( database, @@ -52,7 +54,8 @@ export class Engine { password, schemaName, ssl, - namingStrategy + namingStrategy, + relationIds ); } private createModelFromMetadata(databaseModel: DatabaseModel) { @@ -276,4 +279,5 @@ export interface EngineOptions { lazy: boolean; constructor: boolean; namingStrategy: AbstractNamingStrategy; + relationIds: boolean; } diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index aef42a4..01d6b2f 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -4,54 +4,64 @@ import { DatabaseModel } from "./models/DatabaseModel"; export class NamingStrategy extends AbstractNamingStrategy { relationName( - columnOldName:string, + columnOldName: string, relation: RelationInfo, - dbModel:DatabaseModel + dbModel: DatabaseModel ): string { - let isRelationToMany = relation.isOneToMany || relation.isManyToMany + let isRelationToMany = relation.isOneToMany || relation.isManyToMany; let ownerEntity = dbModel.entities.filter(v => { - return v.EntityName==relation.ownerTable - })[0] + return v.EntityName == relation.ownerTable; + })[0]; let referencedEntity = dbModel.entities.filter(v => { - return v.EntityName == relation.relatedTable - })[0] + return v.EntityName == relation.relatedTable; + })[0]; - - - let columnName = columnOldName[0].toLowerCase()+ columnOldName.substring(1,columnOldName.length); - if ( columnName.endsWith("id")) { - columnName = columnName.substring(0, columnName.lastIndexOf("id")); + let columnName = + columnOldName[0].toLowerCase() + + columnOldName.substring(1, columnOldName.length); + if ( + columnName + .toLowerCase() + .endsWith( + "id" + ) /*&& !ownerEntity.Columns.some(x=>x.tsName==columnName && x.isPrimary)*/ + ) { + columnName = columnName.substring( + 0, + columnName.toLowerCase().lastIndexOf("id") + ); } - if (!isNaN(parseInt(columnName[columnName.length-1]))) { - let num = columnName[columnName.length-1] - columnName = columnName.substring(0, columnName.length - 1) - columnName += (isRelationToMany ? "s" : "")+num.toString(); - } else { - columnName += isRelationToMany ? "s" : ""; + if (!isNaN(parseInt(columnName[columnName.length - 1]))) { + columnName = columnName.substring(0, columnName.length - 1); } + if (!isNaN(parseInt(columnName[columnName.length - 1]))) { + columnName = columnName.substring(0, columnName.length - 1); + } + columnName += isRelationToMany ? "s" : ""; - if (relation.relationType!="ManyToMany") { - - if (columnOldName!=columnName) { - if (!relation.isOwner) { - if (ownerEntity.Columns.some(v => v.tsName == columnName)) { - columnName = columnName + "_" - for (let i = 2; i <= ownerEntity.Columns.length; i++) { - columnName = columnName.substring(0, columnName.length - 1) + i.toString(); - if (ownerEntity.Columns.every(v => v.tsName != columnName)) break; - } - } - } else { - if (referencedEntity.Columns.some(v => v.tsName == columnName)) { - columnName = columnName + "_" - for (let i = 2; i <= referencedEntity.Columns.length; i++) { - columnName = columnName.substring(0, columnName.length - 1) + i.toString(); - if (referencedEntity.Columns.every(v => v.tsName != columnName)) break; - } + if ( + relation.relationType != "ManyToMany" && + columnOldName != columnName + ) { + if (ownerEntity.Columns.some(v => v.tsName == columnName)) { + columnName = columnName + "_"; + for (let i = 2; i <= ownerEntity.Columns.length; i++) { + columnName = + columnName.substring( + 0, + columnName.length - i.toString().length + ) + i.toString(); + if ( + ownerEntity.Columns.every( + v => + v.tsName != columnName || + columnName == columnOldName + ) + ) + break; } } } - } return columnName; } diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index aeb25b5..9baa5c5 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -158,6 +158,7 @@ export abstract class AbstractDriver { "varbinary" ]; namingStrategy: AbstractNamingStrategy; + generateRelationsIds: boolean; FindManyToManyRelations(dbModel: DatabaseModel) { let manyToManyEntities = dbModel.entities.filter(entity => { @@ -238,8 +239,10 @@ export abstract class AbstractDriver { password: string, schema: string, ssl: boolean, - namingStrategy: AbstractNamingStrategy + namingStrategy: AbstractNamingStrategy, + relationIds: boolean ): Promise { + this.generateRelationsIds = relationIds; let dbModel = {}; this.namingStrategy = namingStrategy; await this.ConnectToServer(database, server, port, user, password, ssl); @@ -259,9 +262,9 @@ export abstract class AbstractDriver { } private ApplyNamingStrategy(dbModel: DatabaseModel) { - this.changeColumnNames(dbModel); - this.changeEntityNames(dbModel); this.changeRelationNames(dbModel); + this.changeEntityNames(dbModel); + this.changeColumnNames(dbModel); } abstract async ConnectToServer( @@ -386,6 +389,7 @@ export abstract class AbstractDriver { ownerRelation.relationType = isOneToMany ? "ManyToOne" : "OneToOne"; + ownerRelation.relationIdField = this.generateRelationsIds; let columnName = ownerEntity.EntityName; if ( @@ -394,8 +398,10 @@ export abstract class AbstractDriver { columnName = columnName + "_"; for (let i = 2; i <= referencedEntity.Columns.length; i++) { columnName = - columnName.substring(0, columnName.length - 1) + - i.toString(); + columnName.substring( + 0, + columnName.length - i.toString().length + ) + i.toString(); if ( referencedEntity.Columns.every( v => v.tsName != columnName diff --git a/src/entity.mst b/src/entity.mst index 9da5ef7..1cba3ed 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -1,4 +1,4 @@ -import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable} from "typeorm"; +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; {{relationImports}}{{#each UniqueImports}}import {{curly true}}{{toEntityName this}}{{curly false}} from "./{{toFileName this}}"; {{/each}} @@ -28,7 +28,11 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; {{else}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; - {{/if}}{{/relations}} + {{/if}} + {{#if relationIdField }} + + @RelationId(({{../../EntityName}}: {{../../EntityName}}) => {{../../EntityName}}.{{toPropertyName ../tsName}}) + {{toPropertyName ../tsName}}Id: {{#if isOneToOne}}{{toLazy ../ts_type}}{{else}}{{toLazy (concat ../ts_type "[]")}}{{/if}};{{/if}}{{/relations}} {{/Columns}} {{#if GenerateConstructor}} constructor(init?: Partial<{{toEntityName EntityName}}>) { diff --git a/src/index.ts b/src/index.ts index af8c144..151d6ae 100644 --- a/src/index.ts +++ b/src/index.ts @@ -87,7 +87,12 @@ var argv = Yargs.usage( default: false }) .option("namingStrategy", { - describe: "Use custom naming strategy", + describe: "Use custom naming strategy" + }) + .option("relationIds", { + describe: "Generate RelationId fields", + boolean: true, + default: false }) .option("generateConstructor", { describe: "Generate constructor allowing partial initialization", @@ -118,7 +123,7 @@ switch (argv.e) { standardUser = "root"; break; case "mariadb": - driver = new MysqlDriver(); + driver = new MariaDbDriver(); standardPort = 3306; standardUser = "root"; break; @@ -134,17 +139,15 @@ switch (argv.e) { default: TomgUtils.LogError("Database engine not recognized.", false); throw new Error("Database engine not recognized."); - } - let namingStrategy: AbstractNamingStrategy; -if (argv.namingStrategy && argv.namingStrategy!='') { +if (argv.namingStrategy && argv.namingStrategy != "") { let req = require(argv.namingStrategy); - namingStrategy= new req.NamingStrategy(); + namingStrategy = new req.NamingStrategy(); } else { - namingStrategy= new NamingStrategy(); + namingStrategy = new NamingStrategy(); } -debugger; + let engine = new Engine(driver, { host: argv.h, port: parseInt(argv.p) || standardPort, @@ -161,6 +164,7 @@ let engine = new Engine(driver, { convertCaseProperty: argv.cp, lazy: argv.lazy, constructor: argv.generateConstructor, + relationIds: argv.relationIds, namingStrategy: namingStrategy }); diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index 9540496..455c4d4 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -25,7 +25,6 @@ export class ColumnInfo { numericScale: number | null = null; enumOptions: string | null = null; relations: RelationInfo[]; - constructor() { this.relations = []; } diff --git a/src/models/RelationInfo.ts b/src/models/RelationInfo.ts index 3a39f87..58fc7fe 100644 --- a/src/models/RelationInfo.ts +++ b/src/models/RelationInfo.ts @@ -7,6 +7,7 @@ export class RelationInfo { ownerColumn: string; actionOnDelete: "RESTRICT" | "CASCADE" | "SET NULL" | null; actionOnUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | null; + relationIdField: boolean = false; get isOneToMany(): boolean { return this.relationType == "OneToMany"; @@ -14,4 +15,10 @@ export class RelationInfo { get isManyToMany(): boolean { return this.relationType == "ManyToMany"; } + get isOneToOne(): boolean { + return this.relationType == "OneToOne"; + } + get isManyToOne(): boolean { + return this.relationType == "OneToOne"; + } } diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 4a61143..0e28241 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -95,7 +95,7 @@ describe('MssqlDriver', function () { ts_type: 'number', enumOptions: null, is_unique:false, - relations: [] + relations: [], }) let result = await driver.GetCoulmnsFromEntity(entities, 'schema'); expect(result).to.be.deep.equal(expected) diff --git a/test/integration/github-issues/65/entity/Post.ts b/test/integration/github-issues/65/entity/Post.ts new file mode 100644 index 0000000..abe57e9 --- /dev/null +++ b/test/integration/github-issues/65/entity/Post.ts @@ -0,0 +1,24 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable} from "typeorm"; +import { PostAuthor } from "./PostAuthor"; +import { PostReader } from "./PostReader"; + + +@Entity("Post") +export class Post { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + + + @OneToOne(type => PostAuthor, PostAuthor => PostAuthor.Id) + postAuthor: PostAuthor; + + @OneToMany(type => PostReader, PostReader => PostReader.Id) + postReaders: PostReader[]; + +} diff --git a/test/integration/github-issues/65/entity/PostAuthor.ts b/test/integration/github-issues/65/entity/PostAuthor.ts new file mode 100644 index 0000000..8ff3809 --- /dev/null +++ b/test/integration/github-issues/65/entity/PostAuthor.ts @@ -0,0 +1,23 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { Post } from "./Post"; + + +@Entity("PostAuthor") +export class PostAuthor { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + + + @OneToOne(type => Post, Post => Post.Id) + @JoinColumn() + post:Post; + + @RelationId((postAuthor: PostAuthor) => postAuthor.post) + postId: number; +} diff --git a/test/integration/github-issues/65/entity/PostReader.ts b/test/integration/github-issues/65/entity/PostReader.ts new file mode 100644 index 0000000..1fcc60e --- /dev/null +++ b/test/integration/github-issues/65/entity/PostReader.ts @@ -0,0 +1,21 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { Post } from "./Post"; + + +@Entity("PostReader") +export class PostReader { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + @ManyToOne(type => Post, Post => Post.Id) + @JoinColumn() + post:Post; + + @RelationId((postReader: PostReader) => postReader.post) + postId: number[]; +} diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index 7a9a4c8..1c348ed 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -78,6 +78,14 @@ describe("GitHub issues", async function () { break; } + switch (folder) { + case '65': + engine.Options.relationIds = true; + break; + default: + break; + } + await engine.createModelFromDatabase() let filesGenPath = path.resolve(resultsPath, 'entities') diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index 38e8d14..b1fa87f 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -67,7 +67,8 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin convertCaseProperty: 'none', lazy: false, constructor: false, - namingStrategy: namingStrategy + namingStrategy: namingStrategy, + relationIds:false }); conn = await createConnection(connOpt) @@ -134,7 +135,8 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st convertCaseProperty: 'none', lazy: false, constructor:false, - namingStrategy: namingStrategy + namingStrategy: namingStrategy, + relationIds: false }); conn = await createConnection(connOpt) @@ -193,7 +195,8 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri convertCaseProperty: 'none', lazy: false, constructor:false, - namingStrategy: namingStrategy + namingStrategy: namingStrategy, + relationIds: false }); conn = await createConnection(connOpt) @@ -250,7 +253,8 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin convertCaseProperty: 'none', lazy: false, constructor:false, - namingStrategy: namingStrategy + namingStrategy: namingStrategy, + relationIds: false }); return engine; @@ -300,7 +304,8 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str convertCaseProperty: 'none', lazy: false, constructor:false, - namingStrategy: namingStrategy + namingStrategy: namingStrategy, + relationIds: false }); @@ -353,7 +358,8 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st convertCaseProperty: 'none', lazy: false, constructor:false, - namingStrategy: namingStrategy + namingStrategy: namingStrategy, + relationIds: false }); return engine; From 9435f609f155697898c3aff678e15ff2ea8c5e90 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 20:48:04 +0200 Subject: [PATCH 013/130] fixing travis build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6649f6a..bb97da8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,9 +36,9 @@ before_install: - npm install -g npm@5 - npm install -g greenkeeper-lockfile@1 - mkdir /opt/oracle +before_script: - if [ -n "$DOCKER_USERNAME" ]; then npm i oracledb --no-save; docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH -before_script: - greenkeeper-lockfile-update - typings install - npm link typescript From 9db678299e69fb8265ec344eea845a33f7a6a98a Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 21:30:54 +0200 Subject: [PATCH 014/130] readme, changelog --- .travis.yml | 2 +- README.md | 9 +++++++++ changelog.md | 9 +++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 changelog.md diff --git a/.travis.yml b/.travis.yml index bb97da8..aaa1333 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: -#- stable +- stable - 8 - 6 sudo: required diff --git a/README.md b/README.md index 02221aa..c4bae33 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,9 @@ To install module globally simply type `npm i -g typeorm-model-generator` in you ### Npx way Thanks to npx you can use npm modules without polluting global installs. So nothing to do here :) >To use `npx` you need to use npm at version at least 5.2.0. Try updating your npm by `npm i -g npm` +### Database drivers +All database drivers except oracle are installed by default. To use typeorm-model-generator with oracle databese you need to install driver with `npm i oracledb` and configure [oracle install client](http://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html) on your machine. + ## Usage ```shell @@ -53,6 +56,8 @@ Options: --cp, --case-property Convert property names to specified case [choices: "pascal", "camel", "none"] [default: "none"] --lazy Generate lazy relations [boolean] [default: false] + --namingStrategy Use custom naming strategy + --relationIds Generate RelationId fields [boolean] [default: false] --generateConstructor Generate constructor allowing partial initialization [boolean] [default: false] ``` @@ -85,3 +90,7 @@ Options: ``` npx typeorm-model-generator -d "Z:\sqlite.db" -e sqlite -o . ```` +## Naming strategy +If you want to generate custom names for properties in generated entities you need to use custom naming strategy. You need to create your own version of [NamingStrategy](https://github.com/Kononnable/typeorm-model-generator/blob/master/src/NamingStrategy.ts) nad pass it as command parameter. + +```typeorm-model-generator -d typeorm_mg --namingStrategy=./NamingStrategy -e sqlite -db /tmp/sqliteto.db``` diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..042c8c5 --- /dev/null +++ b/changelog.md @@ -0,0 +1,9 @@ +# Changelog + + +## 0.2.17 + +* added support for relationId fields +* added support for custom naming entity fields +* removed oracledb from dependencies +* generating nullable column types for nullable columns From 330c6216b6731f7c6df9acb814ea7bd324caf9e2 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 21:32:50 +0200 Subject: [PATCH 015/130] readme fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4bae33..3ccb0bc 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,6 @@ Options: npx typeorm-model-generator -d "Z:\sqlite.db" -e sqlite -o . ```` ## Naming strategy -If you want to generate custom names for properties in generated entities you need to use custom naming strategy. You need to create your own version of [NamingStrategy](https://github.com/Kononnable/typeorm-model-generator/blob/master/src/NamingStrategy.ts) nad pass it as command parameter. +If you want to generate custom names for properties in generated entities you need to use custom naming strategy. You need to create your own version of [NamingStrategy](https://github.com/Kononnable/typeorm-model-generator/blob/master/src/NamingStrategy.ts) and pass it as command parameter. ```typeorm-model-generator -d typeorm_mg --namingStrategy=./NamingStrategy -e sqlite -db /tmp/sqliteto.db``` From 9dab7324e131773e6d06366de54ace697cd35010 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 22:17:15 +0200 Subject: [PATCH 016/130] travis postgres problems --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index aaa1333..b169fea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,9 @@ before_script: - typings install - npm link typescript - tsc -- sleep 180 +- sleep 240 +- docker logs typeorm-mg-postgres + after_script: - greenkeeper-lockfile-upload dd: From c31a4eba019561feb455c470b672fc83e6035a52 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 22:49:28 +0200 Subject: [PATCH 017/130] disabling postgres CI tests untill CI issue resolved --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b169fea..128252a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ services: - docker env: matrix: - - POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres + - POSTGRES_Skip=1 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres POSTGRES_Password=!Passw0rd POSTGRES_Database=typeorm_mg POSTGRES_SSL=0 MYSQL_Skip=0 MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=!Passw0rd MYSQL_Database=typeorm_mg MYSQL_SSL=1 MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 @@ -43,7 +43,7 @@ before_script: - typings install - npm link typescript - tsc -- sleep 240 +- sleep 180 - docker logs typeorm-mg-postgres after_script: From 1a53be68fc5b4dd8a8c94ca76482bcc208a34f69 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 22:56:50 +0200 Subject: [PATCH 018/130] fixing travis greenkeeper branches --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 128252a..5d01e71 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,6 +36,8 @@ before_install: - npm install -g npm@5 - npm install -g greenkeeper-lockfile@1 - mkdir /opt/oracle +install: +- case $TRAVIS_BRANCH in greenkeeper*) npm i;; *) npm ci;; esac; before_script: - if [ -n "$DOCKER_USERNAME" ]; then npm i oracledb --no-save; docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH From c9374b690596d3f49fc68799fc5bdec8018f020d Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Jun 2018 23:21:04 +0200 Subject: [PATCH 019/130] 0.2.17 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 90c8b27..bfe218a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.16", + "version": "0.2.17", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index bd392fe..9b23e4e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.16", + "version": "0.2.17", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From 4757fd814f6c84f0e20977d70d577d323b9157d7 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Mon, 18 Jun 2018 20:55:12 +0200 Subject: [PATCH 020/130] package-lock file sync --- package-lock.json | 1078 +++++---------------------------------------- package.json | 2 +- 2 files changed, 109 insertions(+), 971 deletions(-) diff --git a/package-lock.json b/package-lock.json index bfe218a..1ecb495 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,26 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.46", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.46.tgz", - "integrity": "sha512-7BKRkmYaPZm3Yff5HGZJKCz7RqZ5jUjknsXT6Gz5YKG23J3uq9hAj0epncCB0rlqmnZ8Q+UUpQB2tCR5mT37vw==", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0-beta.46" - } - }, - "@babel/highlight": { - "version": "7.0.0-beta.46", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.46.tgz", - "integrity": "sha512-r4snW6Q8ICL3Y8hGzYJRvyG/+sc+kvkewXNedG9tQjoHmUFMwMSv/o45GWQUQswevGnWghiGkpRPivFfOuMsOA==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^3.0.0" - } - }, "@gulp-sourcemaps/identity-map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz", @@ -95,6 +75,15 @@ } } }, + "@samverschueren/stream-to-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", + "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", + "dev": true, + "requires": { + "any-observable": "^0.3.0" + } + }, "@sinonjs/formatio": { "version": "2.0.0", "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", @@ -166,9 +155,9 @@ } }, "@types/mysql": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.4.tgz", - "integrity": "sha512-qjiJUk8vPIuTtvIPx5sAtwVwProXAQm6t6+fvJOIfL0bO8Pj0ap8PEFJ3df5MVyjYzTKRxLudidhoCk642RoZQ==", + "version": "2.15.5", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.5.tgz", + "integrity": "sha512-4QAISTUGZbcFh7bqdndo08xRdES5OTU+JODy8VCZbe1yiXyGjqw1H83G43XjQ3IbC10wn9xlGd44A5RXJwNh0Q==", "dev": true, "requires": { "@types/node": "*" @@ -214,12 +203,6 @@ "integrity": "sha512-RsisuFAkhtCB3DKwQrBZYdkqtOyck7y5GkMZ7KeYVjLNBoV9ZMI0Kxj304Myp+B5Jj4LeEdPMTPlXNylG9x94A==", "dev": true }, - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", - "dev": true - }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -232,15 +215,6 @@ "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", "dev": true }, - "acorn-globals": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", - "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } - }, "agent-base": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", @@ -357,9 +331,9 @@ "dev": true }, "any-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", - "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "dev": true }, "any-promise": { @@ -435,12 +409,6 @@ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", "dev": true }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, "array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", @@ -453,12 +421,6 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", @@ -488,12 +450,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -644,32 +600,6 @@ "concat-map": "0.0.1" } }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "browser-process-hrtime": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", - "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", - "dev": true - }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", - "dev": true, - "requires": { - "resolve": "1.1.7" - } - }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -691,12 +621,6 @@ "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", "dev": true }, - "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", - "dev": true - }, "buffer-writer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", @@ -719,12 +643,6 @@ "unset-value": "^1.0.0" } }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, "camel-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", @@ -1243,15 +1161,14 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.5.tgz", + "integrity": "sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg==", "dev": true, "requires": { "is-directory": "^0.3.1", "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" + "parse-json": "^4.0.0" }, "dependencies": { "parse-json": { @@ -1312,23 +1229,17 @@ "dev": true }, "css": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", - "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz", + "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==", "dev": true, "requires": { "inherits": "^2.0.1", "source-map": "^0.1.38", - "source-map-resolve": "^0.3.0", + "source-map-resolve": "^0.5.1", "urix": "^0.1.0" }, "dependencies": { - "atob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", - "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=", - "dev": true - }, "source-map": { "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", @@ -1337,42 +1248,9 @@ "requires": { "amdefine": ">=0.0.4" } - }, - "source-map-resolve": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", - "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", - "dev": true, - "requires": { - "atob": "~1.1.0", - "resolve-url": "~0.2.1", - "source-map-url": "~0.3.0", - "urix": "~0.1.0" - } - }, - "source-map-url": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", - "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", - "dev": true } } }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", - "dev": true - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", @@ -1397,17 +1275,6 @@ "assert-plus": "^1.0.0" } }, - "data-urls": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", - "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", - "dev": true, - "requires": { - "abab": "^1.0.4", - "whatwg-mimetype": "^2.0.0", - "whatwg-url": "^6.4.0" - } - }, "date-fns": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", @@ -1476,12 +1343,6 @@ "type-detect": "^4.0.0" } }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -1553,15 +1414,6 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, "dot-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", @@ -1580,9 +1432,10 @@ } }, "dotenv": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", - "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.0.0.tgz", + "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==", + "dev": true }, "duplexer2": { "version": "0.0.2", @@ -1820,24 +1673,6 @@ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", "dev": true }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -1847,20 +1682,6 @@ "homedir-polyfill": "^1.0.1" } }, - "expect": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", - "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "jest-diff": "^22.4.3", - "jest-get-type": "^22.4.3", - "jest-matcher-utils": "^22.4.3", - "jest-message-util": "^22.4.3", - "jest-regex-util": "^22.4.3" - } - }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", @@ -1884,23 +1705,6 @@ } } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -1951,36 +1755,6 @@ "object-assign": "^4.1.0" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, "find-index": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", @@ -2054,15 +1828,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -2203,42 +1968,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -3251,15 +2980,6 @@ "parse-passwd": "^1.0.0" } }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, "http-proxy-agent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", @@ -3464,21 +3184,6 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -3505,12 +3210,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, - "is-generator-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", - "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", - "dev": true - }, "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", @@ -3550,15 +3249,6 @@ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", "dev": true }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", @@ -3566,12 +3256,12 @@ "dev": true }, "is-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", - "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", "dev": true, "requires": { - "symbol-observable": "^0.2.2" + "symbol-observable": "^1.1.0" } }, "is-odd": { @@ -3615,18 +3305,6 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -3802,233 +3480,22 @@ "lodash": "~4.17.2" } }, - "jest-config": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.3.tgz", - "integrity": "sha512-KSg3EOToCgkX+lIvenKY7J8s426h6ahXxaUFJxvGoEk0562Z6inWj1TnKoGycTASwiLD+6kSYFALcjdosq9KIQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^22.4.3", - "jest-environment-node": "^22.4.3", - "jest-get-type": "^22.4.3", - "jest-jasmine2": "^22.4.3", - "jest-regex-util": "^22.4.3", - "jest-resolve": "^22.4.3", - "jest-util": "^22.4.3", - "jest-validate": "^22.4.3", - "pretty-format": "^22.4.3" - } - }, - "jest-diff": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", - "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff": "^3.2.0", - "jest-get-type": "^22.4.3", - "pretty-format": "^22.4.3" - } - }, - "jest-environment-jsdom": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", - "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", - "dev": true, - "requires": { - "jest-mock": "^22.4.3", - "jest-util": "^22.4.3", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", - "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", - "dev": true, - "requires": { - "jest-mock": "^22.4.3", - "jest-util": "^22.4.3" - } - }, "jest-get-type": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", "dev": true }, - "jest-jasmine2": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz", - "integrity": "sha512-yZCPCJUcEY6R5KJB/VReo1AYI2b+5Ky+C+JA1v34jndJsRcLpU4IZX4rFJn7yDTtdNbO/nNqg+3SDIPNH2ecnw==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^22.4.3", - "graceful-fs": "^4.1.11", - "is-generator-fn": "^1.0.0", - "jest-diff": "^22.4.3", - "jest-matcher-utils": "^22.4.3", - "jest-message-util": "^22.4.3", - "jest-snapshot": "^22.4.3", - "jest-util": "^22.4.3", - "source-map-support": "^0.5.0" - } - }, - "jest-matcher-utils": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", - "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.4.3", - "pretty-format": "^22.4.3" - } - }, - "jest-message-util": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", - "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0-beta.35", - "chalk": "^2.0.1", - "micromatch": "^2.3.11", - "slash": "^1.0.0", - "stack-utils": "^1.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "jest-mock": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", - "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", - "dev": true - }, - "jest-regex-util": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", - "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", - "dev": true - }, - "jest-resolve": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", - "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", - "dev": true, - "requires": { - "browser-resolve": "^1.11.2", - "chalk": "^2.0.1" - } - }, - "jest-snapshot": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", - "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^22.4.3", - "jest-matcher-utils": "^22.4.3", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^22.4.3" - } - }, - "jest-util": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", - "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", - "dev": true, - "requires": { - "callsites": "^2.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.11", - "is-ci": "^1.0.10", - "jest-message-util": "^22.4.3", - "mkdirp": "^0.5.1", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "jest-validate": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.3.tgz", - "integrity": "sha512-CfFM18W3GSP/xgmA4UouIx0ljdtfD2mjeBC6c89Gg17E44D4tQhAcTrZmf9djvipwU30kSTnk6CzcxdCCeSXfA==", + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.0.1.tgz", + "integrity": "sha1-zZ8BqJ0mu4hfEqhmdxXpyGWldU8=", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-config": "^22.4.3", - "jest-get-type": "^22.4.3", + "jest-get-type": "^22.1.0", "leven": "^2.1.0", - "pretty-format": "^22.4.3" + "pretty-format": "^23.0.1" } }, "js-string-escape": { @@ -4059,80 +3526,6 @@ "dev": true, "optional": true }, - "jsdom": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.10.0.tgz", - "integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==", - "dev": true, - "requires": { - "abab": "^1.0.4", - "acorn": "^5.3.0", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.2.37 < 0.3.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.0", - "escodegen": "^1.9.0", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.2.0", - "nwmatcher": "^1.4.3", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.83.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.3", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.0", - "ws": "^4.0.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -4265,12 +3658,6 @@ "flush-write-stream": "^1.0.2" } }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", @@ -4304,22 +3691,23 @@ } }, "lint-staged": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.0.5.tgz", - "integrity": "sha512-dCzqskhum0WXQBE0RawBkOlRjg2pc7PkAJD4yRB12+ct5CMTOU9tvzzbsyqJwaGHjTdSFUxiT8n+sww77p2r7w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.2.0.tgz", + "integrity": "sha512-jPoIMbmgtWMUrz/l0rhBVa1j6H71zr0rEoxDWBA333PZcaqBvELdg0Sf4tdGHlwrBM0GXaXMVgTRkLTm2vA7Jg==", "dev": true, "requires": { "app-root-path": "^2.0.1", "chalk": "^2.3.1", "commander": "^2.14.1", - "cosmiconfig": "^4.0.0", + "cosmiconfig": "^5.0.2", "debug": "^3.1.0", "dedent": "^0.7.0", "execa": "^0.9.0", "find-parent-dir": "^0.3.0", "is-glob": "^4.0.0", - "jest-validate": "^22.4.0", - "listr": "^0.13.0", + "is-windows": "^1.0.2", + "jest-validate": "^23.0.0", + "listr": "^0.14.1", "lodash": "^4.17.5", "log-symbols": "^2.2.0", "micromatch": "^3.1.8", @@ -4392,6 +3780,12 @@ "is-extglob": "^2.1.1" } }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -4410,16 +3804,16 @@ "dev": true }, "listr": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", - "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.1.tgz", + "integrity": "sha512-MSMUUVN1f8aRnPi4034RkOqdiUlpYW+FqwFE3aL0uYNPRavkt2S2SsSpDDofn8BDpqv2RNnsdOcCHWsChcq77A==", "dev": true, "requires": { - "chalk": "^1.1.3", + "@samverschueren/stream-to-observable": "^0.3.0", "cli-truncate": "^0.2.1", "figures": "^1.7.0", "indent-string": "^2.1.0", - "is-observable": "^0.2.0", + "is-observable": "^1.1.0", "is-promise": "^2.1.0", "is-stream": "^1.1.0", "listr-silent-renderer": "^1.1.1", @@ -4429,8 +3823,7 @@ "log-update": "^1.0.2", "ora": "^0.2.3", "p-map": "^1.1.1", - "rxjs": "^5.4.2", - "stream-to-observable": "^0.2.0", + "rxjs": "^6.1.0", "strip-ansi": "^3.0.1" }, "dependencies": { @@ -4809,12 +4202,6 @@ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, "lodash.template": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", @@ -4862,9 +4249,9 @@ } }, "lolex": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz", - "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.0.tgz", + "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg==", "dev": true }, "longest": { @@ -5520,12 +4907,6 @@ "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", "dev": true }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -5539,9 +4920,9 @@ "dev": true }, "nise": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz", - "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", + "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", "dev": true, "requires": { "@sinonjs/formatio": "^2.0.0", @@ -5616,12 +4997,6 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", - "dev": true - }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", @@ -5769,16 +5144,6 @@ } } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -6037,35 +5402,6 @@ } } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -6255,12 +5591,6 @@ "extend-shallow": "^1.1.2" } }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, "popsicle": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-9.2.0.tgz", @@ -6346,12 +5676,6 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, "prettier": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", @@ -6359,9 +5683,9 @@ "dev": true }, "pretty-format": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", - "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.0.1.tgz", + "integrity": "sha1-1h0GUmjkx1kIO8y8onoBrXx2AfQ=", "dev": true, "requires": { "ansi-regex": "^3.0.0", @@ -6434,59 +5758,24 @@ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", "dev": true }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "rc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.3.tgz", - "integrity": "sha1-UVdakA+N1oOBxxC0cSwhVMPiA1s=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "deep-extend": "~0.4.0", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "dependencies": { + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -6528,15 +5817,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -6728,37 +6008,11 @@ } } }, - "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "dev": true, - "requires": { - "lodash": "^4.13.1" - } - }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "dev": true, - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -6830,20 +6084,12 @@ } }, "rxjs": { - "version": "5.5.10", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", - "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz", + "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==", "dev": true, "requires": { - "symbol-observable": "1.0.1" - }, - "dependencies": { - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - } + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -6976,18 +6222,18 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sinon": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-5.0.1.tgz", - "integrity": "sha512-xhPMTWl8dusKsa/4Px+K0FCHsAhcpxjMurofDzPr6BF1I5C2G6r4JLIaHKSOcMnXkt7X4Md0OZgJuuIqlw9ieA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-6.0.0.tgz", + "integrity": "sha512-MatciKXyM5pXMSoqd593MqTsItJNCkSSl53HJYeKR5wfsDdp2yljjUQJLfVwAWLoBNfx1HThteqygGQ0ZEpXpQ==", "dev": true, "requires": { "@sinonjs/formatio": "^2.0.0", - "diff": "^3.1.0", + "diff": "^3.5.0", "lodash.get": "^4.4.2", - "lolex": "^2.2.0", - "nise": "^1.2.0", - "supports-color": "^5.1.0", - "type-detect": "^4.0.5" + "lolex": "^2.4.2", + "nise": "^1.3.3", + "supports-color": "^5.4.0", + "type-detect": "^4.0.8" }, "dependencies": { "has-flag": { @@ -7004,6 +6250,12 @@ "requires": { "has-flag": "^3.0.0" } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true } } }, @@ -7013,12 +6265,6 @@ "integrity": "sha512-+cqeKiuMZjZs800fRf4kjJR/Pp4p7bYY3ciZHClFNS8tSzJoAcWni/ZUZD8TrfZ+oFRyLiKWX3fTClDATGy5vQ==", "dev": true }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, "slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", @@ -7205,24 +6451,6 @@ "urix": "^0.1.0" } }, - "source-map-support": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", - "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "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-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", @@ -7709,12 +6937,6 @@ "tweetnacl": "~0.14.0" } }, - "stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", - "dev": true - }, "staged-git-files": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz", @@ -7799,12 +7021,6 @@ } } }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, "stream-consume": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", @@ -7817,15 +7033,6 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "stream-to-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", - "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", - "dev": true, - "requires": { - "any-observable": "^0.2.0" - } - }, "string-argv": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", @@ -7867,9 +7074,9 @@ } }, "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", "dev": true }, "strip-ansi": { @@ -7927,15 +7134,9 @@ } }, "symbol-observable": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", - "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", - "dev": true - }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, "tedious": { @@ -8289,22 +7490,11 @@ "punycode": "^1.4.1" } }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", - "dev": true - } - } + "tslib": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", + "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==", + "dev": true }, "tunnel-agent": { "version": "0.6.0", @@ -8389,6 +7579,11 @@ "ms": "2.0.0" } }, + "dotenv": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -9041,15 +8236,6 @@ } } }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -9059,38 +8245,6 @@ "defaults": "^1.0.3" } }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", - "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.19" - } - }, - "whatwg-mimetype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", - "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", - "dev": true - }, - "whatwg-url": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", - "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", @@ -9182,28 +8336,12 @@ "signal-exit": "^3.0.2" } }, - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } - }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", diff --git a/package.json b/package.json index 4c76ae2..cc2cd09 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "gulp-typescript": "^4.0.2", "husky": "^0.14.3", "istanbul": "^0.4.5", - "lint-staged": "^7.0.5", + "lint-staged": "^7.2.0", "mocha": "^5.1.1", "prettier": "^1.12.1", "remap-istanbul": "^0.11.1", From 36ed40e679cb36d4d02a6ca84550e0baf925ddb7 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 19 Jun 2018 23:45:06 +0200 Subject: [PATCH 021/130] fixing oracle output format --- changelog.md => CHANGELOG.md | 2 ++ src/drivers/OracleDriver.ts | 1 + 2 files changed, 3 insertions(+) rename changelog.md => CHANGELOG.md (83%) diff --git a/changelog.md b/CHANGELOG.md similarity index 83% rename from changelog.md rename to CHANGELOG.md index 042c8c5..2f2c921 100644 --- a/changelog.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## 0.2.18 +* oracle output format fixed ## 0.2.17 diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 2b9b5d3..751967c 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -9,6 +9,7 @@ export class OracleDriver extends AbstractDriver { super(); try { this.Oracle = require("oracledb"); + this.Oracle.outFormat = this.Oracle.OBJECT; } catch (error) { TomgUtils.LogError("", false, error); throw error; From e33c6b23f8b10051614085b35a25202eff82d525 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 19 Jun 2018 23:49:50 +0200 Subject: [PATCH 022/130] 0.2.18 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ecb495..052f484 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.17", + "version": "0.2.18", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index cc2cd09..a7ffd48 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.17", + "version": "0.2.18", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From 49eeb1fbafb6b39a907ab14ebf1336683cbea85d Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 29 Jun 2018 05:49:41 +0000 Subject: [PATCH 023/130] fix(package): update yargs to version 12.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a7ffd48..2caccc5 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "reflect-metadata": "^0.1.10", "typeorm": "^0.2.4", "typescript": "^2.8.3", - "yargs": "^11.1.0", + "yargs": "^12.0.1", "sqlite3": "^4.0.0", "yn": "^2.0.0" }, From dcb414df17903a18bbb2de2a41eb7de6eec36dc5 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 29 Jun 2018 06:01:35 +0000 Subject: [PATCH 024/130] chore(package): update lockfile https://npm.im/greenkeeper-lockfile --- package-lock.json | 113 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 103 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 052f484..e56a4ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7561,6 +7561,11 @@ "color-convert": "^1.9.0" } }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", @@ -7571,6 +7576,16 @@ "supports-color": "^5.3.0" } }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -7605,6 +7620,33 @@ "requires": { "has-flag": "^3.0.0" } + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^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": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "requires": { + "camelcase": "^4.1.0" + } } } }, @@ -8356,6 +8398,11 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -8419,13 +8466,13 @@ } }, "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", + "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", "requires": { "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", "get-caller-file": "^1.0.1", "os-locale": "^2.0.0", "require-directory": "^2.1.1", @@ -8433,8 +8480,8 @@ "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "cliui": { @@ -8446,13 +8493,59 @@ "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "requires": { + "xregexp": "4.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" } } }, "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "requires": { "camelcase": "^4.1.0" }, From 5c34bac4a944d81acb88d2480435bb20c1e2ad10 Mon Sep 17 00:00:00 2001 From: pii Date: Thu, 12 Jul 2018 17:14:07 -0300 Subject: [PATCH 025/130] fix namingStrategy for entity name --- src/drivers/AbstractDriver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 9baa5c5..4885515 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -56,7 +56,7 @@ export abstract class AbstractDriver { } changeEntityNames(dbModel: DatabaseModel) { dbModel.entities.forEach(entity => { - let newName = this.namingStrategy.columnName(entity.EntityName); + let newName = this.namingStrategy.entityName(entity.EntityName); dbModel.entities.forEach(entity2 => { entity2.Columns.forEach(column => { column.relations.forEach(relation => { From a19592498a3a728d51b5f6de1a1ea0a46e7382b3 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Tue, 17 Jul 2018 02:05:30 +0000 Subject: [PATCH 026/130] chore(package): update fs-extra to version 7.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2caccc5..6427ffd 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "chai-subset": "^1.6.0", "codecov": "^3.0.1", "dotenv": "^6.0.0", - "fs-extra": "^6.0.0", + "fs-extra": "^7.0.0", "gulp": "^3.9.1", "gulp-clean": "^0.4.0", "gulp-istanbul": "^1.1.3", From 5bbd565b745e649af4ef34197caa3fd42569ea27 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 17 Jul 2018 02:17:23 +0000 Subject: [PATCH 027/130] chore(package): update lockfile https://npm.im/greenkeeper-lockfile --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index e56a4ba..1e8b40c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1861,9 +1861,9 @@ } }, "fs-extra": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.0.tgz", - "integrity": "sha512-lk2cUCo8QzbiEWEbt7Cw3m27WMiRG321xsssbcIpfMhpRjrlC08WBOVQqj1/nQYYNnPtyIhP1oqLO3QwT2tPCw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -7872,9 +7872,9 @@ } }, "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unset-value": { From 71688d834329c1241cb7b695f3d067146506bbdc Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 29 Jul 2018 22:14:54 +0200 Subject: [PATCH 028/130] dependencies update --- package-lock.json | 1247 ++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 542 insertions(+), 707 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1e8b40c..4b9ea3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -206,8 +206,7 @@ "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" }, "acorn": { "version": "5.4.1", @@ -237,7 +236,6 @@ "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", @@ -355,12 +353,26 @@ "buffer-equal": "^1.0.0" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -421,17 +433,21 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assertion-error": { "version": "1.1.0", @@ -453,26 +469,23 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", "dev": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "dev": true + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "babel-runtime": { "version": "6.26.0", @@ -523,7 +536,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, "optional": true, "requires": { "tweetnacl": "^0.14.3" @@ -600,6 +612,35 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -667,8 +708,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "center-align": { "version": "0.1.3", @@ -750,6 +790,11 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + }, "ci-info": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", @@ -1003,8 +1048,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "code-point-at": { "version": "1.1.0", @@ -1082,7 +1126,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -1129,6 +1172,11 @@ "xdg-basedir": "^3.0.0" } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "constant-case": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", @@ -1270,7 +1318,6 @@ "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" } @@ -1381,8 +1428,12 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "deprecated": { "version": "0.0.1", @@ -1402,6 +1453,11 @@ "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", "dev": true }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, "detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", @@ -1505,7 +1561,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, "optional": true, "requires": { "jsbn": "~0.1.0" @@ -1673,6 +1728,98 @@ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", "dev": true }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -1685,8 +1832,7 @@ "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extend-shallow": { "version": "1.1.4", @@ -1705,11 +1851,46 @@ } } }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fancy-log": { "version": "1.3.2", @@ -1725,14 +1906,12 @@ "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", @@ -1755,6 +1934,29 @@ "object-assign": "^4.1.0" } }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "find-index": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", @@ -1837,8 +2039,7 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.1.4", @@ -1871,6 +2072,14 @@ "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "^2.2.1" + } + }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -1904,6 +2113,54 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "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=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "gaze": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", @@ -1950,7 +2207,6 @@ "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" } @@ -2818,14 +3074,12 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, "requires": { "ajv": "^5.1.0", "har-schema": "^2.0.0" @@ -2878,8 +3132,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "has-value": { "version": "1.0.0", @@ -2995,7 +3248,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -3034,6 +3286,14 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -3072,8 +3332,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "interpret": { "version": "1.1.0", @@ -3249,6 +3508,15 @@ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", "dev": true }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", @@ -3346,8 +3614,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-unc-path": { "version": "0.1.2", @@ -3403,8 +3670,7 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul": { "version": "0.4.5", @@ -3523,7 +3789,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, "optional": true }, "json-parse-better-errors": { @@ -3535,14 +3800,12 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, "json-stable-stringify": { "version": "1.0.1", @@ -3556,8 +3819,7 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "jsonfile": { "version": "4.0.0", @@ -3595,7 +3857,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -4394,9 +4655,9 @@ } }, "micromatch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.8.tgz", - "integrity": "sha512-/XeuOQqYg+B5kwjDWekXseSwGS7CzE0w9Gjo4Cjkf/uFitNh47NrZHAY2vp/oS2YQVfebPIdbEIvgdy+kIcAog==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -4411,7 +4672,7 @@ "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "to-regex": "^3.0.2" }, "dependencies": { "arr-diff": { @@ -4420,104 +4681,6 @@ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "kind-of": "^6.0.2", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -4526,136 +4689,15 @@ "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-plain-object": "^2.0.4" } }, "kind-of": { @@ -4663,20 +4705,30 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } } } }, "mime-db": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" }, "mime-types": { "version": "2.1.17", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, "requires": { "mime-db": "~1.30.0" } @@ -4699,6 +4751,35 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, + "minipass": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", + "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + } + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "requires": { + "minipass": "^2.2.1" + } + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -4832,9 +4913,9 @@ } }, "nan": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", - "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, "nanomatch": { "version": "1.2.9", @@ -4907,6 +4988,16 @@ "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", "dev": true }, + "needle": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz", + "integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==", + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -4940,6 +5031,39 @@ "lower-case": "^1.1.1" } }, + "node-pre-gyp": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", + "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + } + } + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -4964,6 +5088,20 @@ "once": "^1.3.2" } }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==" + }, + "npm-packlist": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", + "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, "npm-path": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", @@ -4992,6 +5130,17 @@ "which": "^1.2.10" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -5000,8 +5149,7 @@ "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { "version": "4.1.1", @@ -5272,8 +5420,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "2.1.0", @@ -5285,6 +5432,20 @@ "mem": "^1.1.0" } }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -5516,8 +5677,7 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg": { "version": "7.4.1", @@ -5749,20 +5909,17 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -5773,14 +5930,12 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } }, @@ -6078,7 +6233,6 @@ "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" } @@ -6512,407 +6666,61 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlite3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.0.tgz", - "integrity": "sha512-6OlcAQNGaRSBLK1CuaRbKwlMFBb9DEhzmZyQP+fltNRF6XcIMpVIfXCBEcXPe1d4v9LnhkQUYkknDbA5JReqJg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.2.tgz", + "integrity": "sha512-51ferIRwYOhzUEtogqOa/y9supADlAht98bF/gbIi6WkzRJX6Yioldxbzj1MV4yV+LgdKD/kkHwFTeFXOG4htA==", "requires": { - "nan": "~2.9.2", - "node-pre-gyp": "~0.9.0" + "nan": "~2.10.0", + "node-pre-gyp": "^0.10.3", + "request": "^2.87.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "iconv-lite": { - "version": "0.4.19", - "bundled": true - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minipass": { - "version": "2.2.1", - "bundled": true, - "requires": { - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.9.0", - "bundled": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true - }, - "rc": { - "version": "1.2.6", - "bundled": true, - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } } } }, - "readable-stream": { - "version": "2.3.5", - "bundled": true, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true - }, - "sax": { - "version": "1.2.4", - "bundled": true - }, - "semver": { - "version": "5.5.0", - "bundled": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true - }, - "tar": { - "version": "4.4.0", - "bundled": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.3", - "minipass": "^2.2.1", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true } } }, @@ -6925,7 +6733,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -7113,8 +6920,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "supports-color": { "version": "4.5.0", @@ -7139,6 +6945,32 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, + "tar": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz", + "integrity": "sha512-mq9ixIYfNF9SK0IS/h2HKMu8Q2iaCuhDDsZhdEag/FHv8fOaYld4vN7ouMgcSSt5WKZzPs8atclTcJm36OTh4w==", + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.3", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + } + } + }, "tedious": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.1.5.tgz", @@ -7485,7 +7317,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, "requires": { "punycode": "^1.4.1" } @@ -7500,7 +7331,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -7509,7 +7339,6 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, "optional": true }, "type-check": { @@ -8076,8 +7905,7 @@ "uuid": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "v8flags": { "version": "2.1.1", @@ -8098,7 +7926,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -8300,6 +8127,14 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, "widest-line": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", diff --git a/package.json b/package.json index 6427ffd..d1d6ddf 100644 --- a/package.json +++ b/package.json @@ -27,10 +27,10 @@ "mysql": "^2.15.0", "pg": "^7.4.0", "reflect-metadata": "^0.1.10", + "sqlite3": "^4.0.2", "typeorm": "^0.2.4", "typescript": "^2.8.3", "yargs": "^12.0.1", - "sqlite3": "^4.0.0", "yn": "^2.0.0" }, "devDependencies": { From b0678e6474729e6c7d4e8a8b367a1b3c20a3de20 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 31 Jul 2018 22:18:14 +0200 Subject: [PATCH 029/130] fixing naming strategy bug - naming of related column in owner relation --- src/drivers/AbstractDriver.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 4885515..c72895e 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -40,7 +40,8 @@ export abstract class AbstractDriver { column2.relations .filter(relation => { return ( - relation.ownerTable == entity.EntityName && + relation.relatedTable == + entity.EntityName && relation.ownerColumn == column.tsName ); }) From 4a32d103a5e6637b487185187be2809943b1d538 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 31 Jul 2018 22:29:15 +0200 Subject: [PATCH 030/130] 0.2.19 --- CHANGELOG.md | 4 ++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f2c921..ba7497f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.2.19 +* custom naming strategy fiexes +* dependencies update + ## 0.2.18 * oracle output format fixed diff --git a/package-lock.json b/package-lock.json index 4b9ea3c..94f2fbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.18", + "version": "0.2.19", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d1d6ddf..091dc2b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.18", + "version": "0.2.19", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From f3a79c2e381596be8a93bdea9d181279a0c8f92f Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 26 Aug 2018 01:19:28 +0200 Subject: [PATCH 031/130] #71 relation onUpdate --- src/entity.mst | 2 +- src/models/RelationInfo.ts | 10 ++++- src/models/RelationTempInfo.ts | 10 ++++- .../github-issues/71/entity/Post.ts | 41 +++++++++++++++++++ .../github-issues/71/entity/PostAuthor.ts | 24 +++++++++++ .../github-issues/71/entity/PostCategory.ts | 25 +++++++++++ .../github-issues/71/entity/PostDetails.ts | 23 +++++++++++ .../github-issues/71/entity/PostReader.ts | 19 +++++++++ test/integration/githubIssues.test.ts | 3 ++ 9 files changed, 152 insertions(+), 5 deletions(-) create mode 100644 test/integration/github-issues/71/entity/Post.ts create mode 100644 test/integration/github-issues/71/entity/PostAuthor.ts create mode 100644 test/integration/github-issues/71/entity/PostCategory.ts create mode 100644 test/integration/github-issues/71/entity/PostDetails.ts create mode 100644 test/integration/github-issues/71/entity/PostReader.ts diff --git a/src/entity.mst b/src/entity.mst index 1cba3ed..35ccf37 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -24,7 +24,7 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man }) {{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; {{/relations}}{{#relations}} - @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#actionOnDelete}},{ onDelete: '{{.}}' }{{/actionOnDelete}}{{/if}}){{#isOwner}} + @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; {{else}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; diff --git a/src/models/RelationInfo.ts b/src/models/RelationInfo.ts index 58fc7fe..10b9824 100644 --- a/src/models/RelationInfo.ts +++ b/src/models/RelationInfo.ts @@ -5,8 +5,14 @@ export class RelationInfo { relatedColumn: string; ownerTable: string; ownerColumn: string; - actionOnDelete: "RESTRICT" | "CASCADE" | "SET NULL" | null; - actionOnUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | null; + actionOnDelete: + | "RESTRICT" + | "CASCADE" + | "SET NULL" + | "DEFAULT" + | "NO ACTION" + | null; + actionOnUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | "DEFAULT" | null; relationIdField: boolean = false; get isOneToMany(): boolean { diff --git a/src/models/RelationTempInfo.ts b/src/models/RelationTempInfo.ts index 1e1063f..0081955 100644 --- a/src/models/RelationTempInfo.ts +++ b/src/models/RelationTempInfo.ts @@ -3,7 +3,13 @@ interface RelationTempInfo { ownerColumnsNames: string[]; referencedTable: string; referencedColumnsNames: string[]; - actionOnDelete: "RESTRICT" | "CASCADE" | "SET NULL" | null; - actionOnUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | null; + actionOnDelete: + | "RESTRICT" + | "CASCADE" + | "SET NULL" + | "DEFAULT" + | "NO ACTION" + | null; + actionOnUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | "DEFAULT" | null; object_id: number | string; } diff --git a/test/integration/github-issues/71/entity/Post.ts b/test/integration/github-issues/71/entity/Post.ts new file mode 100644 index 0000000..c9b85b6 --- /dev/null +++ b/test/integration/github-issues/71/entity/Post.ts @@ -0,0 +1,41 @@ +import { Index, Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable } from "typeorm"; +import { PostReader } from "./PostReader"; +import { PostAuthor } from "./PostAuthor"; +import { PostCategory } from "./PostCategory"; +import { PostDetails } from "./PostDetails"; + + +@Entity("Post") +export class Post { + + @Column("int", { + nullable: false, + primary: true, + name: "Id" + }) + Id: number; + + @OneToOne(type => PostAuthor, PostAuthor => PostAuthor.Id, + { + // onDelete: "CASCADE", + // onUpdate: "CASCADE" + }) + postAuthor: PostAuthor; + + @OneToOne(type => PostReader, PostReader => PostReader.Id) + postReader: PostReader; + + @OneToOne(type => PostCategory, PostCategory => PostCategory.Id, + { + // onDelete: "RESTRICT", + // onUpdate: "RESTRICT" + }) + postCategory: PostCategory; + + @OneToOne(type => PostDetails, PostDetails => PostDetails.Id, + { + // onDelete: "SET NULL", + // onUpdate: "SET NULL" + }) + postDetails: PostDetails; +} diff --git a/test/integration/github-issues/71/entity/PostAuthor.ts b/test/integration/github-issues/71/entity/PostAuthor.ts new file mode 100644 index 0000000..70fcfc7 --- /dev/null +++ b/test/integration/github-issues/71/entity/PostAuthor.ts @@ -0,0 +1,24 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { Post } from "./Post"; + + +@Entity("PostAuthor") +export class PostAuthor { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + + + @OneToOne(type => Post, Post => Post.Id,{ + onDelete: "CASCADE", + // onUpdate: "CASCADE" + }) + @JoinColumn() + post:Post; + +} diff --git a/test/integration/github-issues/71/entity/PostCategory.ts b/test/integration/github-issues/71/entity/PostCategory.ts new file mode 100644 index 0000000..688d343 --- /dev/null +++ b/test/integration/github-issues/71/entity/PostCategory.ts @@ -0,0 +1,25 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { Post } from "./Post"; + + +@Entity("PostCategory") +export class PostCategory { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + + + @OneToOne(type => Post, Post => Post.Id, + { + // onDelete: "RESTRICT", + // onUpdate: "RESTRICT" + }) + @JoinColumn() + post:Post; + +} diff --git a/test/integration/github-issues/71/entity/PostDetails.ts b/test/integration/github-issues/71/entity/PostDetails.ts new file mode 100644 index 0000000..7935433 --- /dev/null +++ b/test/integration/github-issues/71/entity/PostDetails.ts @@ -0,0 +1,23 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { Post } from "./Post"; + + +@Entity("PostDetails") +export class PostDetails { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + @OneToOne(type => Post, Post => Post.Id, + { + onDelete: "SET NULL", + // onUpdate: "SET NULL" + }) + @JoinColumn() + post:Post; + +} diff --git a/test/integration/github-issues/71/entity/PostReader.ts b/test/integration/github-issues/71/entity/PostReader.ts new file mode 100644 index 0000000..9e91689 --- /dev/null +++ b/test/integration/github-issues/71/entity/PostReader.ts @@ -0,0 +1,19 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { Post } from "./Post"; + + +@Entity("PostReader") +export class PostReader { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + @OneToOne(type => Post, Post => Post.Id) + @JoinColumn() + post:Post; + +} diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index 1c348ed..2cb6f8d 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -41,6 +41,9 @@ describe("GitHub issues", async function () { if (dbDriver == 'mysql' || dbDriver == 'mariadb' || dbDriver == 'oracle' || dbDriver == 'sqlite') continue; break; + // case '71': + // xit(dbDriver); + // continue; default: break; } From d7ee4990c17bdd5bde9fe86106fe8bd7ff45e0cb Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 26 Aug 2018 01:51:09 +0200 Subject: [PATCH 032/130] #94 RelationInfo.isManyToOne --- src/models/RelationInfo.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/RelationInfo.ts b/src/models/RelationInfo.ts index 10b9824..fb74a3f 100644 --- a/src/models/RelationInfo.ts +++ b/src/models/RelationInfo.ts @@ -25,6 +25,6 @@ export class RelationInfo { return this.relationType == "OneToOne"; } get isManyToOne(): boolean { - return this.relationType == "OneToOne"; + return this.relationType == "ManyToOne"; } } From 76065733f742a91ed4bf4175c8b98931517e3351 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 26 Aug 2018 12:37:02 +0200 Subject: [PATCH 033/130] #81 postgress support for citext, hstore column types --- src/drivers/PostgresDriver.ts | 24 ++++++++++++++++++- .../entityTypes/postgres/entity/Post.ts | 8 +++---- test/integration/githubIssues.test.ts | 3 --- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 989322e..c84beaf 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -24,6 +24,7 @@ export class PostgresDriver extends AbstractDriver { let response: { table_name: string; column_name: string; + udt_name: string; column_default: string; is_nullable: string; data_type: string; @@ -33,7 +34,7 @@ export class PostgresDriver extends AbstractDriver { isidentity: string; isunique: number; }[] = (await this.Connection - .query(`SELECT table_name,column_name,column_default,is_nullable, + .query(`SELECT table_name,column_name,udt_name,column_default,is_nullable, data_type,character_maximum_length,numeric_precision,numeric_scale, case when column_default LIKE 'nextval%' then 'YES' else 'NO' end isidentity, (SELECT count(*) @@ -244,6 +245,27 @@ export class PostgresDriver extends AbstractDriver { case "daterange": colInfo.ts_type = "string"; break; + case "USER-DEFINED": + switch (resp.udt_name) { + case "citext": + colInfo.sql_type = resp.udt_name; + colInfo.ts_type = "string"; + break; + case "hstore": + colInfo.sql_type = resp.udt_name; + colInfo.ts_type = "string"; + break; + default: + TomgUtils.LogError( + `Unknown USER-DEFINED column type: ${ + resp.udt_name + } table name: ${ + resp.table_name + } column name: ${resp.column_name}` + ); + break; + } + break; default: TomgUtils.LogError( `Unknown column type: ${ diff --git a/test/integration/entityTypes/postgres/entity/Post.ts b/test/integration/entityTypes/postgres/entity/Post.ts index 03e2075..79f26dc 100644 --- a/test/integration/entityTypes/postgres/entity/Post.ts +++ b/test/integration/entityTypes/postgres/entity/Post.ts @@ -66,11 +66,11 @@ export class Post { @Column("text") text: string; - // @Column("citext") - // citext: string; + @Column("citext") + citext: string; - // @Column("hstore") - // hstore: string; + @Column("hstore") + hstore: string; @Column("bytea") bytea: Buffer; diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index 2cb6f8d..1c348ed 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -41,9 +41,6 @@ describe("GitHub issues", async function () { if (dbDriver == 'mysql' || dbDriver == 'mariadb' || dbDriver == 'oracle' || dbDriver == 'sqlite') continue; break; - // case '71': - // xit(dbDriver); - // continue; default: break; } From ea62f0c686f6e6bcdd23f5b0baebf0b2d88bd5ae Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 26 Aug 2018 12:48:24 +0200 Subject: [PATCH 034/130] #85 postgres geometry type --- src/drivers/PostgresDriver.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index c84beaf..a06ebdd 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -246,14 +246,12 @@ export class PostgresDriver extends AbstractDriver { colInfo.ts_type = "string"; break; case "USER-DEFINED": + colInfo.sql_type = resp.udt_name; + colInfo.ts_type = "string"; switch (resp.udt_name) { case "citext": - colInfo.sql_type = resp.udt_name; - colInfo.ts_type = "string"; - break; case "hstore": - colInfo.sql_type = resp.udt_name; - colInfo.ts_type = "string"; + case "geometry": break; default: TomgUtils.LogError( From f10242f57da168bfec2fb8e0993db83baec46d06 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 26 Aug 2018 16:31:50 +0200 Subject: [PATCH 035/130] #56 Postgres Array Column Type --- src/drivers/PostgresDriver.ts | 467 ++++++++++-------- src/entity.mst | 3 +- src/models/ColumnInfo.ts | 1 + test/drivers/MssqlDriver.test.ts | 1 + .../entityTypes/postgres/entity/PostArrays.ts | 191 +++++++ 5 files changed, 458 insertions(+), 205 deletions(-) create mode 100644 test/integration/entityTypes/postgres/entity/PostArrays.ts diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index a06ebdd..b117522 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -63,208 +63,24 @@ export class PostgresDriver extends AbstractDriver { colInfo.default = colInfo.is_generated ? null : resp.column_default; - colInfo.sql_type = resp.data_type; - switch (resp.data_type) { - case "int2": - colInfo.ts_type = "number"; - break; - case "int4": - colInfo.ts_type = "number"; - break; - case "int8": - colInfo.ts_type = "string"; - break; - case "smallint": - colInfo.ts_type = "number"; - break; - case "integer": - colInfo.ts_type = "number"; - break; - case "bigint": - colInfo.ts_type = "string"; - break; - case "decimal": - colInfo.ts_type = "string"; - break; - case "numeric": - colInfo.ts_type = "string"; - break; - case "real": - colInfo.ts_type = "number"; - break; - case "float": - colInfo.ts_type = "number"; - break; - case "float4": - colInfo.ts_type = "number"; - break; - case "float8": - colInfo.ts_type = "number"; - break; - case "double precision": - colInfo.ts_type = "number"; - break; - case "money": - colInfo.ts_type = "string"; - break; - case "character varying": - colInfo.ts_type = "string"; - break; - case "varchar": - colInfo.ts_type = "string"; - break; - case "character": - colInfo.ts_type = "string"; - break; - case "char": - colInfo.ts_type = "string"; - break; - case "text": - colInfo.ts_type = "string"; - break; - case "citext": - colInfo.ts_type = "string"; - break; - case "hstore": - colInfo.ts_type = "string"; - break; - case "bytea": - colInfo.ts_type = "Buffer"; - break; - case "bit": - colInfo.ts_type = "string"; - break; - case "varbit": - colInfo.ts_type = "string"; - break; - case "bit varying": - colInfo.ts_type = "string"; - break; - case "timetz": - colInfo.ts_type = "string"; - break; - case "timestamptz": - colInfo.ts_type = "Date"; - break; - case "timestamp": - colInfo.ts_type = "string"; - break; - case "timestamp without time zone": - colInfo.ts_type = "Date"; - break; - case "timestamp with time zone": - colInfo.ts_type = "Date"; - break; - case "date": - colInfo.ts_type = "string"; - break; - case "time": - colInfo.ts_type = "string"; - break; - case "time without time zone": - colInfo.ts_type = "string"; - break; - case "time with time zone": - colInfo.ts_type = "string"; - break; - case "interval": - colInfo.ts_type = "any"; - break; - case "bool": - colInfo.ts_type = "boolean"; - break; - case "boolean": - colInfo.ts_type = "boolean"; - break; - case "enum": - colInfo.ts_type = "string"; - break; - case "point": - colInfo.ts_type = "string | Object"; - break; - case "line": - colInfo.ts_type = "string"; - break; - case "lseg": - colInfo.ts_type = "string | string[]"; - break; - case "box": - colInfo.ts_type = "string | Object"; - break; - case "path": - colInfo.ts_type = "string"; - break; - case "polygon": - colInfo.ts_type = "string"; - break; - case "circle": - colInfo.ts_type = "string | Object"; - break; - case "cidr": - colInfo.ts_type = "string"; - break; - case "inet": - colInfo.ts_type = "string"; - break; - case "macaddr": - colInfo.ts_type = "string"; - break; - case "tsvector": - colInfo.ts_type = "string"; - break; - case "tsquery": - colInfo.ts_type = "string"; - break; - case "uuid": - colInfo.ts_type = "string"; - break; - case "xml": - colInfo.ts_type = "string"; - break; - case "json": - colInfo.ts_type = "Object"; - break; - case "jsonb": - colInfo.ts_type = "Object"; - break; - case "int4range": - colInfo.ts_type = "string"; - break; - case "int8range": - colInfo.ts_type = "string"; - break; - case "numrange": - colInfo.ts_type = "string"; - break; - case "tsrange": - colInfo.ts_type = "string"; - break; - case "tstzrange": - colInfo.ts_type = "string"; - break; - case "daterange": - colInfo.ts_type = "string"; - break; - case "USER-DEFINED": - colInfo.sql_type = resp.udt_name; - colInfo.ts_type = "string"; - switch (resp.udt_name) { - case "citext": - case "hstore": - case "geometry": - break; - default: - TomgUtils.LogError( - `Unknown USER-DEFINED column type: ${ - resp.udt_name - } table name: ${ - resp.table_name - } column name: ${resp.column_name}` - ); - break; - } - break; - default: + + var columnTypes = this.MatchColumnTypes( + resp.data_type, + resp.udt_name + ); + if (!columnTypes.sql_type || !columnTypes.ts_type) { + if ( + resp.data_type == "USER-DEFINED" || + resp.data_type == "ARRAY" + ) { + TomgUtils.LogError( + `Unknown ${resp.data_type} column type: ${ + resp.udt_name + } table name: ${ + resp.table_name + } column name: ${resp.column_name}` + ); + } else { TomgUtils.LogError( `Unknown column type: ${ resp.data_type @@ -272,8 +88,19 @@ export class PostgresDriver extends AbstractDriver { resp.table_name } column name: ${resp.column_name}` ); - break; + } + return; } + colInfo.sql_type = columnTypes.sql_type; + colInfo.ts_type = columnTypes.ts_type; + colInfo.is_array = columnTypes.is_array; + if (colInfo.is_array) { + colInfo.ts_type = colInfo.ts_type + .split("|") + .map(x => x.replace("|", "").trim() + "[]") + .join(" | "); + } + if ( this.ColumnTypesWithPrecision.some( v => v == colInfo.sql_type @@ -302,11 +129,243 @@ export class PostgresDriver extends AbstractDriver { ? resp.character_maximum_length : null; } - if (colInfo.sql_type) ent.Columns.push(colInfo); + if (colInfo.sql_type && colInfo.ts_type) { + ent.Columns.push(colInfo); + } }); }); return entities; } + + MatchColumnTypes(data_type: string, udt_name: string) { + let ret: { + ts_type: + | "number" + | "string" + | "boolean" + | "Date" + | "Buffer" + | "Object" + | "string | Object" + | "string | string[]" + | "any" + | null; + sql_type: string | null; + is_array: boolean; + } = { ts_type: null, sql_type: null, is_array: false }; + ret.sql_type = data_type; + switch (data_type) { + case "int2": + ret.ts_type = "number"; + break; + case "int4": + ret.ts_type = "number"; + break; + case "int8": + ret.ts_type = "string"; + break; + case "smallint": + ret.ts_type = "number"; + break; + case "integer": + ret.ts_type = "number"; + break; + case "bigint": + ret.ts_type = "string"; + break; + case "decimal": + ret.ts_type = "string"; + break; + case "numeric": + ret.ts_type = "string"; + break; + case "real": + ret.ts_type = "number"; + break; + case "float": + ret.ts_type = "number"; + break; + case "float4": + ret.ts_type = "number"; + break; + case "float8": + ret.ts_type = "number"; + break; + case "double precision": + ret.ts_type = "number"; + break; + case "money": + ret.ts_type = "string"; + break; + case "character varying": + ret.ts_type = "string"; + break; + case "varchar": + ret.ts_type = "string"; + break; + case "character": + ret.ts_type = "string"; + break; + case "char": + ret.ts_type = "string"; + break; + case "bpchar": + ret.sql_type = "char"; + ret.ts_type = "string"; + break; + case "text": + ret.ts_type = "string"; + break; + case "citext": + ret.ts_type = "string"; + break; + case "hstore": + ret.ts_type = "string"; + break; + case "bytea": + ret.ts_type = "Buffer"; + break; + case "bit": + ret.ts_type = "string"; + break; + case "varbit": + ret.ts_type = "string"; + break; + case "bit varying": + ret.ts_type = "string"; + break; + case "timetz": + ret.ts_type = "string"; + break; + case "timestamptz": + ret.ts_type = "Date"; + break; + case "timestamp": + ret.ts_type = "string"; + break; + case "timestamp without time zone": + ret.ts_type = "Date"; + break; + case "timestamp with time zone": + ret.ts_type = "Date"; + break; + case "date": + ret.ts_type = "string"; + break; + case "time": + ret.ts_type = "string"; + break; + case "time without time zone": + ret.ts_type = "string"; + break; + case "time with time zone": + ret.ts_type = "string"; + break; + case "interval": + ret.ts_type = "any"; + break; + case "bool": + ret.ts_type = "boolean"; + break; + case "boolean": + ret.ts_type = "boolean"; + break; + case "enum": + ret.ts_type = "string"; + break; + case "point": + ret.ts_type = "string | Object"; + break; + case "line": + ret.ts_type = "string"; + break; + case "lseg": + ret.ts_type = "string | string[]"; + break; + case "box": + ret.ts_type = "string | Object"; + break; + case "path": + ret.ts_type = "string"; + break; + case "polygon": + ret.ts_type = "string"; + break; + case "circle": + ret.ts_type = "string | Object"; + break; + case "cidr": + ret.ts_type = "string"; + break; + case "inet": + ret.ts_type = "string"; + break; + case "macaddr": + ret.ts_type = "string"; + break; + case "tsvector": + ret.ts_type = "string"; + break; + case "tsquery": + ret.ts_type = "string"; + break; + case "uuid": + ret.ts_type = "string"; + break; + case "xml": + ret.ts_type = "string"; + break; + case "json": + ret.ts_type = "Object"; + break; + case "jsonb": + ret.ts_type = "Object"; + break; + case "int4range": + ret.ts_type = "string"; + break; + case "int8range": + ret.ts_type = "string"; + break; + case "numrange": + ret.ts_type = "string"; + break; + case "tsrange": + ret.ts_type = "string"; + break; + case "tstzrange": + ret.ts_type = "string"; + break; + case "daterange": + ret.ts_type = "string"; + break; + case "ARRAY": + let z = this.MatchColumnTypes(udt_name.substring(1), udt_name); + ret.ts_type = z.ts_type; + ret.sql_type = z.sql_type; + ret.is_array = true; + break; + case "USER-DEFINED": + ret.sql_type = udt_name; + ret.ts_type = "string"; + switch (udt_name) { + case "citext": + case "hstore": + case "geometry": + break; + default: + ret.ts_type = null; + ret.sql_type = null; + break; + } + break; + default: + ret.ts_type = null; + ret.sql_type = null; + break; + } + return ret; + } async GetIndexesFromEntity( entities: EntityInfo[], schema: string diff --git a/src/entity.mst b/src/entity.mst index 35ccf37..8fa72a8 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -19,7 +19,8 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man precision:{{.}},{{/numericPrecision}}{{#numericScale}} scale:{{.}},{{/numericScale}}{{#isPrimary}} primary:{{isPrimary}},{{/isPrimary}}{{#enumOptions}} - enum:[{{.}}],{{/enumOptions}} + enum:[{{.}}],{{/enumOptions}}{{#is_array}} + array:{{is_array}},{{/is_array}} name:"{{sqlName}}" }) {{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index 455c4d4..056c2f7 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -21,6 +21,7 @@ export class ColumnInfo { width: number | null = null; isPrimary: boolean = false; is_generated: boolean = false; + is_array: boolean = false; numericPrecision: number | null = null; numericScale: number | null = null; enumOptions: string | null = null; diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 0e28241..5cf0fa3 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -95,6 +95,7 @@ describe('MssqlDriver', function () { ts_type: 'number', enumOptions: null, is_unique:false, + is_array:false, relations: [], }) let result = await driver.GetCoulmnsFromEntity(entities, 'schema'); diff --git a/test/integration/entityTypes/postgres/entity/PostArrays.ts b/test/integration/entityTypes/postgres/entity/PostArrays.ts new file mode 100644 index 0000000..d880503 --- /dev/null +++ b/test/integration/entityTypes/postgres/entity/PostArrays.ts @@ -0,0 +1,191 @@ +import { Entity, PrimaryColumn, Column } from "typeorm"; + +@Entity("PostArrays") +export class PostArrays { + + @PrimaryColumn() + id: number; + + @Column() + name: string; + + @Column("int2", { array: true }) + int2: number[]; + + @Column("int4", { array: true }) + int4: number[]; + + @Column("int8", { array: true }) + int8: string[]; + + @Column("smallint", { array: true }) + smallint: number[]; + + @Column("integer", { array: true }) + integer: number[]; + + @Column("bigint", { array: true }) + bigint: string[]; + + @Column("decimal", { array: true }) + decimal: string[]; + + @Column("numeric", { array: true }) + numeric: string[]; + + @Column("real", { array: true }) + real: number[]; + + @Column("float", { array: true }) + float: number[]; + + @Column("float4", { array: true }) + float4: number[]; + + @Column("float8", { array: true }) + float8: number[]; + + @Column("double precision", { array: true }) + doublePrecision: number[]; + + @Column("money", { array: true }) + money: string[]; + + @Column("character varying", { array: true }) + characterVarying: string[]; + + @Column("varchar", { array: true }) + varchar: string[]; + + @Column("character", { array: true }) + character: string[]; + + @Column("char", { array: true }) + char: string[]; + + @Column("text", { array: true }) + text: string[]; + + @Column("citext", { array: true }) + citext: string[]; + + @Column("hstore", { array: true }) + hstore: string[]; + + @Column("bytea", { array: true }) + bytea: Buffer[]; + + @Column("bit", { array: true }) + bit: string[]; + + @Column("varbit", { array: true }) + varbit: string[]; + + @Column("bit varying", { array: true }) + bit_varying: string[]; + + @Column("timetz", { array: true }) + timetz: string[]; + + @Column("timestamptz", { array: true }) + timestamptz: Date[]; + + // @Column("timestamp", { array: true }) + // timestamp: Date[]; + + // @Column("timestamp without time zone", { array: true }) + // timestamp_without_time_zone: Date[]; + + @Column("timestamp with time zone", { array: true }) + timestamp_with_time_zone: Date[]; + + @Column("date", { array: true }) + date: string[]; + + @Column("time", { array: true }) + time: string[]; + @Column("time without time zone", { array: true }) + time_without_time_zone: string[]; + + @Column("time with time zone", { array: true }) + time_with_time_zone: string[]; + + @Column("interval", { array: true }) + interval: any[]; + + @Column("bool", { array: true }) + bool: boolean[]; + + @Column("boolean", { array: true }) + boolean: boolean[]; + + // @Column("enum", { array: true }) + // enum: string[]; + + @Column("point", { array: true }) + point: string[] | Object[]; + + @Column("line", { array: true }) + line: string[]; + + @Column("lseg", { array: true }) + lseg: string[] | string[][]; + + @Column("box", { array: true }) + box: string[] | Object[]; + + @Column("path", { array: true }) + path: string[]; + + @Column("polygon", { array: true }) + polygon: string[]; + + @Column("circle", { array: true }) + circle: string[] | Object[]; + + @Column("cidr", { array: true }) + cidr: string[]; + + @Column("inet", { array: true }) + inet: string[]; + + @Column("macaddr", { array: true }) + macaddr: string[]; + + @Column("tsvector", { array: true }) + tsvector: string[]; + + @Column("tsquery", { array: true }) + tsquery: string[]; + + @Column("uuid", { array: true }) + uuid: string[]; + + @Column("xml", { array: true }) + xml: string[]; + + @Column("json", { array: true }) + json: Object[]; + + @Column("jsonb", { array: true }) + jsonb: Object[]; + + @Column("int4range", { array: true }) + int4range: string[]; + + @Column("int8range", { array: true }) + int8range: string[]; + + @Column("numrange", { array: true }) + numrange: string[]; + + @Column("tsrange", { array: true }) + tsrange: string[]; + + @Column("tstzrange", { array: true }) + tstzrange: string[]; + + @Column("daterange", { array: true }) + daterange: string[]; + +} From c3d2fa8f9aefe4f259da7ec2f0e3926431a809ce Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 26 Aug 2018 19:05:36 +0200 Subject: [PATCH 036/130] 0.2.20 --- CHANGELOG.md | 5 +++++ package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 4 ++-- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba7497f..ee3d7ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.2.20 +* relation onUpdate fixes +* postgres support for citext, hstore, geometry, array column types +* upgraded typeorm version + ## 0.2.19 * custom naming strategy fiexes * dependencies update diff --git a/package-lock.json b/package-lock.json index 94f2fbe..f6f5a9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.19", + "version": "0.2.20", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -648,9 +648,9 @@ "dev": true }, "buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", - "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz", + "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" @@ -3282,9 +3282,9 @@ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ieee754": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", - "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" }, "ignore-walk": { "version": "3.0.1", @@ -5452,9 +5452,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { "p-try": "^1.0.0" } @@ -7363,9 +7363,9 @@ "dev": true }, "typeorm": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.4.tgz", - "integrity": "sha512-TLoLZaPCDZt4UAYxcdNO7Ta68+EkG0CwwuaWdxgs11cWHRTs4njFyKzW+cvgGQ2TlJX53adyb3tqbGAR19TBmg==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.7.tgz", + "integrity": "sha512-D7JxOBSqBiLAPu/M/4v15J++3klAWcv5WvYgrfl0iaaGObZJ/8UXm3oTpOtQUHfwJO9Cja8JMiwT9G7dyvwrxg==", "requires": { "app-root-path": "^2.0.1", "buffer": "^5.1.0", @@ -7434,18 +7434,18 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } @@ -8254,9 +8254,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargonaut": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.2.tgz", - "integrity": "sha1-7nuJ6YEho/JB+pJqKm4bZkHIGz8=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.3.tgz", + "integrity": "sha512-+FKokBOLV7DYnHjJpXniUnn1Zng2XBqX2k8d4E4eha19rvEbnctu1TsH98yixJmge7pDSQGS2Av/R30ya+ukrw==", "requires": { "chalk": "^1.1.1", "figlet": "^1.1.1", diff --git a/package.json b/package.json index 091dc2b..74e8a58 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.19", + "version": "0.2.20", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { @@ -28,7 +28,7 @@ "pg": "^7.4.0", "reflect-metadata": "^0.1.10", "sqlite3": "^4.0.2", - "typeorm": "^0.2.4", + "typeorm": "^0.2.7", "typescript": "^2.8.3", "yargs": "^12.0.1", "yn": "^2.0.0" From 200417d35082c33c7a243a0fb80de1e932f2d4d0 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 2 Sep 2018 15:35:34 +0200 Subject: [PATCH 037/130] #96 using PrimaryGeneratedColumn decorator in generated entities --- src/entity.mst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/entity.mst b/src/entity.mst index 8fa72a8..882a464 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -1,4 +1,4 @@ -import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; {{relationImports}}{{#each UniqueImports}}import {{curly true}}{{toEntityName this}}{{curly false}} from "./{{toFileName this}}"; {{/each}} @@ -8,17 +8,17 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man {{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}} { {{#Columns}} - {{^relations}} @Column("{{sql_type}}",{ {{#is_generated}} - generated:true,{{/is_generated}}{{#is_nullable}} + {{^relations}}{{#is_generated}} @PrimaryGeneratedColumn({ + {{/is_generated}}{{^is_generated}} @Column("{{sql_type}}",{ {{#is_nullable}} nullable:true,{{/is_nullable}}{{^is_nullable}} - nullable:false,{{/is_nullable}}{{#is_unique}} + nullable:false,{{/is_nullable}}{{#isPrimary}} + primary:{{isPrimary}},{{/isPrimary}}{{/is_generated}}{{#is_unique}} unique: true,{{/is_unique}}{{#lenght}} length:{{.}},{{/lenght}}{{#width}} width:{{.}},{{/width}}{{#default}} default:"{{.}}",{{/default}}{{#numericPrecision}} precision:{{.}},{{/numericPrecision}}{{#numericScale}} - scale:{{.}},{{/numericScale}}{{#isPrimary}} - primary:{{isPrimary}},{{/isPrimary}}{{#enumOptions}} + scale:{{.}},{{/numericScale}}{{#enumOptions}} enum:[{{.}}],{{/enumOptions}}{{#is_array}} array:{{is_array}},{{/is_array}} name:"{{sqlName}}" From 98f57d7c9ada21ccd60d107180f266e7f093e5c5 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 2 Sep 2018 16:01:57 +0200 Subject: [PATCH 038/130] 0.2.21 --- CHANGELOG.md | 3 +++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee3d7ea..a8c47b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.2.21 +* primary keys using identity/sequence are now generated with `@PrimaryGeneratedColumn` decorator [#96](https://github.com/Kononnable/typeorm-model-generator/issues/96) + ## 0.2.20 * relation onUpdate fixes * postgres support for citext, hstore, geometry, array column types diff --git a/package-lock.json b/package-lock.json index f6f5a9c..fd061e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.20", + "version": "0.2.21", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 74e8a58..5c891f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.20", + "version": "0.2.21", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From 0f3115c8a80980c0c9e680e1ab7915464928336e Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 13 Sep 2018 02:21:35 +0000 Subject: [PATCH 039/130] chore(package): update remap-istanbul to version 0.12.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c891f7..0a1d546 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "lint-staged": "^7.2.0", "mocha": "^5.1.1", "prettier": "^1.12.1", - "remap-istanbul": "^0.11.1", + "remap-istanbul": "^0.12.0", "sinon": "^6.0.0", "sinon-chai": "^3.0.0", "typings": "^2.1.1" From 06ad440147c40d8991b319d7932e3dc254d67055 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 13 Sep 2018 02:24:40 +0000 Subject: [PATCH 040/130] chore(package): update lockfile package-lock.json --- package-lock.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index fd061e5..8178c3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -247,6 +247,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -4518,7 +4519,8 @@ "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "optional": true }, "loose-envify": { "version": "1.3.1", @@ -6023,9 +6025,9 @@ } }, "remap-istanbul": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.11.1.tgz", - "integrity": "sha512-Itv3XvYjD6G+9xDzAeFohx4GUwbFjfqFt0UXlC826jHR18E49fEiEGqZUxUASwMq4z7wwUv2H9/XF2d6qj0iaQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.12.0.tgz", + "integrity": "sha512-lpA+zkWfT7v81k76asd+w82+dnbBTmBEsyuBVQ28armnOqsZZO23uI4ZCBGd8TtIb9Tq4CauswB+A44cbkuiMA==", "dev": true, "requires": { "amdefine": "^1.0.0", From fd5729cfd86c13b3b7b020229db61a0aaa64c23b Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Wed, 26 Sep 2018 11:02:43 +0000 Subject: [PATCH 041/130] chore(package): update husky to version 1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0a1d546..5f4e3dd 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "gulp-shell": "^0.6.5", "gulp-sourcemaps": "^2.6.4", "gulp-typescript": "^4.0.2", - "husky": "^0.14.3", + "husky": "^1.0.0", "istanbul": "^0.4.5", "lint-staged": "^7.2.0", "mocha": "^5.1.1", From eee8d81a4063c868c0fe0c3c39fbafdbde86ac9f Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Wed, 26 Sep 2018 11:05:15 +0000 Subject: [PATCH 042/130] chore(package): update lockfile package-lock.json --- package-lock.json | 305 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 280 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8178c3b..ee8af0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -668,6 +668,12 @@ "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -797,9 +803,9 @@ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "ci-info": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", - "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, "class-utils": { @@ -2193,6 +2199,12 @@ "integrity": "sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug==", "dev": true }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -3234,6 +3246,12 @@ "parse-passwd": "^1.0.0" } }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, "http-proxy-agent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", @@ -3267,14 +3285,111 @@ } }, "husky": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", - "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-1.0.0.tgz", + "integrity": "sha512-BCJmbzfauxXwfxIZYETNS95zNxnwQgzTbVPs4DL0CbMmSDvuMEAcfEjGDFEb+mmPslvywKlXZroYAdNLRDLayQ==", "dev": true, "requires": { - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" + "cosmiconfig": "^5.0.6", + "execa": "^0.9.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^1.2.1", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", + "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, + "execa": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", + "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "please-upgrade-node": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", + "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + } } }, "iconv-lite": { @@ -3393,13 +3508,22 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "ci-info": "^1.0.0" + "builtin-modules": "^1.0.0" + } + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" } }, "is-data-descriptor": { @@ -5075,11 +5199,17 @@ "abbrev": "1" } }, - "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } }, "now-and-later": { "version": "2.0.0", @@ -5731,6 +5861,60 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + } + } + }, "please-upgrade-node": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.0.2.tgz", @@ -5941,6 +6125,29 @@ } } }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", @@ -6239,6 +6446,12 @@ "glob": "^7.0.5" } }, + "run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "dev": true + }, "rxjs": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz", @@ -6421,6 +6634,12 @@ "integrity": "sha512-+cqeKiuMZjZs800fRf4kjJR/Pp4p7bYY3ciZHClFNS8tSzJoAcWni/ZUZD8TrfZ+oFRyLiKWX3fTClDATGy5vQ==", "dev": true }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, "slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", @@ -6619,6 +6838,38 @@ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", "dev": true }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "dev": true + }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -6913,12 +7164,6 @@ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -7918,6 +8163,16 @@ "user-home": "^1.1.1" } }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "value-or-function": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", From c72ea59bc4d45a06a0108844553e0a2f8ed6fb4c Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 30 Sep 2018 23:41:19 +0200 Subject: [PATCH 043/130] fixing index column names if property names being case converted #103 --- src/entity.mst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/entity.mst b/src/entity.mst index 882a464..83e4971 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -4,12 +4,11 @@ import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, O @Entity("{{EntityName}}"{{#Schema}},{schema:"{{.}}"}{{/Schema}}) -{{#Indexes}}{{^isPrimaryKey}}@Index("{{name}}",[{{#columns}}"{{name}}",{{/columns}}]{{#isUnique}},{unique:true}{{/isUnique}}) +{{#Indexes}}{{^isPrimaryKey}}@Index("{{name}}",[{{#columns}}"{{toPropertyName name}}",{{/columns}}]{{#isUnique}},{unique:true}{{/isUnique}}) {{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}} { {{#Columns}} - {{^relations}}{{#is_generated}} @PrimaryGeneratedColumn({ - {{/is_generated}}{{^is_generated}} @Column("{{sql_type}}",{ {{#is_nullable}} + {{^relations}}{{#is_generated}} @PrimaryGeneratedColumn({ {{/is_generated}}{{^is_generated}} @Column("{{sql_type}}",{ {{#is_nullable}} nullable:true,{{/is_nullable}}{{^is_nullable}} nullable:false,{{/is_nullable}}{{#isPrimary}} primary:{{isPrimary}},{{/isPrimary}}{{/is_generated}}{{#is_unique}} From d1c02b06056190ed01a189d09b5975f3fdef0844 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Mon, 1 Oct 2018 22:19:59 +0200 Subject: [PATCH 044/130] fixing naming strategy #99 --- src/NamingStrategy.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index 01d6b2f..1cad9cb 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -20,11 +20,8 @@ export class NamingStrategy extends AbstractNamingStrategy { columnOldName[0].toLowerCase() + columnOldName.substring(1, columnOldName.length); if ( - columnName - .toLowerCase() - .endsWith( - "id" - ) /*&& !ownerEntity.Columns.some(x=>x.tsName==columnName && x.isPrimary)*/ + columnName.toLowerCase().endsWith("id") && + !columnName.toLowerCase().endsWith("guid") ) { columnName = columnName.substring( 0, From aa16fb1206dc7f7fe490430ad35b29489aec672e Mon Sep 17 00:00:00 2001 From: Kononnable Date: Mon, 1 Oct 2018 23:06:50 +0200 Subject: [PATCH 045/130] 0.2.22 --- CHANGELOG.md | 4 ++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8c47b7..c22175a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.2.22 +* fixed naming stategy for guid ended column names +* fixed column names case convertion in index declarations + ## 0.2.21 * primary keys using identity/sequence are now generated with `@PrimaryGeneratedColumn` decorator [#96](https://github.com/Kononnable/typeorm-model-generator/issues/96) diff --git a/package-lock.json b/package-lock.json index ee8af0c..435edcc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.21", + "version": "0.2.22", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5f4e3dd..55dc341 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.21", + "version": "0.2.22", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From f7be977f6b91ec77dc4bf6c86022bdcd185dc0f1 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 2 Oct 2018 22:58:09 +0200 Subject: [PATCH 046/130] moving scripts back to package.json, fixing codecov coverage --- gulpfile.js | 79 -- package-lock.json | 2243 +-------------------------------------------- package.json | 17 +- 3 files changed, 8 insertions(+), 2331 deletions(-) delete mode 100644 gulpfile.js diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index d8dac98..0000000 --- a/gulpfile.js +++ /dev/null @@ -1,79 +0,0 @@ -const gulp = require('gulp') -const ts = require("gulp-typescript"); -const sourcemaps = require("gulp-sourcemaps"); -const clean = require("gulp-clean"); -const shell = require('gulp-shell'); -const istanbul = require('gulp-istanbul'); -const mocha = require('gulp-mocha'); -const remapIstanbul = require('remap-istanbul/lib/gulpRemapIstanbul'); - -gulp.task('compile', ['clean'], function () { - var tsProject = ts.createProject('tsconfig.json'); - return tsProject.src() - .pipe(sourcemaps.init()) - .pipe(tsProject()) - .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist')) -}); - -gulp.task('clean', function () { - return gulp.src(['dist', 'coverage', 'output'], { read: false }) - .pipe(clean()); -}); - -gulp.task('prettier', function () { - return gulp.src('.prettierrc') - .pipe(shell(['prettier ./src/**/*.ts --write'])) - .pipe(shell(['prettier ./src/*.ts --write'])) -}); - -gulp.task('pre-commit', ['prettier'], function () { - return gulp.src('package.json', { read: false }) - .pipe(shell(['git update-index --again'])) -}) - -gulp.task('watch', function () { - gulp.src('tsconfig.json') - .pipe(shell(['tsc -w'])) - - var watcher = gulp.watch(['src/**/*.ts', 'test/**/*.ts']); - - watcher.on('change', function (changeInfo) { - console.log('File ' + changeInfo.path + ' was ' + changeInfo.type + '.'); - if (changeInfo.type == 'deleted') { - let jsFilePath = changeInfo.path - .split('.ts').join('.js') - .split('\\').join('/') - .split('/src/').join('/dist/src/') - .split('/test/').join('/dist/test/'); - return gulp.src([jsFilePath, jsFilePath + '.map'], { read: false }) - .pipe(clean()); - } - }); -}) - -gulp.task('pre-test', function () { - return gulp.src(['dist/src/**/*.js']) - .pipe(istanbul()) - .pipe(istanbul.hookRequire()); -}); - -gulp.task('test', ['pre-test'], function () { - return gulp.src(['dist/test/**/*.test.js'], { read: false }) - .pipe(mocha()) -}); - -gulp.task('coveragePost', ['test'], function () { - return gulp.src(['dist/test/**/*.test.js'], { read: false }) - .pipe(istanbul.writeReports()) -}); - -gulp.task('coverageRemap', ['coveragePost'], function () { - var GulpStream = gulp.src('coverage/coverage-final.json') - .pipe(remapIstanbul()) - .pipe(gulp.dest('coverage/remapped')); - if ((process.env.CI == 'true')) { - GulpStream = GulpStream.pipe(shell(['codecov --file=./coverage/remapped/coverage-final.json '])); - } - return GulpStream; -}) diff --git a/package-lock.json b/package-lock.json index 435edcc..f184b56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,77 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@gulp-sourcemaps/identity-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz", - "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=", - "dev": true, - "requires": { - "acorn": "^5.0.3", - "css": "^2.2.1", - "normalize-path": "^2.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.3" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } - } - }, - "@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", - "dev": true, - "requires": { - "normalize-path": "^2.0.1", - "through2": "^2.0.3" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } - } - }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -208,12 +137,6 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" }, - "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", - "dev": true - }, "agent-base": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", @@ -247,7 +170,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -268,15 +190,6 @@ "string-width": "^2.0.0" } }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, "ansi-cyan": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", @@ -292,15 +205,6 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, "ansi-red": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", @@ -345,15 +249,6 @@ "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=" }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -410,18 +305,6 @@ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", "dev": true }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, "array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", @@ -542,12 +425,6 @@ "tweetnacl": "^0.14.3" } }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, "big-number": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/big-number/-/big-number-0.3.1.tgz", @@ -657,12 +534,6 @@ "ieee754": "^1.1.4" } }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - }, "buffer-writer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", @@ -1006,52 +877,6 @@ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", "dev": true }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - } - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -1096,12 +921,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, "columnify": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", @@ -1193,12 +1012,6 @@ "upper-case": "^1.1.1" } }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1283,44 +1096,6 @@ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, - "css": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz", - "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "source-map": "^0.1.38", - "source-map-resolve": "^0.5.1", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - }, - "dargs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", - "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", - "dev": true - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1335,12 +1110,6 @@ "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", "dev": true }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1349,28 +1118,6 @@ "ms": "2.0.0" } }, - "debug-fabulous": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.0.0.tgz", - "integrity": "sha512-dsd50qQ1atDeurcxL7XOjPp4nZCGZzWIONDujDXzl1atSyC3hMbZD+v6440etw+Vt0Pr8ce4TQzHfX3KZM05Mw==", - "dev": true, - "requires": { - "debug": "3.X", - "memoizee": "0.4.X", - "object-assign": "4.X" - }, - "dependencies": { - "debug": { - "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": "2.0.0" - } - } - } - }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -1412,16 +1159,6 @@ "clone": "^1.0.2" } }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" - } - }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -1442,18 +1179,6 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, "detect-indent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", @@ -1465,12 +1190,6 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -1500,70 +1219,12 @@ "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==", "dev": true }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "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 - } - } - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "duplexify": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", - "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - } - } - }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", @@ -1579,26 +1240,6 @@ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", "dev": true }, - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "~1.3.0" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "1" - } - } - } - }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -1608,50 +1249,6 @@ "is-arrayish": "^0.2.1" } }, - "es5-ext": { - "version": "0.10.41", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", - "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1705,16 +1302,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", @@ -1827,15 +1414,6 @@ } } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", @@ -1899,17 +1477,6 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, - "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "time-stamp": "^1.0.0" - } - }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", @@ -1964,12 +1531,6 @@ } } }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, "find-parent-dir": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", @@ -1984,65 +1545,12 @@ "locate-path": "^2.0.0" } }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", - "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2087,28 +1595,6 @@ "minipass": "^2.2.1" } }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2168,15 +1654,6 @@ } } }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "~0.1.0" - } - }, "generic-pool": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.4.0.tgz", @@ -2237,105 +1714,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", - "dev": true, - "requires": { - "glob": "^4.3.1", - "glob2base": "^0.0.12", - "minimatch": "^2.0.1", - "ordered-read-streams": "^0.1.0", - "through2": "^0.6.1", - "unique-stream": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "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 - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "^0.5.1" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "^0.1.1" - } - }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -2345,113 +1723,6 @@ "ini": "^1.3.4" } }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "dependencies": { - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - } - } - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } - } - }, - "glogg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", - "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, "got": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -2483,596 +1754,6 @@ "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", "dev": true }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "^1.0.0", - "chalk": "^1.0.0", - "deprecated": "^0.0.1", - "gulp-util": "^3.0.0", - "interpret": "^1.0.0", - "liftoff": "^2.1.0", - "minimist": "^1.1.0", - "orchestrator": "^0.3.0", - "pretty-hrtime": "^1.0.0", - "semver": "^4.1.0", - "tildify": "^1.0.0", - "v8flags": "^2.0.2", - "vinyl-fs": "^0.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "gulp-clean": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/gulp-clean/-/gulp-clean-0.4.0.tgz", - "integrity": "sha512-DARK8rNMo4lHOFLGTiHEJdf19GuoBDHqGUaypz+fOhrvOs3iFO7ntdYtdpNxv+AzSJBx/JfypF0yEj9ks1IStQ==", - "dev": true, - "requires": { - "fancy-log": "^1.3.2", - "plugin-error": "^0.1.2", - "rimraf": "^2.6.2", - "through2": "^2.0.3", - "vinyl": "^2.1.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "gulp-istanbul": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gulp-istanbul/-/gulp-istanbul-1.1.3.tgz", - "integrity": "sha512-uMLSdqPDnBAV/B9rNyOgVMgrVC1tPbe+5GH6P13UOyxbRDT/w4sKYHWftPMA8j9om+NFvfeRlqpDXL2fixFWNA==", - "dev": true, - "requires": { - "istanbul": "^0.4.0", - "istanbul-threshold-checker": "^0.2.1", - "lodash": "^4.0.0", - "plugin-error": "^0.1.2", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.1" - } - }, - "gulp-mocha": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-6.0.0.tgz", - "integrity": "sha512-FfBldW5ttnDpKf4Sg6/BLOOKCCbr5mbixDGK1t02/8oSrTCwNhgN/mdszG3cuQuYNzuouUdw4EH/mlYtgUscPg==", - "dev": true, - "requires": { - "dargs": "^5.1.0", - "execa": "^0.10.0", - "mocha": "^5.2.0", - "npm-run-path": "^2.0.2", - "plugin-error": "^1.0.1", - "supports-color": "^5.4.0", - "through2": "^2.0.3" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "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": "2.0.0" - } - }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } - } - }, - "gulp-shell": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/gulp-shell/-/gulp-shell-0.6.5.tgz", - "integrity": "sha512-f3m1WcS0o2B72/PGj1Jbv9zYR9rynBh/EQJv64n01xQUo7j7anols0eww9GG/WtDTzGVQLrupVDYkifRFnj5Zg==", - "dev": true, - "requires": { - "async": "^2.1.5", - "chalk": "^2.3.0", - "fancy-log": "^1.3.2", - "lodash": "^4.17.4", - "lodash.template": "^4.4.0", - "plugin-error": "^0.1.2", - "through2": "^2.0.3" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "^4.14.0" - } - }, - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } - } - }, - "gulp-sourcemaps": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz", - "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=", - "dev": true, - "requires": { - "@gulp-sourcemaps/identity-map": "1.X", - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "5.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "1.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "~0.6.0", - "strip-bom-string": "1.X", - "through2": "2.X" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "gulp-typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-4.0.2.tgz", - "integrity": "sha512-Hhbn5Aa2l3T+tnn0KqsG6RRJmcYEsr3byTL2nBpNBeAK8pqug9Od4AwddU4JEI+hRw7mzZyjRbB8DDWR6paGVA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "plugin-error": "^0.1.2", - "source-map": "^0.6.1", - "through2": "^2.0.3", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "^1.0.0", - "through2-filter": "^2.0.0" - } - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.2.tgz", - "integrity": "sha512-AUSFda1OukBwuLPBTbyuO4IRWgfXmqC4UTW0f8xrCa8Hkv9oyIU+NSqBlgfOLZRoUt7cHdo75hKQghCywpIyIw==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - } - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, "handlebars": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", @@ -3127,21 +1808,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -3237,15 +1903,6 @@ "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", "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" - } - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -3450,12 +2107,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, "invariant": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", @@ -3594,15 +2245,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, "is-installed-globally": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", @@ -3621,12 +2263,6 @@ "lower-case": "^1.1.0" } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -3758,18 +2394,6 @@ "upper-case": "^1.1.0" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, "is-windows": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", @@ -3861,16 +2485,6 @@ } } }, - "istanbul-threshold-checker": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/istanbul-threshold-checker/-/istanbul-threshold-checker-0.2.1.tgz", - "integrity": "sha1-xdyU6PLMXNP/0zVFL4S1U8QkgzE=", - "dev": true, - "requires": { - "istanbul": "~0.4.5", - "lodash": "~4.17.2" - } - }, "jest-get-type": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", @@ -3932,15 +2546,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -3955,12 +2560,6 @@ "graceful-fs": "^4.1.6" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jspm-config": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/jspm-config/-/jspm-config-0.3.4.tgz", @@ -4018,15 +2617,6 @@ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "optional": true }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -4035,15 +2625,6 @@ "invert-kv": "^1.0.0" } }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", @@ -4060,22 +2641,6 @@ "type-check": "~0.3.2" } }, - "liftoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", - "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^2.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - } - }, "lint-staged": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.2.0.tgz", @@ -4490,131 +3055,12 @@ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", "dev": true }, - "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._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "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._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "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.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -4643,8 +3089,7 @@ "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "optional": true + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "loose-envify": { "version": "1.3.1", @@ -4683,15 +3128,6 @@ "yallist": "^2.1.2" } }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, "make-dir": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", @@ -4724,23 +3160,6 @@ "make-error": "^1.2.0" } }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4764,22 +3183,6 @@ "mimic-fn": "^1.0.0" } }, - "memoizee": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz", - "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.30", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.2" - } - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -5008,15 +3411,6 @@ "tedious": "^2.0.0" } }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, "mysql": { "version": "2.15.0", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.15.0.tgz", @@ -5108,12 +3502,6 @@ } } }, - "natives": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", - "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", - "dev": true - }, "needle": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz", @@ -5124,18 +3512,6 @@ "sax": "^1.2.4" } }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", - "dev": true - }, "nise": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", @@ -5211,15 +3587,6 @@ "validate-npm-package-license": "^3.0.1" } }, - "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, "npm-bundled": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", @@ -5347,12 +3714,6 @@ } } }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -5362,68 +3723,6 @@ "isobject": "^3.0.0" } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -5532,23 +3831,6 @@ } } }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" - } - }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -5648,53 +3930,6 @@ "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=" }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "dependencies": { - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - } - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -5704,12 +3939,6 @@ "error-ex": "^1.2.0" } }, - "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 - }, "parse5": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", @@ -5741,12 +3970,6 @@ "no-case": "^2.2.0" } }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -5768,21 +3991,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -6038,12 +4246,6 @@ "ansi-styles": "^3.2.0" } }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -6060,38 +4262,6 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - } - } - }, - "pumpify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", - "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", - "dev": true, - "requires": { - "duplexify": "^3.5.3", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -6162,15 +4332,6 @@ "util-deprecate": "~1.0.1" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, "reflect-metadata": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", @@ -6253,45 +4414,6 @@ } } }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", @@ -6312,12 +4434,6 @@ "is-finite": "^1.0.0" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, "request": { "version": "2.85.0", "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", @@ -6388,25 +4504,6 @@ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -6523,12 +4620,6 @@ "upper-case-first": "^1.1.2" } }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", - "dev": true - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -6579,12 +4670,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -6832,12 +4917,6 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", @@ -7081,18 +5160,6 @@ } } }, - "stream-consume": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", - "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", - "dev": true - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, "string-argv": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", @@ -7153,12 +5220,6 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "dev": true - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -7305,47 +5366,12 @@ } } }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, - "timers-ext": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz", - "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==", - "dev": true, - "requires": { - "es5-ext": "~0.10.14", - "next-tick": "1" - } - }, "title-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", @@ -7355,52 +5381,6 @@ "upper-case": "^1.0.3" } }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "dependencies": { - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - } - } - }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -7519,27 +5499,6 @@ } } }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "requires": { - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } - } - }, "touch": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", @@ -7932,12 +5891,6 @@ } } }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true - }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", @@ -8138,12 +6091,6 @@ } } }, - "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-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8154,15 +6101,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "^1.1.1" - } - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -8173,12 +6111,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -8189,179 +6121,6 @@ "extsprintf": "^1.2.0" } }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "^1.0.0", - "glob-stream": "^3.1.5", - "glob-watcher": "^0.0.6", - "graceful-fs": "^3.0.0", - "mkdirp": "^0.5.0", - "strip-bom": "^1.0.0", - "through2": "^0.6.1", - "vinyl": "^0.4.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "^1.1.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "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 - }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "^1.0.0", - "is-utf8": "^0.2.0" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "requires": { - "source-map": "^0.5.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/package.json b/package.json index 55dc341..f35a457 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,12 @@ "scripts": { "setup": "npm install && typings install", "start": " node ./dist/src/index.js", - "test": "gulp coverageRemap", - "compile": "gulp compile", - "precommit": "gulp pre-commit" + "compile": "npm run clean && tsc", + "precommit": "npm run prettier && git update-index --again", + "test": "istanbul cover ./node_modules/mocha/bin/_mocha dist/test/**/*.test.js -- -R spec", + "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage-remapped.json && codecov --file=./coverage/coverage-remapped.json ", + "clean": "rimraf dist coverage output", + "prettier": "prettier --write ./src/*.ts ./src/**/*.ts" }, "repository": { "type": "git", @@ -52,19 +55,13 @@ "codecov": "^3.0.1", "dotenv": "^6.0.0", "fs-extra": "^7.0.0", - "gulp": "^3.9.1", - "gulp-clean": "^0.4.0", - "gulp-istanbul": "^1.1.3", - "gulp-mocha": "^6.0.0", - "gulp-shell": "^0.6.5", - "gulp-sourcemaps": "^2.6.4", - "gulp-typescript": "^4.0.2", "husky": "^1.0.0", "istanbul": "^0.4.5", "lint-staged": "^7.2.0", "mocha": "^5.1.1", "prettier": "^1.12.1", "remap-istanbul": "^0.12.0", + "rimraf": "^2.6.2", "sinon": "^6.0.0", "sinon-chai": "^3.0.0", "typings": "^2.1.1" From 79ad6a9abd70b5c98e326fe25f2a4a316d0745f5 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 2 Oct 2018 23:19:04 +0200 Subject: [PATCH 047/130] migrate from typings to @types --- package-lock.json | 12 +++++++++--- package.json | 8 ++++---- typings.json | 10 ---------- 3 files changed, 13 insertions(+), 17 deletions(-) delete mode 100644 typings.json diff --git a/package-lock.json b/package-lock.json index f184b56..cd89008 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,9 +74,9 @@ "dev": true }, "@types/mssql": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-4.0.7.tgz", - "integrity": "sha512-N06zogdWXWrI9Giqz+5M3xM9B4FZ68lwsRgIbVwaijHrhY4XuLy0BVNhyMUqDYlUsBJk++k2NtpFiuhr861BkQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-4.0.10.tgz", + "integrity": "sha512-7oV5EBn5wh6hVlrwZC+dF+ECAjSLxv9QllFSGCFAsfx0Ms3DvTSIH0b8srkg2qs5Bj3kdbp8Y4VjhW7GJ346QQ==", "dev": true, "requires": { "@types/events": "*", @@ -132,6 +132,12 @@ "integrity": "sha512-RsisuFAkhtCB3DKwQrBZYdkqtOyck7y5GkMZ7KeYVjLNBoV9ZMI0Kxj304Myp+B5Jj4LeEdPMTPlXNylG9x94A==", "dev": true }, + "@types/yargs": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.1.tgz", + "integrity": "sha512-UVjo2oH79aRNcsDlFlnQ/iJ67Jd7j6uSg7jUJP/RZ/nUjAh5ElmnwlD5K/6eGgETJUgCHkiWn91B8JjXQ6ubAw==", + "dev": true + }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", diff --git a/package.json b/package.json index f35a457..c590285 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { - "setup": "npm install && typings install", + "setup": "npm install", "start": " node ./dist/src/index.js", "compile": "npm run clean && tsc", "precommit": "npm run prettier && git update-index --again", @@ -43,12 +43,13 @@ "@types/fs-extra": "^5.0.2", "@types/handlebars": "^4.0.37", "@types/mocha": "^5.2.0", - "@types/mssql": "^4.0.7", + "@types/mssql": "^4.0.10", "@types/mysql": "2.15.5", "@types/node": "^10.0.1", "@types/oracledb": "^1.11.34", "@types/pg": "^7.4.8", "@types/sinon": "^5.0.0", + "@types/yargs": "^12.0.1", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "chai-subset": "^1.6.0", @@ -63,7 +64,6 @@ "remap-istanbul": "^0.12.0", "rimraf": "^2.6.2", "sinon": "^6.0.0", - "sinon-chai": "^3.0.0", - "typings": "^2.1.1" + "sinon-chai": "^3.0.0" } } diff --git a/typings.json b/typings.json deleted file mode 100644 index 91fce6a..0000000 --- a/typings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "globalDevDependencies": { - "mustache": "registry:dt/mustache#0.8.2+20160510002910" - }, - "dependencies": { - "mssql": "registry:dt/mssql#3.3.0+20170311011547", - "yargs": "registry:npm/yargs#5.0.0+20160907000723", - "yn": "registry:npm/yn#1.3.0+20170508185912" - } -} From d005bbe022e4efeacbe1e556ad0406ac6f72b012 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 2 Oct 2018 23:21:59 +0200 Subject: [PATCH 048/130] reenabling postgres driver in CI --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5d01e71..04b5576 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ services: - docker env: matrix: - - POSTGRES_Skip=1 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres + - POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres POSTGRES_Password=!Passw0rd POSTGRES_Database=typeorm_mg POSTGRES_SSL=0 MYSQL_Skip=0 MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=!Passw0rd MYSQL_Database=typeorm_mg MYSQL_SSL=1 MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 From f45f64c9337097db85695aa3b72c1d92fe6c7027 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 2 Oct 2018 23:33:59 +0200 Subject: [PATCH 049/130] fixing travis build --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 04b5576..db97166 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,7 +42,6 @@ before_script: - if [ -n "$DOCKER_USERNAME" ]; then npm i oracledb --no-save; docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH - greenkeeper-lockfile-update -- typings install - npm link typescript - tsc - sleep 180 From 94d19b3162d7c038e6ca3f70c74119d5688c773b Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 3 Oct 2018 18:07:52 +0200 Subject: [PATCH 050/130] trying to fix postgress CI on node 6 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db97166..a555e63 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,7 +44,7 @@ before_script: - greenkeeper-lockfile-update - npm link typescript - tsc -- sleep 180 +- sleep 240 - docker logs typeorm-mg-postgres after_script: From f5473013e97ebb734854eada6c8d4922a7e8d98f Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 3 Oct 2018 19:01:21 +0200 Subject: [PATCH 051/130] trying to fix postgres on CI --- .travis.yml | 2 +- docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a555e63..db97166 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,7 +44,7 @@ before_script: - greenkeeper-lockfile-update - npm link typescript - tsc -- sleep 240 +- sleep 180 - docker logs typeorm-mg-postgres after_script: diff --git a/docker-compose.yml b/docker-compose.yml index d17be09..4df48bc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,7 +21,7 @@ services: # postgres postgres: - image: "postgres:10.0" + image: "postgres:10.5" container_name: "typeorm-mg-postgres" ports: - "5432:5432" From c20283bbf9ff50084598352d0b49f3fa0655402d Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 3 Oct 2018 19:56:52 +0200 Subject: [PATCH 052/130] postgres CI fix --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4df48bc..badf4fc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,7 +21,7 @@ services: # postgres postgres: - image: "postgres:10.5" + image: "mdillon/postgis:9.6" container_name: "typeorm-mg-postgres" ports: - "5432:5432" From da84c1647582ee316a6cc1cb7a8cb2cf5831037b Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 21 Oct 2018 22:00:48 +0200 Subject: [PATCH 053/130] added column type to generated @PrimaryGeneratedColumn decorator --- CHANGELOG.md | 3 +++ src/entity.mst | 3 ++- test/utils/EntityFileToJson.ts | 6 ++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c22175a..fab4d76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.2.23 +* added column type to generated `@PrimaryGeneratedColumn` decorator + ## 0.2.22 * fixed naming stategy for guid ended column names * fixed column names case convertion in index declarations diff --git a/src/entity.mst b/src/entity.mst index 83e4971..63925ac 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -8,7 +8,8 @@ import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, O {{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}} { {{#Columns}} - {{^relations}}{{#is_generated}} @PrimaryGeneratedColumn({ {{/is_generated}}{{^is_generated}} @Column("{{sql_type}}",{ {{#is_nullable}} + {{^relations}}{{#is_generated}} @PrimaryGeneratedColumn({ + type:"{{sql_type}}", {{/is_generated}}{{^is_generated}} @Column("{{sql_type}}",{ {{#is_nullable}} nullable:true,{{/is_nullable}}{{^is_nullable}} nullable:false,{{/is_nullable}}{{#isPrimary}} primary:{{isPrimary}},{{/isPrimary}}{{/is_generated}}{{#is_unique}} diff --git a/test/utils/EntityFileToJson.ts b/test/utils/EntityFileToJson.ts index 3b91d7c..89c6d84 100644 --- a/test/utils/EntityFileToJson.ts +++ b/test/utils/EntityFileToJson.ts @@ -16,8 +16,9 @@ export class EntityFileToJson { } getColumnOptionsAndType(trimmedLine: string, col: EntityColumn) { let decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) + let primaryGeneratedColumn = trimmedLine.substring(0, trimmedLine.indexOf('('))=='@PrimaryGeneratedColumn' if (decoratorParameters.length > 0) { - if (decoratorParameters.search(',') > 0) { + if (decoratorParameters.search(',') > 0 && !primaryGeneratedColumn) { col.columnTypes = decoratorParameters.substring(0, decoratorParameters.indexOf(',')).trim().split('|').map(function (x) { return x; }); @@ -33,7 +34,8 @@ export class EntityFileToJson { return x; }); } else { - let badJSON = decoratorParameters.substring(decoratorParameters.indexOf(',') + 1).trim() + let badJSON = !primaryGeneratedColumn ? decoratorParameters.substring(decoratorParameters.indexOf(',') + 1) : decoratorParameters + badJSON = badJSON.trim() if (badJSON.lastIndexOf(',') == badJSON.length - 3) { badJSON = badJSON.slice(0, badJSON.length - 3) + badJSON[badJSON.length - 2] + badJSON[badJSON.length - 1] } From aa7647be3affe8b9aa3535627b4e9f182c0c7075 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 27 Oct 2018 23:02:04 +0200 Subject: [PATCH 054/130] fixing CI builds - oracledb doesn't support node 11 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db97166..732b4bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: -- stable +- 10 - 8 - 6 sudo: required From 4e1d785b8ae9906533a1f1099720980eee87a68a Mon Sep 17 00:00:00 2001 From: Kevin Guanche Darias Date: Wed, 31 Oct 2018 09:22:55 +0000 Subject: [PATCH 055/130] Allow to define property visibility, by using --pv --- CHANGELOG.md | 3 + package-lock.json | 2671 +++++++++++--------------------- package.json | 8 +- src/Engine.ts | 8 + src/entity.mst | 2 +- src/index.ts | 7 + test/utils/GeneralTestUtils.ts | 18 +- 7 files changed, 941 insertions(+), 1776 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fab4d76..9232329 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.3.0 + +* __Feature:__ Allow to define property visibility, by using --pv ## 0.2.23 * added column type to generated `@PrimaryGeneratedColumn` decorator diff --git a/package-lock.json b/package-lock.json index cd89008..6a2ee06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", "dev": true, "requires": { - "any-observable": "^0.3.0" + "any-observable": "0.3.0" } }, "@sinonjs/formatio": { @@ -34,7 +34,7 @@ "integrity": "sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==", "dev": true, "requires": { - "@types/chai": "*" + "@types/chai": "4.1.3" } }, "@types/chai-subset": { @@ -43,7 +43,7 @@ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==", "dev": true, "requires": { - "@types/chai": "*" + "@types/chai": "4.1.3" } }, "@types/events": { @@ -58,7 +58,7 @@ "integrity": "sha512-Q3FWsbdmkQd1ib11A4XNWQvRD//5KpPoGawA8aB2DR7pWKoW9XQv3+dGxD/Z1eVFze23Okdo27ZQytVFlweKvQ==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.0.1" } }, "@types/handlebars": { @@ -79,8 +79,8 @@ "integrity": "sha512-7oV5EBn5wh6hVlrwZC+dF+ECAjSLxv9QllFSGCFAsfx0Ms3DvTSIH0b8srkg2qs5Bj3kdbp8Y4VjhW7GJ346QQ==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*" + "@types/events": "1.2.0", + "@types/node": "10.0.1" } }, "@types/mysql": { @@ -89,7 +89,7 @@ "integrity": "sha512-4QAISTUGZbcFh7bqdndo08xRdES5OTU+JODy8VCZbe1yiXyGjqw1H83G43XjQ3IbC10wn9xlGd44A5RXJwNh0Q==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.0.1" } }, "@types/node": { @@ -103,7 +103,7 @@ "integrity": "sha512-7cgZaKEfYcPPTScxxCoYoLxmmhM/PBobGBfxE3RGzRJl8YKhkyGKyExFu8fTOpF2cPgdfh83NGKBVX7prWzb+Q==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.0.1" } }, "@types/pg": { @@ -112,9 +112,9 @@ "integrity": "sha512-naSYLMOIBU+/BddUlQUyQuba9reG5yN0MR7g4EcN/AEt3zll48fGozX8s7xjaXuKmFOS1qqOrr/ZeF6SSOjKCw==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/pg-types": "*" + "@types/events": "1.2.0", + "@types/node": "10.0.1", + "@types/pg-types": "1.11.4" } }, "@types/pg-types": { @@ -123,7 +123,7 @@ "integrity": "sha512-WdIiQmE347LGc1Vq3Ki8sk3iyCuLgnccqVzgxek6gEHp2H0p3MQ3jniIHt+bRODXKju4kNQ+mp53lmP5+/9moQ==", "dev": true, "requires": { - "moment": ">=2.14.0" + "moment": "2.22.1" } }, "@types/sinon": { @@ -143,33 +143,15 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" }, - "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", - "dev": true, - "requires": { - "extend": "~3.0.0", - "semver": "~5.0.1" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } - } - }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "align-text": { @@ -177,9 +159,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" } }, "amdefine": { @@ -187,15 +169,6 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, "ansi-cyan": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", @@ -230,7 +203,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "ansi-wrap": { @@ -260,19 +233,13 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.3" } }, "argparse": { @@ -280,7 +247,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "argv": { @@ -295,8 +262,8 @@ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" + "arr-flatten": "1.1.0", + "array-slice": "0.2.3" } }, "arr-flatten": { @@ -317,12 +284,6 @@ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -382,8 +343,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" } }, "balanced-match": { @@ -397,13 +358,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -412,7 +373,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } } } @@ -428,7 +389,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "big-number": { @@ -446,45 +407,16 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", "requires": { - "readable-stream": "^2.0.5" + "readable-stream": "2.3.3" } }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, "boom": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.x.x" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } + "hoek": "4.2.1" } }, "brace-expansion": { @@ -492,7 +424,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -502,16 +434,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.1" }, "dependencies": { "extend-shallow": { @@ -520,7 +452,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -536,8 +468,8 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz", "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "1.3.0", + "ieee754": "1.1.12" } }, "buffer-writer": { @@ -557,15 +489,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" } }, "camel-case": { @@ -573,8 +505,8 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "no-case": "2.3.2", + "upper-case": "1.1.3" } }, "camelcase": { @@ -583,12 +515,6 @@ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "optional": true }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", - "dev": true - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -600,8 +526,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "optional": true, "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "align-text": "0.1.4", + "lazy-cache": "1.0.4" } }, "chai": { @@ -610,12 +536,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", - "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.6" } }, "chai-as-promised": { @@ -624,7 +550,7 @@ "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, "requires": { - "check-error": "^1.0.2" + "check-error": "1.0.2" } }, "chai-subset": { @@ -638,9 +564,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" } }, "change-case": { @@ -648,24 +574,24 @@ "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", "requires": { - "camel-case": "^3.0.0", - "constant-case": "^2.0.0", - "dot-case": "^2.1.0", - "header-case": "^1.0.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "no-case": "^2.3.2", - "param-case": "^2.1.0", - "pascal-case": "^2.0.0", - "path-case": "^2.1.0", - "sentence-case": "^2.1.0", - "snake-case": "^2.1.0", - "swap-case": "^1.1.0", - "title-case": "^2.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" + "camel-case": "3.0.0", + "constant-case": "2.0.0", + "dot-case": "2.1.1", + "header-case": "1.0.1", + "is-lower-case": "1.1.3", + "is-upper-case": "1.1.2", + "lower-case": "1.1.4", + "lower-case-first": "1.0.2", + "no-case": "2.3.2", + "param-case": "2.1.1", + "pascal-case": "2.0.1", + "path-case": "2.1.1", + "sentence-case": "2.1.1", + "snake-case": "2.1.0", + "swap-case": "1.1.2", + "title-case": "2.1.1", + "upper-case": "1.1.3", + "upper-case-first": "1.1.2" } }, "check-error": { @@ -691,10 +617,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "arr-union": { @@ -709,7 +635,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "is-accessor-descriptor": { @@ -718,7 +644,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -727,7 +653,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -738,7 +664,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -747,7 +673,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -758,9 +684,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -771,19 +697,13 @@ } } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, "cli-cursor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "^1.0.1" + "restore-cursor": "1.0.1" } }, "cli-highlight": { @@ -791,11 +711,11 @@ "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-1.2.3.tgz", "integrity": "sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg==", "requires": { - "chalk": "^2.3.0", - "highlight.js": "^9.6.0", - "mz": "^2.4.0", - "parse5": "^3.0.3", - "yargs": "^10.0.3" + "chalk": "2.3.0", + "highlight.js": "9.12.0", + "mz": "2.7.0", + "parse5": "3.0.3", + "yargs": "10.1.2" }, "dependencies": { "camelcase": { @@ -808,9 +728,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "yargs": { @@ -818,18 +738,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^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": "^8.1.0" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.1.0" } }, "yargs-parser": { @@ -837,7 +757,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } } } @@ -848,24 +768,14 @@ "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", "dev": true }, - "cli-truncate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", - "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", - "dev": true, - "requires": { - "slice-ansi": "^1.0.0", - "string-width": "^2.0.0" - } - }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "optional": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", + "center-align": "0.1.3", + "right-align": "0.1.3", "wordwrap": "0.0.2" }, "dependencies": { @@ -877,12 +787,6 @@ } } }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -900,7 +804,7 @@ "dev": true, "requires": { "argv": "0.0.2", - "request": "^2.81.0", + "request": "2.85.0", "urlgrey": "0.4.4" } }, @@ -910,8 +814,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color-convert": { @@ -919,7 +823,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -927,39 +831,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { @@ -979,31 +856,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "configstore": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", - "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -1014,8 +866,8 @@ "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", "requires": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" + "snake-case": "2.1.0", + "upper-case": "1.1.3" } }, "copy-descriptor": { @@ -1040,9 +892,9 @@ "integrity": "sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg==", "dev": true, "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "parse-json": "4.0.0" }, "dependencies": { "parse-json": { @@ -1051,29 +903,20 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" } } } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" } }, "cryptiles": { @@ -1082,7 +925,7 @@ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, "requires": { - "boom": "5.x.x" + "boom": "5.2.0" }, "dependencies": { "boom": { @@ -1091,23 +934,17 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } } } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "date-fns": { @@ -1147,7 +984,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "^4.0.0" + "type-detect": "4.0.6" } }, "deep-is": { @@ -1156,23 +993,14 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" } }, "delayed-stream": { @@ -1185,12 +1013,6 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", - "dev": true - }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -1207,16 +1029,7 @@ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", "requires": { - "no-case": "^2.2.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" + "no-case": "2.3.2" } }, "dotenv": { @@ -1225,19 +1038,13 @@ "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==", "dev": true }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "0.1.1" } }, "elegant-spinner": { @@ -1252,7 +1059,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "escape-string-regexp": { @@ -1266,11 +1073,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" }, "dependencies": { "esprima": { @@ -1286,7 +1093,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -1313,13 +1120,13 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "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" } }, "exit-hook": { @@ -1334,13 +1141,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" }, "dependencies": { "define-property": { @@ -1349,7 +1156,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -1358,7 +1165,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -1367,7 +1174,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1376,7 +1183,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1387,7 +1194,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1396,7 +1203,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1407,9 +1214,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -1431,7 +1238,7 @@ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { - "kind-of": "^1.1.0" + "kind-of": "1.1.0" }, "dependencies": { "kind-of": { @@ -1448,14 +1255,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" }, "dependencies": { "define-property": { @@ -1464,7 +1271,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -1473,7 +1280,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1510,8 +1317,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" } }, "fill-range": { @@ -1520,10 +1327,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -1532,7 +1339,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1548,7 +1355,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "for-in": { @@ -1562,24 +1369,13 @@ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fs-extra": { @@ -1588,9 +1384,9 @@ "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.2" } }, "fs-minipass": { @@ -1598,7 +1394,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "requires": { - "minipass": "^2.2.1" + "minipass": "2.3.3" } }, "fs.realpath": { @@ -1606,25 +1402,19 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" }, "dependencies": { "ansi-regex": { @@ -1637,7 +1427,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -1645,9 +1435,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -1655,7 +1445,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -1704,7 +1494,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "glob": { @@ -1712,40 +1502,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "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" } }, "graceful-fs": { @@ -1765,10 +1527,10 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" } }, "har-schema": { @@ -1781,17 +1543,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "^1.0.2" + "ajv": "5.5.2", + "har-schema": "2.0.0" } }, "has-ansi": { @@ -1799,7 +1552,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" }, "dependencies": { "ansi-regex": { @@ -1825,9 +1578,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, "has-values": { @@ -1836,8 +1589,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "is-number": { @@ -1846,7 +1599,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1855,7 +1608,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1866,7 +1619,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1877,10 +1630,10 @@ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" } }, "he": { @@ -1894,8 +1647,8 @@ "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" + "no-case": "2.3.2", + "upper-case": "1.1.3" } }, "highlight.js": { @@ -1915,36 +1668,14 @@ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, - "http-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", - "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", - "dev": true, - "requires": { - "agent-base": "2", - "debug": "2", - "extend": "3" - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", - "dev": true, - "requires": { - "agent-base": "2", - "debug": "2", - "extend": "3" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" } }, "husky": { @@ -1953,16 +1684,16 @@ "integrity": "sha512-BCJmbzfauxXwfxIZYETNS95zNxnwQgzTbVPs4DL0CbMmSDvuMEAcfEjGDFEb+mmPslvywKlXZroYAdNLRDLayQ==", "dev": true, "requires": { - "cosmiconfig": "^5.0.6", - "execa": "^0.9.0", - "find-up": "^3.0.0", - "get-stdin": "^6.0.0", - "is-ci": "^1.2.1", - "pkg-dir": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "read-pkg": "^4.0.1", - "run-node": "^1.0.0", - "slash": "^2.0.0" + "cosmiconfig": "5.0.6", + "execa": "0.9.0", + "find-up": "3.0.0", + "get-stdin": "6.0.0", + "is-ci": "1.2.1", + "pkg-dir": "3.0.0", + "please-upgrade-node": "3.1.1", + "read-pkg": "4.0.1", + "run-node": "1.0.0", + "slash": "2.0.0" }, "dependencies": { "cosmiconfig": { @@ -1971,9 +1702,9 @@ "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", "dev": true, "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "parse-json": "4.0.0" } }, "execa": { @@ -1982,13 +1713,13 @@ "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "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" } }, "find-up": { @@ -1997,7 +1728,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -2006,8 +1737,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -2016,7 +1747,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -2025,7 +1756,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.0.0" } }, "p-try": { @@ -2040,8 +1771,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" } }, "please-upgrade-node": { @@ -2050,7 +1781,7 @@ "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", "dev": true, "requires": { - "semver-compare": "^1.0.0" + "semver-compare": "1.0.0" } } } @@ -2070,28 +1801,16 @@ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "inflight": { @@ -2099,8 +1818,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -2113,37 +1832,18 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" - } - }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" }, "dependencies": { "kind-of": { @@ -2171,7 +1871,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "builtin-modules": "1.1.1" } }, "is-ci": { @@ -2180,7 +1880,7 @@ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "ci-info": "1.6.0" } }, "is-data-descriptor": { @@ -2189,7 +1889,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" }, "dependencies": { "kind-of": { @@ -2206,9 +1906,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" }, "dependencies": { "kind-of": { @@ -2243,7 +1943,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -2251,37 +1951,21 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, "is-lower-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", "requires": { - "lower-case": "^1.1.0" + "lower-case": "1.1.4" } }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-obj": { @@ -2296,7 +1980,7 @@ "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", "dev": true, "requires": { - "symbol-observable": "^1.1.0" + "symbol-observable": "1.2.0" } }, "is-odd": { @@ -2305,7 +1989,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "^4.0.0" + "is-number": "4.0.0" }, "dependencies": { "is-number": { @@ -2316,28 +2000,13 @@ } } }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "is-promise": { @@ -2346,33 +2015,12 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "^0.1.1" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -2383,29 +2031,14 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.0" - } - }, "is-upper-case": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", "requires": { - "upper-case": "^1.1.0" + "upper-case": "1.1.3" } }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -2433,20 +2066,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.11", + "js-yaml": "3.10.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.0", + "wordwrap": "1.0.0" }, "dependencies": { "esprima": { @@ -2461,11 +2094,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^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" } }, "has-flag": { @@ -2480,7 +2113,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } }, "wordwrap": { @@ -2503,10 +2136,10 @@ "integrity": "sha1-zZ8BqJ0mu4hfEqhmdxXpyGWldU8=", "dev": true, "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.0.1" + "chalk": "2.3.0", + "jest-get-type": "22.4.3", + "leven": "2.1.0", + "pretty-format": "23.0.1" } }, "js-string-escape": { @@ -2514,20 +2147,14 @@ "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.9", + "esprima": "4.0.0" } }, "jsbn": { @@ -2563,24 +2190,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jspm-config": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/jspm-config/-/jspm-config-0.3.4.tgz", - "integrity": "sha1-RMJpAuSujs4jZs7cn/FrEKXzkcY=", - "dev": true, - "requires": { - "any-promise": "^1.3.0", - "graceful-fs": "^4.1.4", - "make-error-cause": "^1.2.1", - "object.pick": "^1.1.2", - "parse-json": "^2.2.0", - "strip-bom": "^3.0.0", - "thenify": "^3.2.0", - "throat": "^3.0.0", - "xtend": "^4.0.1" + "graceful-fs": "4.1.11" } }, "jsprim": { @@ -2605,16 +2215,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" + "is-buffer": "1.1.6" } }, "lazy-cache": { @@ -2628,7 +2229,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "1.0.0" } }, "leven": { @@ -2643,8 +2244,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "lint-staged": { @@ -2653,29 +2254,29 @@ "integrity": "sha512-jPoIMbmgtWMUrz/l0rhBVa1j6H71zr0rEoxDWBA333PZcaqBvELdg0Sf4tdGHlwrBM0GXaXMVgTRkLTm2vA7Jg==", "dev": true, "requires": { - "app-root-path": "^2.0.1", - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.0.2", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "execa": "^0.9.0", - "find-parent-dir": "^0.3.0", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "jest-validate": "^23.0.0", - "listr": "^0.14.1", - "lodash": "^4.17.5", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", + "app-root-path": "2.0.1", + "chalk": "2.4.1", + "commander": "2.15.1", + "cosmiconfig": "5.0.5", + "debug": "3.1.0", + "dedent": "0.7.0", + "execa": "0.9.0", + "find-parent-dir": "0.3.0", + "is-glob": "4.0.0", + "is-windows": "1.0.2", + "jest-validate": "23.0.1", + "listr": "0.14.1", + "lodash": "4.17.5", + "log-symbols": "2.2.0", + "micromatch": "3.1.10", + "npm-which": "3.0.1", + "p-map": "1.2.0", + "path-is-inside": "1.0.2", + "pify": "3.0.0", + "please-upgrade-node": "3.0.2", "staged-git-files": "1.1.1", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2" + "string-argv": "0.0.2", + "stringify-object": "3.2.2" }, "dependencies": { "ansi-styles": { @@ -2684,7 +2285,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { @@ -2693,9 +2294,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "debug": { @@ -2713,13 +2314,13 @@ "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "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" } }, "has-flag": { @@ -2734,7 +2335,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-windows": { @@ -2749,39 +2350,33 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } }, - "listify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/listify/-/listify-1.0.0.tgz", - "integrity": "sha1-A8p7otFQ1CZ3c/dOV1WNEFPSvuM=", - "dev": true - }, "listr": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.1.tgz", "integrity": "sha512-MSMUUVN1f8aRnPi4034RkOqdiUlpYW+FqwFE3aL0uYNPRavkt2S2SsSpDDofn8BDpqv2RNnsdOcCHWsChcq77A==", "dev": true, "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "cli-truncate": "^0.2.1", - "figures": "^1.7.0", - "indent-string": "^2.1.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.4.0", - "listr-verbose-renderer": "^0.4.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "ora": "^0.2.3", - "p-map": "^1.1.1", - "rxjs": "^6.1.0", - "strip-ansi": "^3.0.1" + "@samverschueren/stream-to-observable": "0.3.0", + "cli-truncate": "0.2.1", + "figures": "1.7.0", + "indent-string": "2.1.0", + "is-observable": "1.1.0", + "is-promise": "2.1.0", + "is-stream": "1.1.0", + "listr-silent-renderer": "1.1.1", + "listr-update-renderer": "0.4.0", + "listr-verbose-renderer": "0.4.1", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "ora": "0.2.3", + "p-map": "1.2.0", + "rxjs": "6.2.1", + "strip-ansi": "3.0.1" }, "dependencies": { "ansi-regex": { @@ -2802,11 +2397,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" } }, "cli-truncate": { @@ -2816,7 +2411,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "^1.0.1" + "string-width": "1.0.2" } }, "is-fullwidth-code-point": { @@ -2825,7 +2420,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "log-symbols": { @@ -2834,7 +2429,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "^1.0.0" + "chalk": "1.1.3" } }, "slice-ansi": { @@ -2849,9 +2444,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -2860,7 +2455,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "supports-color": { @@ -2883,14 +2478,14 @@ "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "strip-ansi": "^3.0.1" + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "elegant-spinner": "1.0.1", + "figures": "1.7.0", + "indent-string": "3.2.0", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "ansi-regex": { @@ -2911,11 +2506,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" } }, "cli-truncate": { @@ -2925,7 +2520,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "^1.0.1" + "string-width": "1.0.2" } }, "indent-string": { @@ -2940,7 +2535,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "log-symbols": { @@ -2949,7 +2544,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "^1.0.0" + "chalk": "1.1.3" } }, "slice-ansi": { @@ -2964,9 +2559,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -2975,7 +2570,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "supports-color": { @@ -2992,10 +2587,10 @@ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-cursor": "^1.0.2", - "date-fns": "^1.27.2", - "figures": "^1.7.0" + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "date-fns": "1.29.0", + "figures": "1.7.0" }, "dependencies": { "ansi-regex": { @@ -3016,11 +2611,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" } }, "strip-ansi": { @@ -3029,7 +2624,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "supports-color": { @@ -3045,16 +2640,10 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, - "lockfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.3.tgz", - "integrity": "sha1-Jjj8OaAzHpysGgS3F5mTHJxQ33k=", - "dev": true - }, "lodash": { "version": "4.17.5", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", @@ -3073,7 +2662,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "2.3.0" } }, "log-update": { @@ -3082,8 +2671,8 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "^1.0.0", - "cli-cursor": "^1.0.2" + "ansi-escapes": "1.4.0", + "cli-cursor": "1.0.2" } }, "lolex": { @@ -3097,15 +2686,6 @@ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "^3.0.0" - } - }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -3116,54 +2696,16 @@ "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", "requires": { - "lower-case": "^1.1.2" + "lower-case": "1.1.4" } }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, "lru-cache": { "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==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.2.tgz", - "integrity": "sha512-l9ra35l5VWLF24y75Tg8XgfGLX0ueRhph118WKM6H5denx4bB5QF59+4UAm9oJ2qsPQZas/CQUDdtDdfvYHBdQ==", - "dev": true - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "dev": true, - "requires": { - "make-error": "^1.2.0" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "map-cache": { @@ -3178,7 +2720,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "mem": { @@ -3186,7 +2728,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.1.0" } }, "micromatch": { @@ -3195,19 +2737,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" }, "dependencies": { "arr-diff": { @@ -3222,8 +2764,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, "is-extendable": { @@ -3232,7 +2774,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } }, "kind-of": { @@ -3247,10 +2789,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } } } @@ -3265,7 +2807,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "mime-db": "~1.30.0" + "mime-db": "1.30.0" } }, "mimic-fn": { @@ -3278,7 +2820,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.8" } }, "minimist": { @@ -3291,8 +2833,8 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "safe-buffer": "5.1.2", + "yallist": "3.0.2" }, "dependencies": { "safe-buffer": { @@ -3312,7 +2854,7 @@ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "requires": { - "minipass": "^2.2.1" + "minipass": "2.3.3" } }, "mixin-deep": { @@ -3321,8 +2863,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -3331,7 +2873,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -3391,7 +2933,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "2.0.0" } } } @@ -3412,9 +2954,9 @@ "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.1.0.tgz", "integrity": "sha512-ekht0eILEV0P1CbpkwpAxhgO+/5goYizUJrt7pgDm3fP6lGKe0+8V9jhTvQZ8DPHkycSd0wYGUoz/YA7VN7kQQ==", "requires": { - "debug": "^2.6.3", - "generic-pool": "^3.1.7", - "tedious": "^2.0.0" + "debug": "2.6.9", + "generic-pool": "3.4.0", + "tedious": "2.1.5" } }, "mysql": { @@ -3433,9 +2975,9 @@ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" } }, "nan": { @@ -3449,18 +2991,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" }, "dependencies": { "arr-diff": { @@ -3481,8 +3023,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, "is-extendable": { @@ -3491,7 +3033,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } }, "is-windows": { @@ -3513,9 +3055,9 @@ "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz", "integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==", "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.19", + "sax": "1.2.4" } }, "nise": { @@ -3524,11 +3066,11 @@ "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", "dev": true, "requires": { - "@sinonjs/formatio": "^2.0.0", - "just-extend": "^1.1.27", - "lolex": "^2.3.2", - "path-to-regexp": "^1.7.0", - "text-encoding": "^0.6.4" + "@sinonjs/formatio": "2.0.0", + "just-extend": "1.1.27", + "lolex": "2.7.0", + "path-to-regexp": "1.7.0", + "text-encoding": "0.6.4" } }, "no-case": { @@ -3536,7 +3078,7 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "requires": { - "lower-case": "^1.1.1" + "lower-case": "1.1.4" } }, "node-pre-gyp": { @@ -3544,16 +3086,16 @@ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.1", + "nopt": "4.0.1", + "npm-packlist": "1.1.11", + "npmlog": "4.1.2", + "rc": "1.2.8", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.4" }, "dependencies": { "nopt": { @@ -3561,8 +3103,8 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.0.9", + "osenv": "0.1.5" } }, "semver": { @@ -3578,7 +3120,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "1.0.9" } }, "normalize-package-data": { @@ -3587,10 +3129,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "4.3.2", + "validate-npm-package-license": "3.0.4" } }, "npm-bundled": { @@ -3603,8 +3145,8 @@ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" } }, "npm-path": { @@ -3613,7 +3155,7 @@ "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", "dev": true, "requires": { - "which": "^1.2.10" + "which": "1.3.0" } }, "npm-run-path": { @@ -3621,7 +3163,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "npm-which": { @@ -3630,9 +3172,9 @@ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "dev": true, "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" + "commander": "2.15.1", + "npm-path": "2.0.4", + "which": "1.3.0" } }, "npmlog": { @@ -3640,10 +3182,10 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { @@ -3667,9 +3209,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -3678,7 +3220,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "is-accessor-descriptor": { @@ -3687,7 +3229,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-data-descriptor": { @@ -3696,7 +3238,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-descriptor": { @@ -3705,9 +3247,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -3726,7 +3268,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" } }, "object.pick": { @@ -3735,7 +3277,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "once": { @@ -3743,7 +3285,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "onetime": { @@ -3757,8 +3299,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.10", + "wordwrap": "0.0.3" } }, "optionator": { @@ -3767,12 +3309,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" }, "dependencies": { "wordwrap": { @@ -3789,10 +3331,10 @@ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.1.2", - "object-assign": "^4.0.1" + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" }, "dependencies": { "ansi-regex": { @@ -3813,11 +3355,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" } }, "strip-ansi": { @@ -3826,7 +3368,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "supports-color": { @@ -3847,9 +3389,9 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "os-tmpdir": { @@ -3862,8 +3404,8 @@ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "p-finally": { @@ -3876,7 +3418,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -3884,7 +3426,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-map": { @@ -3898,26 +3440,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, "packet-reader": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", @@ -3928,7 +3450,7 @@ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "requires": { - "no-case": "^2.2.0" + "no-case": "2.3.2" } }, "parent-require": { @@ -3936,21 +3458,12 @@ "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=" }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "parse5": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "requires": { - "@types/node": "*" + "@types/node": "10.0.1" } }, "pascal-case": { @@ -3958,8 +3471,8 @@ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", "requires": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" + "camel-case": "3.0.0", + "upper-case-first": "1.1.2" } }, "pascalcase": { @@ -3973,7 +3486,7 @@ "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", "requires": { - "no-case": "^2.2.0" + "no-case": "2.3.2" } }, "path-exists": { @@ -4034,9 +3547,9 @@ "js-string-escape": "1.0.1", "packet-reader": "0.3.1", "pg-connection-string": "0.1.3", - "pg-pool": "~2.0.3", - "pg-types": "~1.12.1", - "pgpass": "1.x", + "pg-pool": "2.0.3", + "pg-types": "1.12.1", + "pgpass": "1.0.2", "semver": "4.3.2" } }, @@ -4055,10 +3568,10 @@ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.1.tgz", "integrity": "sha1-1kCH45A7WP+q0nnnWVxSIIoUw9I=", "requires": { - "postgres-array": "~1.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.0", - "postgres-interval": "^1.1.0" + "postgres-array": "1.0.2", + "postgres-bytea": "1.0.0", + "postgres-date": "1.0.3", + "postgres-interval": "1.1.1" } }, "pgpass": { @@ -4066,7 +3579,7 @@ "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", "requires": { - "split": "^1.0.0" + "split": "1.0.1" } }, "pify": { @@ -4081,7 +3594,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" }, "dependencies": { "find-up": { @@ -4090,7 +3603,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -4099,8 +3612,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -4109,7 +3622,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -4118,7 +3631,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.0.0" } }, "p-try": { @@ -4135,7 +3648,7 @@ "integrity": "sha512-bslfSeW+ksUbB/sYZeEdKFyTG4YWU9YKRvqfSRvZKE675khAuBUPqV5RUwJZaGuWmVQLweK45Q+lPHFVnSlSug==", "dev": true, "requires": { - "semver-compare": "^1.0.0" + "semver-compare": "1.0.0" } }, "plugin-error": { @@ -4144,57 +3657,13 @@ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" + "ansi-cyan": "0.1.1", + "ansi-red": "0.1.1", + "arr-diff": "1.1.0", + "arr-union": "2.1.0", + "extend-shallow": "1.1.4" } }, - "popsicle": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-9.2.0.tgz", - "integrity": "sha512-petRj39w05GvH1WKuGFmzxR9+k+R9E7zX5XWTFee7P/qf88hMuLT7aAO/RsmldpQMtJsWQISkTQlfMRECKlxhw==", - "dev": true, - "requires": { - "concat-stream": "^1.4.7", - "form-data": "^2.0.0", - "make-error-cause": "^1.2.1", - "tough-cookie": "^2.0.0" - } - }, - "popsicle-proxy-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/popsicle-proxy-agent/-/popsicle-proxy-agent-3.0.0.tgz", - "integrity": "sha1-uRM8VdlFdZq37mG3cRNkYg066tw=", - "dev": true, - "requires": { - "http-proxy-agent": "^1.0.0", - "https-proxy-agent": "^1.0.0" - } - }, - "popsicle-retry": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/popsicle-retry/-/popsicle-retry-3.2.1.tgz", - "integrity": "sha1-4G6GZTO0KnoSPrMwy+Y6fOvLoQw=", - "dev": true, - "requires": { - "any-promise": "^1.1.0", - "xtend": "^4.0.1" - } - }, - "popsicle-rewrite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-rewrite/-/popsicle-rewrite-1.0.0.tgz", - "integrity": "sha1-HdTo6pwxgjUfuCD4eTTZkvf7kAc=", - "dev": true - }, - "popsicle-status": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/popsicle-status/-/popsicle-status-2.0.1.tgz", - "integrity": "sha1-jdcMT+fGlBCa3XhP/oDqysHnso0=", - "dev": true - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -4221,7 +3690,7 @@ "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", "requires": { - "xtend": "^4.0.0" + "xtend": "4.0.1" } }, "prelude-ls": { @@ -4230,12 +3699,6 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, "prettier": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", @@ -4248,8 +3711,8 @@ "integrity": "sha1-1h0GUmjkx1kIO8y8onoBrXx2AfQ=", "dev": true, "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" + "ansi-regex": "3.0.0", + "ansi-styles": "3.2.0" } }, "process-nextick-args": { @@ -4257,12 +3720,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, - "promise-finally": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/promise-finally/-/promise-finally-3.0.0.tgz", - "integrity": "sha1-3dXQ+JVDKxIGzrjaEnUGTRjnqiM=", - "dev": true - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -4283,10 +3740,10 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "deep-extend": { @@ -4307,9 +3764,9 @@ "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dev": true, "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" + "normalize-package-data": "2.4.0", + "parse-json": "4.0.0", + "pify": "3.0.0" }, "dependencies": { "parse-json": { @@ -4318,8 +3775,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" } } } @@ -4329,13 +3786,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" } }, "reflect-metadata": { @@ -4354,8 +3811,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" }, "dependencies": { "extend-shallow": { @@ -4364,8 +3821,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, "is-extendable": { @@ -4374,41 +3831,22 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } }, - "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, "remap-istanbul": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.12.0.tgz", "integrity": "sha512-lpA+zkWfT7v81k76asd+w82+dnbBTmBEsyuBVQ28armnOqsZZO23uI4ZCBGd8TtIb9Tq4CauswB+A44cbkuiMA==", "dev": true, "requires": { - "amdefine": "^1.0.0", + "amdefine": "1.0.1", "istanbul": "0.4.5", - "minimatch": "^3.0.3", - "plugin-error": "^0.1.2", - "source-map": "^0.6.1", + "minimatch": "3.0.4", + "plugin-error": "0.1.2", + "source-map": "0.6.1", "through2": "2.0.1" }, "dependencies": { @@ -4437,7 +3875,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "request": { @@ -4446,28 +3884,28 @@ "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "hawk": "~6.0.2", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "stringstream": "~0.0.5", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.6", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" }, "dependencies": { "form-data": { @@ -4476,9 +3914,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.17" }, "dependencies": { "combined-stream": { @@ -4487,7 +3925,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } } } @@ -4522,8 +3960,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" + "exit-hook": "1.1.1", + "onetime": "1.1.0" } }, "ret": { @@ -4538,7 +3976,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "optional": true, "requires": { - "align-text": "^0.1.1" + "align-text": "0.1.4" } }, "rimraf": { @@ -4546,7 +3984,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "run-node": { @@ -4561,7 +3999,7 @@ "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.2" } }, "safe-buffer": { @@ -4575,7 +4013,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "samsam": { @@ -4600,30 +4038,13 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, "sentence-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", "requires": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" + "no-case": "2.3.2", + "upper-case-first": "1.1.2" } }, "set-blocking": { @@ -4637,7 +4058,7 @@ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", "dev": true, "requires": { - "to-object-path": "^0.3.0" + "to-object-path": "0.3.0" } }, "set-value": { @@ -4646,10 +4067,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -4658,7 +4079,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -4668,7 +4089,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -4687,13 +4108,13 @@ "integrity": "sha512-MatciKXyM5pXMSoqd593MqTsItJNCkSSl53HJYeKR5wfsDdp2yljjUQJLfVwAWLoBNfx1HThteqygGQ0ZEpXpQ==", "dev": true, "requires": { - "@sinonjs/formatio": "^2.0.0", - "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.4.2", - "nise": "^1.3.3", - "supports-color": "^5.4.0", - "type-detect": "^4.0.8" + "@sinonjs/formatio": "2.0.0", + "diff": "3.5.0", + "lodash.get": "4.4.2", + "lolex": "2.7.0", + "nise": "1.4.2", + "supports-color": "5.4.0", + "type-detect": "4.0.8" }, "dependencies": { "has-flag": { @@ -4708,7 +4129,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "type-detect": { @@ -4731,21 +4152,12 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, "snake-case": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", "requires": { - "no-case": "^2.2.0" + "no-case": "2.3.2" } }, "snapdragon": { @@ -4754,14 +4166,14 @@ "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^2.0.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "2.0.2" }, "dependencies": { "define-property": { @@ -4770,7 +4182,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -4779,7 +4191,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -4788,7 +4200,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -4797,7 +4209,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -4808,7 +4220,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -4817,7 +4229,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -4828,9 +4240,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -4853,9 +4265,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -4864,7 +4276,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } } } @@ -4875,7 +4287,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" } }, "sntp": { @@ -4884,16 +4296,7 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.x.x" - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" + "hoek": "4.2.1" } }, "source-map": { @@ -4901,7 +4304,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } }, "source-map-resolve": { @@ -4910,11 +4313,11 @@ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "atob": "^2.0.0", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.1", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-url": { @@ -4929,8 +4332,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.1" } }, "spdx-exceptions": { @@ -4945,8 +4348,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.1" } }, "spdx-license-ids": { @@ -4960,7 +4363,7 @@ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "requires": { - "through": "2" + "through": "2.3.8" } }, "split-string": { @@ -4969,7 +4372,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -4978,8 +4381,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" } }, "is-extendable": { @@ -4988,7 +4391,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -5008,9 +4411,9 @@ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.2.tgz", "integrity": "sha512-51ferIRwYOhzUEtogqOa/y9supADlAht98bF/gbIi6WkzRJX6Yioldxbzj1MV4yV+LgdKD/kkHwFTeFXOG4htA==", "requires": { - "nan": "~2.10.0", - "node-pre-gyp": "^0.10.3", - "request": "^2.87.0" + "nan": "2.10.0", + "node-pre-gyp": "0.10.3", + "request": "2.87.0" }, "dependencies": { "form-data": { @@ -5018,9 +4421,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.17" }, "dependencies": { "combined-stream": { @@ -5028,7 +4431,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } } } @@ -5038,26 +4441,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" } } } @@ -5072,14 +4475,14 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" + "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", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" } }, "staged-git-files": { @@ -5094,8 +4497,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -5104,7 +4507,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "is-accessor-descriptor": { @@ -5113,7 +4516,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -5122,7 +4525,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -5133,7 +4536,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -5142,7 +4545,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -5153,9 +4556,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -5172,19 +4575,13 @@ "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", "dev": true }, - "string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=", - "dev": true - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "string_decoder": { @@ -5192,7 +4589,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "stringify-object": { @@ -5201,9 +4598,9 @@ "integrity": "sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg==", "dev": true, "requires": { - "get-own-enumerable-property-symbols": "^2.0.1", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "get-own-enumerable-property-symbols": "2.0.1", + "is-obj": "1.0.1", + "is-regexp": "1.0.0" } }, "stringstream": { @@ -5217,15 +4614,9 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -5241,7 +4632,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "requires": { - "has-flag": "^2.0.0" + "has-flag": "2.0.0" } }, "swap-case": { @@ -5249,8 +4640,8 @@ "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", "requires": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" + "lower-case": "1.1.4", + "upper-case": "1.1.3" } }, "symbol-observable": { @@ -5264,13 +4655,13 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz", "integrity": "sha512-mq9ixIYfNF9SK0IS/h2HKMu8Q2iaCuhDDsZhdEag/FHv8fOaYld4vN7ouMgcSSt5WKZzPs8atclTcJm36OTh4w==", "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.3", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.3", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.2" }, "dependencies": { "safe-buffer": { @@ -5290,23 +4681,14 @@ "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.1.5.tgz", "integrity": "sha1-hVdNIs3hdp3+TMSg1pcXWxPl0xg=", "requires": { - "babel-runtime": "^6.26.0", + "babel-runtime": "6.26.0", "big-number": "0.3.1", - "bl": "^1.2.0", - "iconv-lite": "^0.4.11", - "readable-stream": "^2.2.6", + "bl": "1.2.1", + "iconv-lite": "0.4.19", + "readable-stream": "2.3.3", "sprintf": "0.1.5" } }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, "text-encoding": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", @@ -5318,7 +4700,7 @@ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", "requires": { - "any-promise": "^1.0.0" + "any-promise": "1.3.0" } }, "thenify-all": { @@ -5326,15 +4708,9 @@ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", "requires": { - "thenify": ">= 3.1.0 < 4" + "thenify": "3.3.0" } }, - "throat": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", - "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -5346,8 +4722,8 @@ "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", "dev": true, "requires": { - "readable-stream": "~2.0.0", - "xtend": "~4.0.0" + "readable-stream": "2.0.6", + "xtend": "4.0.1" }, "dependencies": { "readable-stream": { @@ -5356,12 +4732,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" + "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" } }, "string_decoder": { @@ -5372,19 +4748,13 @@ } } }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, "title-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" + "no-case": "2.3.2", + "upper-case": "1.1.3" } }, "to-object-path": { @@ -5393,7 +4763,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "to-regex": { @@ -5402,9 +4772,9 @@ "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", "dev": true, "requires": { - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "regex-not": "^1.0.0" + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "regex-not": "1.0.2" }, "dependencies": { "define-property": { @@ -5413,7 +4783,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -5422,7 +4792,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -5431,7 +4801,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -5440,7 +4810,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -5451,7 +4821,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -5460,7 +4830,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -5471,9 +4841,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -5490,8 +4860,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" }, "dependencies": { "is-number": { @@ -5500,27 +4870,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", - "dev": true, - "requires": { - "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" + "kind-of": "3.2.2" } } } @@ -5530,7 +4880,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" } }, "tslib": { @@ -5544,7 +4894,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.1" } }, "tweetnacl": { @@ -5559,7 +4909,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-detect": { @@ -5568,30 +4918,24 @@ "integrity": "sha512-qZ3bAurt2IXGPR3c57PyaSYEnQiLRwPeS60G9TahElBZsdOABo+iKYch/PhRjSTZJ5/DF08x43XMt9qec2g3ig==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "typeorm": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.7.tgz", "integrity": "sha512-D7JxOBSqBiLAPu/M/4v15J++3klAWcv5WvYgrfl0iaaGObZJ/8UXm3oTpOtQUHfwJO9Cja8JMiwT9G7dyvwrxg==", "requires": { - "app-root-path": "^2.0.1", - "buffer": "^5.1.0", - "chalk": "^2.3.2", - "cli-highlight": "^1.2.3", - "debug": "^3.1.0", - "dotenv": "^5.0.1", - "glob": "^7.1.2", - "js-yaml": "^3.11.0", - "mkdirp": "^0.5.1", - "reflect-metadata": "^0.1.12", - "xml2js": "^0.4.17", - "yargonaut": "^1.1.2", - "yargs": "^11.1.0" + "app-root-path": "2.0.1", + "buffer": "5.2.0", + "chalk": "2.4.1", + "cli-highlight": "1.2.3", + "debug": "3.1.0", + "dotenv": "5.0.1", + "glob": "7.1.2", + "js-yaml": "3.12.0", + "mkdirp": "0.5.1", + "reflect-metadata": "0.1.12", + "xml2js": "0.4.19", + "yargonaut": "1.1.3", + "yargs": "11.1.0" }, "dependencies": { "ansi-styles": { @@ -5599,7 +4943,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "camelcase": { @@ -5612,9 +4956,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, "cliui": { @@ -5622,9 +4966,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "debug": { @@ -5650,8 +4994,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.9", + "esprima": "4.0.0" } }, "supports-color": { @@ -5659,7 +5003,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "yargs": { @@ -5667,18 +5011,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^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": "^9.0.2" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" } }, "yargs-parser": { @@ -5686,7 +5030,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } } } @@ -5696,132 +5040,15 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==" }, - "typings": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/typings/-/typings-2.1.1.tgz", - "integrity": "sha1-usxp0lWXCkeOCfdsf2iZddU1p4o=", - "dev": true, - "requires": { - "archy": "^1.0.0", - "bluebird": "^3.1.1", - "chalk": "^1.0.0", - "cli-truncate": "^1.0.0", - "columnify": "^1.5.2", - "elegant-spinner": "^1.0.1", - "has-unicode": "^2.0.1", - "listify": "^1.0.0", - "log-update": "^1.0.2", - "minimist": "^1.2.0", - "promise-finally": "^3.0.0", - "typings-core": "^2.3.3", - "update-notifier": "^2.0.0", - "wordwrap": "^1.0.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "typings-core": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/typings-core/-/typings-core-2.3.3.tgz", - "integrity": "sha1-CexUzVsR3V8e8vwKsx03ACyita0=", - "dev": true, - "requires": { - "array-uniq": "^1.0.2", - "configstore": "^3.0.0", - "debug": "^2.2.0", - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.2", - "has": "^1.0.1", - "invariant": "^2.2.0", - "is-absolute": "^0.2.3", - "jspm-config": "^0.3.0", - "listify": "^1.0.0", - "lockfile": "^1.0.1", - "make-error-cause": "^1.2.1", - "mkdirp": "^0.5.1", - "object.pick": "^1.1.1", - "parse-json": "^2.2.0", - "popsicle": "^9.0.0", - "popsicle-proxy-agent": "^3.0.0", - "popsicle-retry": "^3.2.0", - "popsicle-rewrite": "^1.0.0", - "popsicle-status": "^2.0.0", - "promise-finally": "^3.0.0", - "rc": "^1.1.5", - "rimraf": "^2.4.4", - "sort-keys": "^1.0.0", - "string-template": "^1.0.0", - "strip-bom": "^3.0.0", - "thenify": "^3.1.0", - "throat": "^3.0.0", - "touch": "^1.0.0", - "typescript": "^2.1.4", - "xtend": "^4.0.0", - "zip-object": "^0.1.0" - } - }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" }, "dependencies": { "source-map": { @@ -5836,9 +5063,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "optional": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", "window-size": "0.1.0" } } @@ -5850,22 +5077,16 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "arr-union": { @@ -5880,7 +5101,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "set-value": { @@ -5889,23 +5110,14 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -5918,8 +5130,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -5928,9 +5140,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -5952,29 +5164,6 @@ } } }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "update-notifier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", - "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -5985,7 +5174,7 @@ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", "requires": { - "upper-case": "^1.1.1" + "upper-case": "1.1.3" } }, "urix": { @@ -5994,15 +5183,6 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, "urlgrey": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", @@ -6015,9 +5195,9 @@ "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", "dev": true, "requires": { - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "lazy-cache": "^2.0.2" + "define-property": "0.2.5", + "isobject": "3.0.1", + "lazy-cache": "2.0.2" }, "dependencies": { "define-property": { @@ -6026,7 +5206,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "is-accessor-descriptor": { @@ -6035,7 +5215,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -6044,7 +5224,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6055,7 +5235,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -6064,7 +5244,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6075,9 +5255,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -6092,7 +5272,7 @@ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", "dev": true, "requires": { - "set-getter": "^0.1.0" + "set-getter": "0.1.0" } } } @@ -6113,8 +5293,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "verror": { @@ -6122,18 +5302,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" + "extsprintf": "1.3.0" } }, "which": { @@ -6141,7 +5312,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -6154,16 +5325,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "dev": true, - "requires": { - "string-width": "^2.1.1" + "string-width": "2.1.1" } }, "window-size": { @@ -6182,8 +5344,8 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "ansi-regex": { @@ -6196,7 +5358,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -6204,9 +5366,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -6214,7 +5376,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -6224,30 +5386,13 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "sax": "1.2.4", + "xmlbuilder": "9.0.7" } }, "xmlbuilder": { @@ -6280,9 +5425,9 @@ "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.3.tgz", "integrity": "sha512-+FKokBOLV7DYnHjJpXniUnn1Zng2XBqX2k8d4E4eha19rvEbnctu1TsH98yixJmge7pDSQGS2Av/R30ya+ukrw==", "requires": { - "chalk": "^1.1.1", - "figlet": "^1.1.1", - "parent-require": "^1.0.0" + "chalk": "1.1.3", + "figlet": "1.2.0", + "parent-require": "1.0.0" }, "dependencies": { "ansi-regex": { @@ -6300,11 +5445,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" } }, "strip-ansi": { @@ -6312,7 +5457,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "supports-color": { @@ -6327,18 +5472,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^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 || ^4.0.0", - "yargs-parser": "^10.1.0" + "cliui": "4.1.0", + "decamelize": "2.0.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "10.1.0" }, "dependencies": { "cliui": { @@ -6346,9 +5491,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "decamelize": { @@ -6364,7 +5509,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -6372,8 +5517,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -6381,7 +5526,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -6389,7 +5534,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.0.0" } }, "p-try": { @@ -6404,7 +5549,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" }, "dependencies": { "camelcase": { @@ -6418,12 +5563,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" - }, - "zip-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/zip-object/-/zip-object-0.1.0.tgz", - "integrity": "sha1-waDaBMiMg3dW4khoCgP/kC7D9To=", - "dev": true } } } diff --git a/package.json b/package.json index c590285..d9462e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.22", + "version": "0.3.0", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { @@ -11,7 +11,9 @@ "test": "istanbul cover ./node_modules/mocha/bin/_mocha dist/test/**/*.test.js -- -R spec", "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage-remapped.json && codecov --file=./coverage/coverage-remapped.json ", "clean": "rimraf dist coverage output", - "prettier": "prettier --write ./src/*.ts ./src/**/*.ts" + "prettier": "prettier --write ./src/*.ts ./src/**/*.ts", + "prepack": "npm run compile", + "postpack": "npm run clean" }, "repository": { "type": "git", @@ -66,4 +68,4 @@ "sinon": "^6.0.0", "sinon-chai": "^3.0.0" } -} +} \ No newline at end of file diff --git a/src/Engine.ts b/src/Engine.ts index 8f86dff..28aa47f 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -151,6 +151,13 @@ export class Engine { } return retStr; }); + Handlebars.registerHelper( + "printPropertyVisibility", + () => + this.Options.propertyVisibility !== "none" + ? this.Options.propertyVisibility + : "" + ); Handlebars.registerHelper("toPropertyName", str => { let retStr = ""; switch (this.Options.convertCaseProperty) { @@ -276,6 +283,7 @@ export interface EngineOptions { convertCaseFile: "pascal" | "param" | "camel" | "none"; convertCaseEntity: "pascal" | "camel" | "none"; convertCaseProperty: "pascal" | "camel" | "none"; + propertyVisibility: "public" | "protected" | "private" | "none"; lazy: boolean; constructor: boolean; namingStrategy: AbstractNamingStrategy; diff --git a/src/entity.mst b/src/entity.mst index 63925ac..985917c 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -23,7 +23,7 @@ import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, O array:{{is_array}},{{/is_array}} name:"{{sqlName}}" }) - {{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; + {{printPropertyVisibility}} {{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; {{/relations}}{{#relations}} @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} diff --git a/src/index.ts b/src/index.ts index 151d6ae..fcdb6f1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -81,6 +81,12 @@ var argv = Yargs.usage( choices: ["pascal", "camel", "none"], default: "none" }) + .option("pv", { + alias: "property-visibility", + describe: "Defines which visibility should have the generated property", + choices: ["public", "protected", "private", "none"], + default: "none" + }) .option("lazy", { describe: "Generate lazy relations", boolean: true, @@ -162,6 +168,7 @@ let engine = new Engine(driver, { convertCaseFile: argv.cf, convertCaseEntity: argv.ce, convertCaseProperty: argv.cp, + propertyVisibility: argv.pv, lazy: argv.lazy, constructor: argv.generateConstructor, relationIds: argv.relationIds, diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index b1fa87f..f895b76 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -65,10 +65,11 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin convertCaseEntity: 'none', convertCaseFile: 'none', convertCaseProperty: 'none', + propertyVisibility: 'none', lazy: false, constructor: false, namingStrategy: namingStrategy, - relationIds:false + relationIds: false }); conn = await createConnection(connOpt) @@ -133,8 +134,9 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st convertCaseEntity: 'none', convertCaseFile: 'none', convertCaseProperty: 'none', + propertyVisibility: 'none', lazy: false, - constructor:false, + constructor: false, namingStrategy: namingStrategy, relationIds: false }); @@ -193,8 +195,9 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri convertCaseEntity: 'none', convertCaseFile: 'none', convertCaseProperty: 'none', + propertyVisibility: 'none', lazy: false, - constructor:false, + constructor: false, namingStrategy: namingStrategy, relationIds: false }); @@ -251,8 +254,9 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin convertCaseEntity: 'none', convertCaseFile: 'none', convertCaseProperty: 'none', + propertyVisibility: 'none', lazy: false, - constructor:false, + constructor: false, namingStrategy: namingStrategy, relationIds: false }); @@ -302,8 +306,9 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str convertCaseEntity: 'none', convertCaseFile: 'none', convertCaseProperty: 'none', + propertyVisibility: 'none', lazy: false, - constructor:false, + constructor: false, namingStrategy: namingStrategy, relationIds: false }); @@ -356,8 +361,9 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st convertCaseEntity: 'none', convertCaseFile: 'none', convertCaseProperty: 'none', + propertyVisibility: 'none', lazy: false, - constructor:false, + constructor: false, namingStrategy: namingStrategy, relationIds: false }); From 8fc25aeb5e22b1977d713de0bd437d53e00a7882 Mon Sep 17 00:00:00 2001 From: Kevin Guanche Darias Date: Wed, 31 Oct 2018 09:35:35 +0000 Subject: [PATCH 056/130] Fix: Visibility Not been applied to relations --- src/entity.mst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/entity.mst b/src/entity.mst index 985917c..78c5221 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -27,8 +27,8 @@ import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, O {{/relations}}{{#relations}} @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} - {{#if (or isOneToMany isManyToMany)}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; - {{else}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; + {{#if (or isOneToMany isManyToMany)}}{{printPropertyVisibility}} {{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; + {{else}}{{printPropertyVisibility}} {{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; {{/if}} {{#if relationIdField }} From 2a42f49bcff56fcab823628cda0408b3d91088b9 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 1 Nov 2018 11:46:07 +0100 Subject: [PATCH 057/130] disabling codecov comments for PRs --- codecov.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/codecov.yml b/codecov.yml index f29eb85..56fb227 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,6 +1,4 @@ parsers: javascript: enable_partials: yes -comment: - layout: header - behavior: default +comment: off From 0484b1254a0fb63c448b2d42dcbe00edb4ced38d Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 1 Nov 2018 19:05:53 +0100 Subject: [PATCH 058/130] changes to property visibility functionality --- CHANGELOG.md | 4 +- package-lock.json | 1810 ++++++++++++++++++++++----------------------- package.json | 7 +- src/Engine.ts | 2 +- src/entity.mst | 2 +- 5 files changed, 912 insertions(+), 913 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9232329..f8da42a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Changelog -## 0.3.0 +## 0.2.24 +* Allow to define property visibility, by using --pv -* __Feature:__ Allow to define property visibility, by using --pv ## 0.2.23 * added column type to generated `@PrimaryGeneratedColumn` decorator diff --git a/package-lock.json b/package-lock.json index 6a2ee06..b03a94e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", "dev": true, "requires": { - "any-observable": "0.3.0" + "any-observable": "^0.3.0" } }, "@sinonjs/formatio": { @@ -34,7 +34,7 @@ "integrity": "sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==", "dev": true, "requires": { - "@types/chai": "4.1.3" + "@types/chai": "*" } }, "@types/chai-subset": { @@ -43,7 +43,7 @@ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==", "dev": true, "requires": { - "@types/chai": "4.1.3" + "@types/chai": "*" } }, "@types/events": { @@ -58,7 +58,7 @@ "integrity": "sha512-Q3FWsbdmkQd1ib11A4XNWQvRD//5KpPoGawA8aB2DR7pWKoW9XQv3+dGxD/Z1eVFze23Okdo27ZQytVFlweKvQ==", "dev": true, "requires": { - "@types/node": "10.0.1" + "@types/node": "*" } }, "@types/handlebars": { @@ -79,8 +79,8 @@ "integrity": "sha512-7oV5EBn5wh6hVlrwZC+dF+ECAjSLxv9QllFSGCFAsfx0Ms3DvTSIH0b8srkg2qs5Bj3kdbp8Y4VjhW7GJ346QQ==", "dev": true, "requires": { - "@types/events": "1.2.0", - "@types/node": "10.0.1" + "@types/events": "*", + "@types/node": "*" } }, "@types/mysql": { @@ -89,7 +89,7 @@ "integrity": "sha512-4QAISTUGZbcFh7bqdndo08xRdES5OTU+JODy8VCZbe1yiXyGjqw1H83G43XjQ3IbC10wn9xlGd44A5RXJwNh0Q==", "dev": true, "requires": { - "@types/node": "10.0.1" + "@types/node": "*" } }, "@types/node": { @@ -103,7 +103,7 @@ "integrity": "sha512-7cgZaKEfYcPPTScxxCoYoLxmmhM/PBobGBfxE3RGzRJl8YKhkyGKyExFu8fTOpF2cPgdfh83NGKBVX7prWzb+Q==", "dev": true, "requires": { - "@types/node": "10.0.1" + "@types/node": "*" } }, "@types/pg": { @@ -112,9 +112,9 @@ "integrity": "sha512-naSYLMOIBU+/BddUlQUyQuba9reG5yN0MR7g4EcN/AEt3zll48fGozX8s7xjaXuKmFOS1qqOrr/ZeF6SSOjKCw==", "dev": true, "requires": { - "@types/events": "1.2.0", - "@types/node": "10.0.1", - "@types/pg-types": "1.11.4" + "@types/events": "*", + "@types/node": "*", + "@types/pg-types": "*" } }, "@types/pg-types": { @@ -123,7 +123,7 @@ "integrity": "sha512-WdIiQmE347LGc1Vq3Ki8sk3iyCuLgnccqVzgxek6gEHp2H0p3MQ3jniIHt+bRODXKju4kNQ+mp53lmP5+/9moQ==", "dev": true, "requires": { - "moment": "2.22.1" + "moment": ">=2.14.0" } }, "@types/sinon": { @@ -148,10 +148,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "align-text": { @@ -159,9 +159,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -203,7 +203,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "ansi-wrap": { @@ -238,8 +238,8 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "argparse": { @@ -247,7 +247,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "argv": { @@ -262,8 +262,8 @@ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-slice": "0.2.3" + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" } }, "arr-flatten": { @@ -343,8 +343,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "balanced-match": { @@ -358,13 +358,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -373,7 +373,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } } } @@ -389,7 +389,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "big-number": { @@ -407,7 +407,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.5" } }, "boom": { @@ -416,7 +416,7 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "brace-expansion": { @@ -424,7 +424,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -434,16 +434,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.1", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.1" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -452,7 +452,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -468,8 +468,8 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz", "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==", "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, "buffer-writer": { @@ -489,15 +489,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camel-case": { @@ -505,8 +505,8 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -526,8 +526,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chai": { @@ -536,12 +536,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.6" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, "chai-as-promised": { @@ -550,7 +550,7 @@ "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, "requires": { - "check-error": "1.0.2" + "check-error": "^1.0.2" } }, "chai-subset": { @@ -564,9 +564,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" } }, "change-case": { @@ -574,24 +574,24 @@ "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", "requires": { - "camel-case": "3.0.0", - "constant-case": "2.0.0", - "dot-case": "2.1.1", - "header-case": "1.0.1", - "is-lower-case": "1.1.3", - "is-upper-case": "1.1.2", - "lower-case": "1.1.4", - "lower-case-first": "1.0.2", - "no-case": "2.3.2", - "param-case": "2.1.1", - "pascal-case": "2.0.1", - "path-case": "2.1.1", - "sentence-case": "2.1.1", - "snake-case": "2.1.0", - "swap-case": "1.1.2", - "title-case": "2.1.1", - "upper-case": "1.1.3", - "upper-case-first": "1.1.2" + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" } }, "check-error": { @@ -617,10 +617,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "arr-union": { @@ -635,7 +635,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -644,7 +644,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -653,7 +653,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -664,7 +664,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -673,7 +673,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -684,9 +684,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -703,7 +703,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-highlight": { @@ -711,11 +711,11 @@ "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-1.2.3.tgz", "integrity": "sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg==", "requires": { - "chalk": "2.3.0", - "highlight.js": "9.12.0", - "mz": "2.7.0", - "parse5": "3.0.3", - "yargs": "10.1.2" + "chalk": "^2.3.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^3.0.3", + "yargs": "^10.0.3" }, "dependencies": { "camelcase": { @@ -728,9 +728,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "yargs": { @@ -738,18 +738,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.1.0" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^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": "^8.1.0" } }, "yargs-parser": { @@ -757,7 +757,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -774,8 +774,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -804,7 +804,7 @@ "dev": true, "requires": { "argv": "0.0.2", - "request": "2.85.0", + "request": "^2.81.0", "urlgrey": "0.4.4" } }, @@ -814,8 +814,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -823,7 +823,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -836,7 +836,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -866,8 +866,8 @@ "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", "requires": { - "snake-case": "2.1.0", - "upper-case": "1.1.3" + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" } }, "copy-descriptor": { @@ -892,9 +892,9 @@ "integrity": "sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.10.0", - "parse-json": "4.0.0" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" }, "dependencies": { "parse-json": { @@ -903,8 +903,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } } } @@ -914,9 +914,9 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -925,7 +925,7 @@ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -934,7 +934,7 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } } } @@ -944,7 +944,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "date-fns": { @@ -984,7 +984,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.6" + "type-detect": "^4.0.0" } }, "deep-is": { @@ -999,8 +999,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" } }, "delayed-stream": { @@ -1029,7 +1029,7 @@ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "dotenv": { @@ -1044,7 +1044,7 @@ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "elegant-spinner": { @@ -1059,7 +1059,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "escape-string-regexp": { @@ -1073,11 +1073,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" }, "dependencies": { "esprima": { @@ -1093,7 +1093,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -1120,13 +1120,13 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "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" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "exit-hook": { @@ -1141,13 +1141,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1156,7 +1156,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1165,7 +1165,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1174,7 +1174,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -1183,7 +1183,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -1194,7 +1194,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -1203,7 +1203,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -1214,9 +1214,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -1238,7 +1238,7 @@ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { - "kind-of": "1.1.0" + "kind-of": "^1.1.0" }, "dependencies": { "kind-of": { @@ -1255,14 +1255,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1271,7 +1271,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1280,7 +1280,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1317,8 +1317,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "fill-range": { @@ -1327,10 +1327,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1339,7 +1339,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1355,7 +1355,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "for-in": { @@ -1375,7 +1375,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fs-extra": { @@ -1384,9 +1384,9 @@ "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-minipass": { @@ -1394,7 +1394,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "requires": { - "minipass": "2.3.3" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1407,14 +1407,14 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" }, "dependencies": { "ansi-regex": { @@ -1427,7 +1427,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -1435,9 +1435,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -1445,7 +1445,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -1494,7 +1494,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -1502,12 +1502,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "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" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -1527,10 +1527,10 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" } }, "har-schema": { @@ -1543,8 +1543,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has-ansi": { @@ -1552,7 +1552,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -1578,9 +1578,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -1589,8 +1589,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -1599,7 +1599,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -1608,7 +1608,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -1619,7 +1619,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -1630,10 +1630,10 @@ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "he": { @@ -1647,8 +1647,8 @@ "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.3" } }, "highlight.js": { @@ -1673,9 +1673,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "husky": { @@ -1684,16 +1684,16 @@ "integrity": "sha512-BCJmbzfauxXwfxIZYETNS95zNxnwQgzTbVPs4DL0CbMmSDvuMEAcfEjGDFEb+mmPslvywKlXZroYAdNLRDLayQ==", "dev": true, "requires": { - "cosmiconfig": "5.0.6", - "execa": "0.9.0", - "find-up": "3.0.0", - "get-stdin": "6.0.0", - "is-ci": "1.2.1", - "pkg-dir": "3.0.0", - "please-upgrade-node": "3.1.1", - "read-pkg": "4.0.1", - "run-node": "1.0.0", - "slash": "2.0.0" + "cosmiconfig": "^5.0.6", + "execa": "^0.9.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^1.2.1", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" }, "dependencies": { "cosmiconfig": { @@ -1702,9 +1702,9 @@ "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.10.0", - "parse-json": "4.0.0" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" } }, "execa": { @@ -1713,13 +1713,13 @@ "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", "dev": true, "requires": { - "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" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "find-up": { @@ -1728,7 +1728,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -1737,8 +1737,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -1747,7 +1747,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -1756,7 +1756,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -1771,8 +1771,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "please-upgrade-node": { @@ -1781,7 +1781,7 @@ "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", "dev": true, "requires": { - "semver-compare": "1.0.0" + "semver-compare": "^1.0.0" } } } @@ -1801,7 +1801,7 @@ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "indent-string": { @@ -1810,7 +1810,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "inflight": { @@ -1818,8 +1818,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -1843,7 +1843,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" }, "dependencies": { "kind-of": { @@ -1871,7 +1871,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-ci": { @@ -1880,7 +1880,7 @@ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "ci-info": "1.6.0" + "ci-info": "^1.5.0" } }, "is-data-descriptor": { @@ -1889,7 +1889,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" }, "dependencies": { "kind-of": { @@ -1906,9 +1906,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { @@ -1943,7 +1943,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -1956,7 +1956,7 @@ "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.0" } }, "is-number": { @@ -1965,7 +1965,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-obj": { @@ -1980,7 +1980,7 @@ "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", "dev": true, "requires": { - "symbol-observable": "1.2.0" + "symbol-observable": "^1.1.0" } }, "is-odd": { @@ -1989,7 +1989,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -2006,7 +2006,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-promise": { @@ -2036,7 +2036,7 @@ "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", "requires": { - "upper-case": "1.1.3" + "upper-case": "^1.1.0" } }, "isarray": { @@ -2066,20 +2066,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.11", - "js-yaml": "3.10.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.0", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "esprima": { @@ -2094,11 +2094,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-flag": { @@ -2113,7 +2113,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } }, "wordwrap": { @@ -2136,10 +2136,10 @@ "integrity": "sha1-zZ8BqJ0mu4hfEqhmdxXpyGWldU8=", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-get-type": "22.4.3", - "leven": "2.1.0", - "pretty-format": "23.0.1" + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.0.1" } }, "js-string-escape": { @@ -2153,8 +2153,8 @@ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -2190,7 +2190,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsprim": { @@ -2215,7 +2215,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -2229,7 +2229,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "leven": { @@ -2244,8 +2244,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "lint-staged": { @@ -2254,29 +2254,29 @@ "integrity": "sha512-jPoIMbmgtWMUrz/l0rhBVa1j6H71zr0rEoxDWBA333PZcaqBvELdg0Sf4tdGHlwrBM0GXaXMVgTRkLTm2vA7Jg==", "dev": true, "requires": { - "app-root-path": "2.0.1", - "chalk": "2.4.1", - "commander": "2.15.1", - "cosmiconfig": "5.0.5", - "debug": "3.1.0", - "dedent": "0.7.0", - "execa": "0.9.0", - "find-parent-dir": "0.3.0", - "is-glob": "4.0.0", - "is-windows": "1.0.2", - "jest-validate": "23.0.1", - "listr": "0.14.1", - "lodash": "4.17.5", - "log-symbols": "2.2.0", - "micromatch": "3.1.10", - "npm-which": "3.0.1", - "p-map": "1.2.0", - "path-is-inside": "1.0.2", - "pify": "3.0.0", - "please-upgrade-node": "3.0.2", + "app-root-path": "^2.0.1", + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^5.0.2", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "execa": "^0.9.0", + "find-parent-dir": "^0.3.0", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "jest-validate": "^23.0.0", + "listr": "^0.14.1", + "lodash": "^4.17.5", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", "staged-git-files": "1.1.1", - "string-argv": "0.0.2", - "stringify-object": "3.2.2" + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2" }, "dependencies": { "ansi-styles": { @@ -2285,7 +2285,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -2294,9 +2294,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -2314,13 +2314,13 @@ "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", "dev": true, "requires": { - "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" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "has-flag": { @@ -2335,7 +2335,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-windows": { @@ -2350,7 +2350,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -2361,22 +2361,22 @@ "integrity": "sha512-MSMUUVN1f8aRnPi4034RkOqdiUlpYW+FqwFE3aL0uYNPRavkt2S2SsSpDDofn8BDpqv2RNnsdOcCHWsChcq77A==", "dev": true, "requires": { - "@samverschueren/stream-to-observable": "0.3.0", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-observable": "1.1.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.4.0", - "listr-verbose-renderer": "0.4.1", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "6.2.1", - "strip-ansi": "3.0.1" + "@samverschueren/stream-to-observable": "^0.3.0", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.4.0", + "listr-verbose-renderer": "^0.4.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "ora": "^0.2.3", + "p-map": "^1.1.1", + "rxjs": "^6.1.0", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -2397,11 +2397,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-truncate": { @@ -2411,7 +2411,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" } }, "is-fullwidth-code-point": { @@ -2420,7 +2420,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "log-symbols": { @@ -2429,7 +2429,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } }, "slice-ansi": { @@ -2444,9 +2444,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -2455,7 +2455,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -2478,14 +2478,14 @@ "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -2506,11 +2506,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-truncate": { @@ -2520,7 +2520,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" } }, "indent-string": { @@ -2535,7 +2535,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "log-symbols": { @@ -2544,7 +2544,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } }, "slice-ansi": { @@ -2559,9 +2559,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -2570,7 +2570,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -2587,10 +2587,10 @@ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" }, "dependencies": { "ansi-regex": { @@ -2611,11 +2611,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -2624,7 +2624,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -2640,8 +2640,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -2662,7 +2662,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "2.3.0" + "chalk": "^2.0.1" } }, "log-update": { @@ -2671,8 +2671,8 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" } }, "lolex": { @@ -2696,7 +2696,7 @@ "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.2" } }, "lru-cache": { @@ -2704,8 +2704,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "map-cache": { @@ -2720,7 +2720,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "mem": { @@ -2728,7 +2728,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "micromatch": { @@ -2737,19 +2737,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "dependencies": { "arr-diff": { @@ -2764,8 +2764,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -2774,7 +2774,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } }, "kind-of": { @@ -2789,10 +2789,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } } } @@ -2807,7 +2807,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.30.0" } }, "mimic-fn": { @@ -2820,7 +2820,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2833,8 +2833,8 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.2" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" }, "dependencies": { "safe-buffer": { @@ -2854,7 +2854,7 @@ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "requires": { - "minipass": "2.3.3" + "minipass": "^2.2.1" } }, "mixin-deep": { @@ -2863,8 +2863,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2873,7 +2873,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2933,7 +2933,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -2954,9 +2954,9 @@ "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.1.0.tgz", "integrity": "sha512-ekht0eILEV0P1CbpkwpAxhgO+/5goYizUJrt7pgDm3fP6lGKe0+8V9jhTvQZ8DPHkycSd0wYGUoz/YA7VN7kQQ==", "requires": { - "debug": "2.6.9", - "generic-pool": "3.4.0", - "tedious": "2.1.5" + "debug": "^2.6.3", + "generic-pool": "^3.1.7", + "tedious": "^2.0.0" } }, "mysql": { @@ -2975,9 +2975,9 @@ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "requires": { - "any-promise": "1.3.0", - "object-assign": "4.1.1", - "thenify-all": "1.6.0" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, "nan": { @@ -2991,18 +2991,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -3023,8 +3023,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -3033,7 +3033,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } }, "is-windows": { @@ -3055,9 +3055,9 @@ "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz", "integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==", "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.19", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "nise": { @@ -3066,11 +3066,11 @@ "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "just-extend": "1.1.27", - "lolex": "2.7.0", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" + "@sinonjs/formatio": "^2.0.0", + "just-extend": "^1.1.27", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" } }, "no-case": { @@ -3078,7 +3078,7 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-pre-gyp": { @@ -3086,16 +3086,16 @@ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.1", - "nopt": "4.0.1", - "npm-packlist": "1.1.11", - "npmlog": "4.1.2", - "rc": "1.2.8", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.4" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" }, "dependencies": { "nopt": { @@ -3103,8 +3103,8 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { - "abbrev": "1.0.9", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "semver": { @@ -3120,7 +3120,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "normalize-package-data": { @@ -3129,10 +3129,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "4.3.2", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "npm-bundled": { @@ -3145,8 +3145,8 @@ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npm-path": { @@ -3155,7 +3155,7 @@ "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", "dev": true, "requires": { - "which": "1.3.0" + "which": "^1.2.10" } }, "npm-run-path": { @@ -3163,7 +3163,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npm-which": { @@ -3172,9 +3172,9 @@ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "dev": true, "requires": { - "commander": "2.15.1", - "npm-path": "2.0.4", - "which": "1.3.0" + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" } }, "npmlog": { @@ -3182,10 +3182,10 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -3209,9 +3209,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -3220,7 +3220,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -3229,7 +3229,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-data-descriptor": { @@ -3238,7 +3238,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-descriptor": { @@ -3247,9 +3247,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -3268,7 +3268,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.pick": { @@ -3277,7 +3277,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "once": { @@ -3285,7 +3285,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -3299,8 +3299,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "optionator": { @@ -3309,12 +3309,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "dependencies": { "wordwrap": { @@ -3331,10 +3331,10 @@ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" }, "dependencies": { "ansi-regex": { @@ -3355,11 +3355,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -3368,7 +3368,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -3389,9 +3389,9 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -3404,8 +3404,8 @@ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "p-finally": { @@ -3418,7 +3418,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -3426,7 +3426,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -3450,7 +3450,7 @@ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parent-require": { @@ -3463,7 +3463,7 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "requires": { - "@types/node": "10.0.1" + "@types/node": "*" } }, "pascal-case": { @@ -3471,8 +3471,8 @@ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", "requires": { - "camel-case": "3.0.0", - "upper-case-first": "1.1.2" + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" } }, "pascalcase": { @@ -3486,7 +3486,7 @@ "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "path-exists": { @@ -3547,9 +3547,9 @@ "js-string-escape": "1.0.1", "packet-reader": "0.3.1", "pg-connection-string": "0.1.3", - "pg-pool": "2.0.3", - "pg-types": "1.12.1", - "pgpass": "1.0.2", + "pg-pool": "~2.0.3", + "pg-types": "~1.12.1", + "pgpass": "1.x", "semver": "4.3.2" } }, @@ -3568,10 +3568,10 @@ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.1.tgz", "integrity": "sha1-1kCH45A7WP+q0nnnWVxSIIoUw9I=", "requires": { - "postgres-array": "1.0.2", - "postgres-bytea": "1.0.0", - "postgres-date": "1.0.3", - "postgres-interval": "1.1.1" + "postgres-array": "~1.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.0", + "postgres-interval": "^1.1.0" } }, "pgpass": { @@ -3579,7 +3579,7 @@ "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", "requires": { - "split": "1.0.1" + "split": "^1.0.0" } }, "pify": { @@ -3594,7 +3594,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" }, "dependencies": { "find-up": { @@ -3603,7 +3603,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -3612,8 +3612,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -3622,7 +3622,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -3631,7 +3631,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -3648,7 +3648,7 @@ "integrity": "sha512-bslfSeW+ksUbB/sYZeEdKFyTG4YWU9YKRvqfSRvZKE675khAuBUPqV5RUwJZaGuWmVQLweK45Q+lPHFVnSlSug==", "dev": true, "requires": { - "semver-compare": "1.0.0" + "semver-compare": "^1.0.0" } }, "plugin-error": { @@ -3657,11 +3657,11 @@ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { - "ansi-cyan": "0.1.1", - "ansi-red": "0.1.1", - "arr-diff": "1.1.0", - "arr-union": "2.1.0", - "extend-shallow": "1.1.4" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" } }, "posix-character-classes": { @@ -3690,7 +3690,7 @@ "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", "requires": { - "xtend": "4.0.1" + "xtend": "^4.0.0" } }, "prelude-ls": { @@ -3711,8 +3711,8 @@ "integrity": "sha1-1h0GUmjkx1kIO8y8onoBrXx2AfQ=", "dev": true, "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" } }, "process-nextick-args": { @@ -3740,10 +3740,10 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "deep-extend": { @@ -3764,9 +3764,9 @@ "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dev": true, "requires": { - "normalize-package-data": "2.4.0", - "parse-json": "4.0.0", - "pify": "3.0.0" + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" }, "dependencies": { "parse-json": { @@ -3775,8 +3775,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } } } @@ -3786,13 +3786,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "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.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "reflect-metadata": { @@ -3811,8 +3811,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "dependencies": { "extend-shallow": { @@ -3821,8 +3821,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -3831,7 +3831,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3842,11 +3842,11 @@ "integrity": "sha512-lpA+zkWfT7v81k76asd+w82+dnbBTmBEsyuBVQ28armnOqsZZO23uI4ZCBGd8TtIb9Tq4CauswB+A44cbkuiMA==", "dev": true, "requires": { - "amdefine": "1.0.1", + "amdefine": "^1.0.0", "istanbul": "0.4.5", - "minimatch": "3.0.4", - "plugin-error": "0.1.2", - "source-map": "0.6.1", + "minimatch": "^3.0.3", + "plugin-error": "^0.1.2", + "source-map": "^0.6.1", "through2": "2.0.1" }, "dependencies": { @@ -3875,7 +3875,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "request": { @@ -3884,28 +3884,28 @@ "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.6", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" }, "dependencies": { "form-data": { @@ -3914,9 +3914,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.17" + "mime-types": "^2.1.12" }, "dependencies": { "combined-stream": { @@ -3925,7 +3925,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } } } @@ -3960,8 +3960,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "ret": { @@ -3976,7 +3976,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -3984,7 +3984,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "run-node": { @@ -3999,7 +3999,7 @@ "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==", "dev": true, "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -4013,7 +4013,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "samsam": { @@ -4043,8 +4043,8 @@ "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", "requires": { - "no-case": "2.3.2", - "upper-case-first": "1.1.2" + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, "set-blocking": { @@ -4058,7 +4058,7 @@ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", "dev": true, "requires": { - "to-object-path": "0.3.0" + "to-object-path": "^0.3.0" } }, "set-value": { @@ -4067,10 +4067,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -4079,7 +4079,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4089,7 +4089,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4108,13 +4108,13 @@ "integrity": "sha512-MatciKXyM5pXMSoqd593MqTsItJNCkSSl53HJYeKR5wfsDdp2yljjUQJLfVwAWLoBNfx1HThteqygGQ0ZEpXpQ==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "diff": "3.5.0", - "lodash.get": "4.4.2", - "lolex": "2.7.0", - "nise": "1.4.2", - "supports-color": "5.4.0", - "type-detect": "4.0.8" + "@sinonjs/formatio": "^2.0.0", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.4.2", + "nise": "^1.3.3", + "supports-color": "^5.4.0", + "type-detect": "^4.0.8" }, "dependencies": { "has-flag": { @@ -4129,7 +4129,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "type-detect": { @@ -4157,7 +4157,7 @@ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "snapdragon": { @@ -4166,14 +4166,14 @@ "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "2.0.2" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^2.0.0" }, "dependencies": { "define-property": { @@ -4182,7 +4182,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -4191,7 +4191,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -4200,7 +4200,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4209,7 +4209,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4220,7 +4220,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4229,7 +4229,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4240,9 +4240,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -4265,9 +4265,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -4276,7 +4276,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } } } @@ -4287,7 +4287,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sntp": { @@ -4296,7 +4296,7 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "source-map": { @@ -4304,7 +4304,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "source-map-resolve": { @@ -4313,11 +4313,11 @@ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -4332,8 +4332,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.1" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -4348,8 +4348,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.1" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -4363,7 +4363,7 @@ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -4372,7 +4372,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" }, "dependencies": { "extend-shallow": { @@ -4381,8 +4381,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -4391,7 +4391,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4411,9 +4411,9 @@ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.2.tgz", "integrity": "sha512-51ferIRwYOhzUEtogqOa/y9supADlAht98bF/gbIi6WkzRJX6Yioldxbzj1MV4yV+LgdKD/kkHwFTeFXOG4htA==", "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.3", - "request": "2.87.0" + "nan": "~2.10.0", + "node-pre-gyp": "^0.10.3", + "request": "^2.87.0" }, "dependencies": { "form-data": { @@ -4421,9 +4421,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.17" + "mime-types": "^2.1.12" }, "dependencies": { "combined-stream": { @@ -4431,7 +4431,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } } } @@ -4441,26 +4441,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } } } @@ -4475,14 +4475,14 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "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", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "staged-git-files": { @@ -4497,8 +4497,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -4507,7 +4507,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -4516,7 +4516,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4525,7 +4525,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4536,7 +4536,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4545,7 +4545,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4556,9 +4556,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -4580,8 +4580,8 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -4589,7 +4589,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringify-object": { @@ -4598,9 +4598,9 @@ "integrity": "sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg==", "dev": true, "requires": { - "get-own-enumerable-property-symbols": "2.0.1", - "is-obj": "1.0.1", - "is-regexp": "1.0.0" + "get-own-enumerable-property-symbols": "^2.0.1", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" } }, "stringstream": { @@ -4614,7 +4614,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-eof": { @@ -4632,7 +4632,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } }, "swap-case": { @@ -4640,8 +4640,8 @@ "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", "requires": { - "lower-case": "1.1.4", - "upper-case": "1.1.3" + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" } }, "symbol-observable": { @@ -4655,13 +4655,13 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz", "integrity": "sha512-mq9ixIYfNF9SK0IS/h2HKMu8Q2iaCuhDDsZhdEag/FHv8fOaYld4vN7ouMgcSSt5WKZzPs8atclTcJm36OTh4w==", "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.3", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.3", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" }, "dependencies": { "safe-buffer": { @@ -4681,11 +4681,11 @@ "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.1.5.tgz", "integrity": "sha1-hVdNIs3hdp3+TMSg1pcXWxPl0xg=", "requires": { - "babel-runtime": "6.26.0", + "babel-runtime": "^6.26.0", "big-number": "0.3.1", - "bl": "1.2.1", - "iconv-lite": "0.4.19", - "readable-stream": "2.3.3", + "bl": "^1.2.0", + "iconv-lite": "^0.4.11", + "readable-stream": "^2.2.6", "sprintf": "0.1.5" } }, @@ -4700,7 +4700,7 @@ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", "requires": { - "any-promise": "1.3.0" + "any-promise": "^1.0.0" } }, "thenify-all": { @@ -4708,7 +4708,7 @@ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", "requires": { - "thenify": "3.3.0" + "thenify": ">= 3.1.0 < 4" } }, "through": { @@ -4722,8 +4722,8 @@ "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", "dev": true, "requires": { - "readable-stream": "2.0.6", - "xtend": "4.0.1" + "readable-stream": "~2.0.0", + "xtend": "~4.0.0" }, "dependencies": { "readable-stream": { @@ -4732,12 +4732,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "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" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -4753,8 +4753,8 @@ "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.0.3" } }, "to-object-path": { @@ -4763,7 +4763,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -4772,9 +4772,9 @@ "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", "dev": true, "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.2" + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "regex-not": "^1.0.0" }, "dependencies": { "define-property": { @@ -4783,7 +4783,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -4792,7 +4792,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -4801,7 +4801,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4810,7 +4810,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4821,7 +4821,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4830,7 +4830,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4841,9 +4841,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -4860,8 +4860,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { @@ -4870,7 +4870,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } } } @@ -4880,7 +4880,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tslib": { @@ -4894,7 +4894,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -4909,7 +4909,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { @@ -4923,19 +4923,19 @@ "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.7.tgz", "integrity": "sha512-D7JxOBSqBiLAPu/M/4v15J++3klAWcv5WvYgrfl0iaaGObZJ/8UXm3oTpOtQUHfwJO9Cja8JMiwT9G7dyvwrxg==", "requires": { - "app-root-path": "2.0.1", - "buffer": "5.2.0", - "chalk": "2.4.1", - "cli-highlight": "1.2.3", - "debug": "3.1.0", - "dotenv": "5.0.1", - "glob": "7.1.2", - "js-yaml": "3.12.0", - "mkdirp": "0.5.1", - "reflect-metadata": "0.1.12", - "xml2js": "0.4.19", - "yargonaut": "1.1.3", - "yargs": "11.1.0" + "app-root-path": "^2.0.1", + "buffer": "^5.1.0", + "chalk": "^2.3.2", + "cli-highlight": "^1.2.3", + "debug": "^3.1.0", + "dotenv": "^5.0.1", + "glob": "^7.1.2", + "js-yaml": "^3.11.0", + "mkdirp": "^0.5.1", + "reflect-metadata": "^0.1.12", + "xml2js": "^0.4.17", + "yargonaut": "^1.1.2", + "yargs": "^11.1.0" }, "dependencies": { "ansi-styles": { @@ -4943,7 +4943,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "camelcase": { @@ -4956,9 +4956,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "cliui": { @@ -4966,9 +4966,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "debug": { @@ -4994,8 +4994,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "supports-color": { @@ -5003,7 +5003,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "yargs": { @@ -5011,18 +5011,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^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": "^9.0.2" } }, "yargs-parser": { @@ -5030,7 +5030,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -5046,9 +5046,9 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -5063,9 +5063,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -5083,10 +5083,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "arr-union": { @@ -5101,7 +5101,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -5110,10 +5110,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -5130,8 +5130,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -5140,9 +5140,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -5174,7 +5174,7 @@ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", "requires": { - "upper-case": "1.1.3" + "upper-case": "^1.1.1" } }, "urix": { @@ -5195,9 +5195,9 @@ "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", "dev": true, "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2" }, "dependencies": { "define-property": { @@ -5206,7 +5206,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -5215,7 +5215,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5224,7 +5224,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5235,7 +5235,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5244,7 +5244,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5255,9 +5255,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -5272,7 +5272,7 @@ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", "dev": true, "requires": { - "set-getter": "0.1.0" + "set-getter": "^0.1.0" } } } @@ -5293,8 +5293,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "verror": { @@ -5302,9 +5302,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "which": { @@ -5312,7 +5312,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -5325,7 +5325,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "requires": { - "string-width": "2.1.1" + "string-width": "^1.0.2 || 2" } }, "window-size": { @@ -5344,8 +5344,8 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -5358,7 +5358,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -5366,9 +5366,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -5376,7 +5376,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5391,8 +5391,8 @@ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.7" + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" } }, "xmlbuilder": { @@ -5425,9 +5425,9 @@ "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.3.tgz", "integrity": "sha512-+FKokBOLV7DYnHjJpXniUnn1Zng2XBqX2k8d4E4eha19rvEbnctu1TsH98yixJmge7pDSQGS2Av/R30ya+ukrw==", "requires": { - "chalk": "1.1.3", - "figlet": "1.2.0", - "parent-require": "1.0.0" + "chalk": "^1.1.1", + "figlet": "^1.1.1", + "parent-require": "^1.0.0" }, "dependencies": { "ansi-regex": { @@ -5445,11 +5445,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -5457,7 +5457,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -5472,18 +5472,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "10.1.0" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^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 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "cliui": { @@ -5491,9 +5491,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "decamelize": { @@ -5509,7 +5509,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -5517,8 +5517,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -5526,7 +5526,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -5534,7 +5534,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -5549,7 +5549,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { diff --git a/package.json b/package.json index d9462e8..6ebc14d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.3.0", + "version": "0.2.22", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { @@ -12,8 +12,7 @@ "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage-remapped.json && codecov --file=./coverage/coverage-remapped.json ", "clean": "rimraf dist coverage output", "prettier": "prettier --write ./src/*.ts ./src/**/*.ts", - "prepack": "npm run compile", - "postpack": "npm run clean" + "prepack": "npm run compile" }, "repository": { "type": "git", @@ -68,4 +67,4 @@ "sinon": "^6.0.0", "sinon-chai": "^3.0.0" } -} \ No newline at end of file +} diff --git a/src/Engine.ts b/src/Engine.ts index 28aa47f..fd80fda 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -155,7 +155,7 @@ export class Engine { "printPropertyVisibility", () => this.Options.propertyVisibility !== "none" - ? this.Options.propertyVisibility + ? this.Options.propertyVisibility + " " : "" ); Handlebars.registerHelper("toPropertyName", str => { diff --git a/src/entity.mst b/src/entity.mst index 78c5221..52dd2b9 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -23,7 +23,7 @@ import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, O array:{{is_array}},{{/is_array}} name:"{{sqlName}}" }) - {{printPropertyVisibility}} {{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; + {{printPropertyVisibility}}{{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; {{/relations}}{{#relations}} @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} From f1e61e8bf7b9ad07a355fd38f4e26d1b9c864e00 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 1 Nov 2018 20:59:32 +0100 Subject: [PATCH 059/130] fixing printPropertyVisibility spaces --- src/entity.mst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/entity.mst b/src/entity.mst index 52dd2b9..6834464 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -27,8 +27,8 @@ import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, O {{/relations}}{{#relations}} @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} - {{#if (or isOneToMany isManyToMany)}}{{printPropertyVisibility}} {{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; - {{else}}{{printPropertyVisibility}} {{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; + {{#if (or isOneToMany isManyToMany)}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; + {{else}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; {{/if}} {{#if relationIdField }} From 17110d669c5f2b27f800d8d4edc9e7289f6b8499 Mon Sep 17 00:00:00 2001 From: Kevin Guanche Darias Date: Tue, 6 Nov 2018 18:52:10 +0000 Subject: [PATCH 060/130] Fix problem reported in issue #123 with MySQL driver, in servers running MySQL server 5.7 and having complex schemas --- src/drivers/MysqlDriver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index b4ffe98..6777c78 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -267,7 +267,7 @@ export class MysqlDriver extends AbstractDriver { onDelete: "RESTRICT" | "CASCADE" | "SET NULL" | "NO_ACTION"; onUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | "NO_ACTION"; object_id: string; - }>(`SELECT + }>(`SELECT DISTINCT CU.TABLE_NAME TableWithForeignKey, CU.ORDINAL_POSITION FK_PartNo, CU.COLUMN_NAME ForeignKeyColumn, From 4d39b6c68c568e631b196f24be19adbeb5c7532c Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 24 Nov 2018 17:52:47 +0100 Subject: [PATCH 061/130] changing test coverage to remap also lcov report --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6ebc14d..9737908 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "compile": "npm run clean && tsc", "precommit": "npm run prettier && git update-index --again", "test": "istanbul cover ./node_modules/mocha/bin/_mocha dist/test/**/*.test.js -- -R spec", - "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage-remapped.json && codecov --file=./coverage/coverage-remapped.json ", + "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/lcov.info -t lcovonly && remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage.json && codecov --file=./coverage/coverage.json ", "clean": "rimraf dist coverage output", "prettier": "prettier --write ./src/*.ts ./src/**/*.ts", "prepack": "npm run compile" From b9f0ad54597bf04775df4372b9d625e7722d5633 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 24 Nov 2018 18:21:34 +0100 Subject: [PATCH 062/130] adding npm cache to CI --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 732b4bd..55a040f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ node_js: - 10 - 8 - 6 +cache: npm sudo: required services: - docker From a9adc18b88ac460baf823ce9cc6dcc97b12c7d51 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 24 Nov 2018 20:00:14 +0100 Subject: [PATCH 063/130] optimizing travis docker image download time --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 55a040f..a1bd34b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,6 +33,7 @@ before_install: - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - if [ -z "$DOCKER_USERNAME" ]; then mv docker-compose-without-login.yml docker-compose.yml; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; fi +- docker-compose pull --parallel - docker-compose up -d - npm install -g npm@5 - npm install -g greenkeeper-lockfile@1 @@ -46,7 +47,6 @@ before_script: - npm link typescript - tsc - sleep 180 -- docker logs typeorm-mg-postgres after_script: - greenkeeper-lockfile-upload From 9b3be6a7a9c16644fb789f75e92a765818fe0915 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 24 Nov 2018 20:36:10 +0100 Subject: [PATCH 064/130] fixing some errors while downloading docker images(retry) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a1bd34b..367ae48 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,7 @@ before_install: - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - if [ -z "$DOCKER_USERNAME" ]; then mv docker-compose-without-login.yml docker-compose.yml; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; fi -- docker-compose pull --parallel +- docker-compose pull --parallel --ignore-pull-failures - docker-compose up -d - npm install -g npm@5 - npm install -g greenkeeper-lockfile@1 From 69a2362890084b25d3679976dada32cef8720c33 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 6 Dec 2018 22:23:30 +0100 Subject: [PATCH 065/130] code cleanup --- src/Engine.ts | 40 ++---- src/NamingStrategy.ts | 9 +- src/Utils.ts | 1 - src/drivers/AbstractDriver.ts | 169 ++++++++++++-------------- src/drivers/MssqlDriver.ts | 12 +- src/drivers/MysqlDriver.ts | 26 ++-- src/drivers/OracleDriver.ts | 26 ++-- src/drivers/PostgresDriver.ts | 26 ++-- src/drivers/SqliteDriver.ts | 6 +- src/models/EntityInfo.ts | 8 +- test/integration/entityTypes.test.ts | 8 +- test/integration/githubIssues.test.ts | 8 +- test/integration/integration.test.ts | 8 +- test/utils/EntityFileToJson.ts | 26 ++-- 14 files changed, 150 insertions(+), 223 deletions(-) diff --git a/src/Engine.ts b/src/Engine.ts index fd80fda..cbd2727 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -112,9 +112,7 @@ export class Engine { }); } private createHandlebarsHelpers() { - Handlebars.registerHelper("curly", open => { - return open ? "{" : "}"; - }); + Handlebars.registerHelper("curly", open => (open ? "{" : "}")); Handlebars.registerHelper("toEntityName", str => { let retStr = ""; switch (this.Options.convertCaseEntity) { @@ -173,38 +171,20 @@ export class Engine { } return retStr; }); - Handlebars.registerHelper("toLowerCase", str => { - return str.toLowerCase(); - }); + Handlebars.registerHelper("toLowerCase", str => str.toLowerCase()); Handlebars.registerHelper("toLazy", str => { if (this.Options.lazy) return `Promise<${str}>`; else return str; }); Handlebars.registerHelper({ - eq: function(v1, v2) { - return v1 === v2; - }, - ne: function(v1, v2) { - return v1 !== v2; - }, - lt: function(v1, v2) { - return v1 < v2; - }, - gt: function(v1, v2) { - return v1 > v2; - }, - lte: function(v1, v2) { - return v1 <= v2; - }, - gte: function(v1, v2) { - return v1 >= v2; - }, - and: function(v1, v2) { - return v1 && v2; - }, - or: function(v1, v2) { - return v1 || v2; - } + eq: (v1, v2) => v1 === v2, + ne: (v1, v2) => v1 !== v2, + lt: (v1, v2) => v1 < v2, + gt: (v1, v2) => v1 > v2, + lte: (v1, v2) => v1 <= v2, + gte: (v1, v2) => v1 >= v2, + and: (v1, v2) => v1 && v2, + or: (v1, v2) => v1 || v2 }); } diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index 1cad9cb..33882ec 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -9,12 +9,9 @@ export class NamingStrategy extends AbstractNamingStrategy { dbModel: DatabaseModel ): string { let isRelationToMany = relation.isOneToMany || relation.isManyToMany; - let ownerEntity = dbModel.entities.filter(v => { - return v.EntityName == relation.ownerTable; - })[0]; - let referencedEntity = dbModel.entities.filter(v => { - return v.EntityName == relation.relatedTable; - })[0]; + let ownerEntity = dbModel.entities.find( + v => v.EntityName == relation.ownerTable + )!; let columnName = columnOldName[0].toLowerCase() + diff --git a/src/Utils.ts b/src/Utils.ts index d6ba713..8e34d49 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -14,7 +14,6 @@ export function LogError( ); if (isABug && !errObject) errObject = new Error().stack; if (!!errObject) console.error(errObject); - // process.abort(); } export function packageVersion() { return `${(packagejson).name}@${(packagejson).version}`; diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index c72895e..f84fb99 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -17,37 +17,27 @@ export abstract class AbstractDriver { let newName = this.namingStrategy.columnName(column.tsName); entity.Indexes.forEach(index => { index.columns - .filter(column2 => { - return column2.name == column.tsName; - }) - .forEach(column2 => { - column2.name = newName; - }); + .filter(column2 => column2.name == column.tsName) + .forEach(column2 => (column2.name = newName)); }); dbModel.entities.forEach(entity2 => { entity2.Columns.forEach(column2 => { column2.relations - .filter(relation => { - return ( + .filter( + relation => relation.relatedTable == entity.EntityName && relation.relatedColumn == column.tsName - ); - }) - .map(v => { - v.relatedColumn = newName; - }); + ) + .map(v => (v.relatedColumn = newName)); column2.relations - .filter(relation => { - return ( + .filter( + relation => relation.relatedTable == entity.EntityName && relation.ownerColumn == column.tsName - ); - }) - .map(v => { - v.ownerColumn = newName; - }); + ) + .map(v => (v.ownerColumn = newName)); }); }); @@ -75,43 +65,43 @@ export abstract class AbstractDriver { dbModel.entities.forEach(entity => { entity.Columns.forEach(column => { column.relations.forEach(relation => { - if (true || !relation.isOwner) { - let newName = this.namingStrategy.relationName( - column.tsName, - relation, - dbModel - ); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column2 => { - column2.relations.forEach(relation2 => { - if ( - relation2.relatedTable == - entity.EntityName && - relation2.ownerColumn == column.tsName - ) { - relation2.ownerColumn = newName; - } - if ( - relation2.relatedTable == - entity.EntityName && - relation2.relatedColumn == column.tsName - ) { - relation2.relatedColumn = newName; - } - if (relation.isOwner) { - entity.Indexes.forEach(ind => { - ind.columns.forEach(col => { - if (col.name == column.tsName) { - col.name = newName; - } - }); - }); - } - }); + let newName = this.namingStrategy.relationName( + column.tsName, + relation, + dbModel + ); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column2 => { + column2.relations.forEach(relation2 => { + if ( + relation2.relatedTable == + entity.EntityName && + relation2.ownerColumn == column.tsName + ) { + relation2.ownerColumn = newName; + } + if ( + relation2.relatedTable == + entity.EntityName && + relation2.relatedColumn == column.tsName + ) { + relation2.relatedColumn = newName; + } + if (relation.isOwner) { + entity.Indexes.forEach(ind => { + ind.columns + .filter( + col => col.name == column.tsName + ) + .forEach( + col => (col.name = newName) + ); + }); + } }); }); - column.tsName = newName; - } + }); + column.tsName = newName; }); }); }); @@ -162,8 +152,8 @@ export abstract class AbstractDriver { generateRelationsIds: boolean; FindManyToManyRelations(dbModel: DatabaseModel) { - let manyToManyEntities = dbModel.entities.filter(entity => { - return ( + let manyToManyEntities = dbModel.entities.filter( + entity => entity.Columns.filter(column => { return ( column.relations.length == 1 && @@ -171,29 +161,29 @@ export abstract class AbstractDriver { column.relations[0].isOwner ); }).length == entity.Columns.length - ); - }); + ); manyToManyEntities.map(entity => { let relations: RelationInfo[] = []; - relations = entity.Columns.reduce((prev: RelationInfo[], curr) => { - return prev.concat(curr.relations); - }, relations); + relations = entity.Columns.reduce( + (prev: RelationInfo[], curr) => prev.concat(curr.relations), + relations + ); let namesOfRelatedTables = relations .map(v => v.relatedTable) .filter((v, i, s) => s.indexOf(v) == i); if (namesOfRelatedTables.length == 2) { - let relatedTable1 = dbModel.entities.filter( + let relatedTable1 = dbModel.entities.find( v => v.EntityName == namesOfRelatedTables[0] - )[0]; + )!; relatedTable1.Columns = relatedTable1.Columns.filter( v => !v.tsName .toLowerCase() .startsWith(entity.EntityName.toLowerCase()) ); - let relatedTable2 = dbModel.entities.filter( + let relatedTable2 = dbModel.entities.find( v => v.EntityName == namesOfRelatedTables[1] - )[0]; + )!; relatedTable2.Columns = relatedTable2.Columns.filter( v => !v.tsName @@ -305,9 +295,9 @@ export abstract class AbstractDriver { entities: EntityInfo[] ) { relationsTemp.forEach(relationTmp => { - let ownerEntity = entities.find(entitity => { - return entitity.EntityName == relationTmp.ownerTable; - }); + let ownerEntity = entities.find( + entitity => entitity.EntityName == relationTmp.ownerTable + ); if (!ownerEntity) { TomgUtils.LogError( `Relation between tables ${relationTmp.ownerTable} and ${ @@ -316,9 +306,9 @@ export abstract class AbstractDriver { ); return; } - let referencedEntity = entities.find(entitity => { - return entitity.EntityName == relationTmp.referencedTable; - }); + let referencedEntity = entities.find( + entitity => entitity.EntityName == relationTmp.referencedTable + ); if (!referencedEntity) { TomgUtils.LogError( `Relation between tables ${relationTmp.ownerTable} and ${ @@ -332,12 +322,11 @@ export abstract class AbstractDriver { relationColumnIndex < relationTmp.ownerColumnsNames.length; relationColumnIndex++ ) { - let ownerColumn = ownerEntity.Columns.find(column => { - return ( + let ownerColumn = ownerEntity.Columns.find( + column => column.tsName == relationTmp.ownerColumnsNames[relationColumnIndex] - ); - }); + ); if (!ownerColumn) { TomgUtils.LogError( `Relation between tables ${ @@ -350,12 +339,11 @@ export abstract class AbstractDriver { ); return; } - let relatedColumn = referencedEntity.Columns.find(column => { - return ( + let relatedColumn = referencedEntity.Columns.find( + column => column.tsName == relationTmp.referencedColumnsNames[relationColumnIndex] - ); - }); + ); if (!relatedColumn) { TomgUtils.LogError( `Relation between tables ${ @@ -370,14 +358,13 @@ export abstract class AbstractDriver { } let isOneToMany: boolean; isOneToMany = false; - let index = ownerEntity.Indexes.find(index => { - return ( + let index = ownerEntity.Indexes.find( + index => index.isUnique && - index.columns.some(col => { - return col.name == ownerColumn!.tsName; - }) - ); - }); + index.columns.some( + col => col.name == ownerColumn!.tsName + ) + ); isOneToMany = !index; let ownerRelation = new RelationInfo(); @@ -467,15 +454,13 @@ export abstract class AbstractDriver { FindPrimaryColumnsFromIndexes(dbModel: DatabaseModel) { dbModel.entities.forEach(entity => { let primaryIndex = entity.Indexes.find(v => v.isPrimaryKey); - entity.Columns.forEach(col => { - if ( + entity.Columns.filter( + col => primaryIndex && primaryIndex.columns.some( cIndex => cIndex.name == col.tsName ) - ) - col.isPrimary = true; - }); + ).forEach(col => (col.isPrimary = true)); if ( !entity.Columns.some(v => { return v.isPrimary; diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index ac64a13..7d3fe8c 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -228,9 +228,7 @@ ORDER BY t.name, ind.name, ind.index_id, ic.key_ordinal;`)).recordset; entities.forEach(ent => { response - .filter(filterVal => { - return filterVal.TableName == ent.EntityName; - }) + .filter(filterVal => filterVal.TableName == ent.EntityName) .forEach(resp => { let indexInfo: IndexInfo = {}; let indexColumnInfo: IndexColumnInfo = {}; @@ -299,9 +297,9 @@ order by TableWithForeignKey, FK_PartNo`)).recordset; let relationsTemp: RelationTempInfo[] = []; response.forEach(resp => { - let rels = relationsTemp.find(val => { - return val.object_id == resp.object_id; - }); + let rels = relationsTemp.find( + val => val.object_id == resp.object_id + ); if (rels == undefined) { rels = {}; rels.ownerColumnsNames = []; @@ -315,7 +313,6 @@ order by break; default: rels.actionOnDelete = resp.onDelete; - break; } switch (resp.onUpdate) { @@ -327,7 +324,6 @@ order by break; default: rels.actionOnUpdate = resp.onUpdate; - break; } rels.object_id = resp.object_id; diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index b4ffe98..2fa3bf3 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -40,9 +40,7 @@ export class MysqlDriver extends AbstractDriver { FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA like DATABASE()`); entities.forEach(ent => { response - .filter(filterVal => { - return filterVal.TABLE_NAME == ent.EntityName; - }) + .filter(filterVal => filterVal.TABLE_NAME == ent.EntityName) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; @@ -226,20 +224,18 @@ export class MysqlDriver extends AbstractDriver { `); entities.forEach(ent => { response - .filter(filterVal => { - return filterVal.TableName == ent.EntityName; - }) + .filter(filterVal => filterVal.TableName == ent.EntityName) .forEach(resp => { let indexInfo: IndexInfo = {}; let indexColumnInfo: IndexColumnInfo = {}; if ( - ent.Indexes.filter(filterVal => { - return filterVal.name == resp.IndexName; - }).length > 0 + ent.Indexes.filter( + filterVal => filterVal.name == resp.IndexName + ).length > 0 ) { - indexInfo = ent.Indexes.filter(filterVal => { - return filterVal.name == resp.IndexName; - })[0]; + indexInfo = ent.Indexes.find( + filterVal => filterVal.name == resp.IndexName + )!; } else { indexInfo.columns = []; indexInfo.name = resp.IndexName; @@ -286,9 +282,9 @@ export class MysqlDriver extends AbstractDriver { `); let relationsTemp: RelationTempInfo[] = []; response.forEach(resp => { - let rels = relationsTemp.find(val => { - return val.object_id == resp.object_id; - }); + let rels = relationsTemp.find( + val => val.object_id == resp.object_id + ); if (rels == undefined) { rels = {}; rels.ownerColumnsNames = []; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 751967c..4ac6580 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -51,9 +51,7 @@ export class OracleDriver extends AbstractDriver { entities.forEach(ent => { response - .filter(filterVal => { - return filterVal.TABLE_NAME == ent.EntityName; - }) + .filter(filterVal => filterVal.TABLE_NAME == ent.EntityName) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; @@ -202,20 +200,18 @@ export class OracleDriver extends AbstractDriver { entities.forEach(ent => { response - .filter(filterVal => { - return filterVal.TABLE_NAME == ent.EntityName; - }) + .filter(filterVal => filterVal.TABLE_NAME == ent.EntityName) .forEach(resp => { let indexInfo: IndexInfo = {}; let indexColumnInfo: IndexColumnInfo = {}; if ( - ent.Indexes.filter(filterVal => { - return filterVal.name == resp.INDEX_NAME; - }).length > 0 + ent.Indexes.filter( + filterVal => filterVal.name == resp.INDEX_NAME + ).length > 0 ) { - indexInfo = ent.Indexes.filter(filterVal => { - return filterVal.name == resp.INDEX_NAME; - })[0]; + indexInfo = ent.Indexes.find( + filterVal => filterVal.name == resp.INDEX_NAME + )!; } else { indexInfo.columns = []; indexInfo.name = resp.INDEX_NAME; @@ -256,9 +252,9 @@ export class OracleDriver extends AbstractDriver { let relationsTemp: RelationTempInfo[] = []; response.forEach(resp => { - let rels = relationsTemp.find(val => { - return val.object_id == resp.CONSTRAINT_NAME; - }); + let rels = relationsTemp.find( + val => val.object_id == resp.CONSTRAINT_NAME + ); if (rels == undefined) { rels = {}; rels.ownerColumnsNames = []; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index b117522..d91411d 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -50,9 +50,7 @@ export class PostgresDriver extends AbstractDriver { .rows; entities.forEach(ent => { response - .filter(filterVal => { - return filterVal.table_name == ent.EntityName; - }) + .filter(filterVal => filterVal.table_name == ent.EntityName) .forEach(resp => { let colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.column_name; @@ -402,20 +400,18 @@ export class PostgresDriver extends AbstractDriver { ORDER BY c.relname,f.attname;`)).rows; entities.forEach(ent => { response - .filter(filterVal => { - return filterVal.tablename == ent.EntityName; - }) + .filter(filterVal => filterVal.tablename == ent.EntityName) .forEach(resp => { let indexInfo: IndexInfo = {}; let indexColumnInfo: IndexColumnInfo = {}; if ( - ent.Indexes.filter(filterVal => { - return filterVal.name == resp.indexname; - }).length > 0 + ent.Indexes.filter( + filterVal => filterVal.name == resp.indexname + ).length > 0 ) { - indexInfo = ent.Indexes.filter(filterVal => { - return filterVal.name == resp.indexname; - })[0]; + indexInfo = ent.Indexes.find( + filterVal => filterVal.name == resp.indexname + )!; } else { indexInfo.columns = []; indexInfo.name = resp.indexname; @@ -486,9 +482,9 @@ export class PostgresDriver extends AbstractDriver { and rc.constraint_name= con.conname`)).rows; let relationsTemp: RelationTempInfo[] = []; response.forEach(resp => { - let rels = relationsTemp.find(val => { - return val.object_id == resp.object_id; - }); + let rels = relationsTemp.find( + val => val.object_id == resp.object_id + ); if (rels == undefined) { rels = {}; rels.ownerColumnsNames = []; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 9768316..f9ac79d 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -217,9 +217,9 @@ export class SqliteDriver extends AbstractDriver { return filterVal.name == resp.name; }).length > 0 ) { - indexInfo = ent.Indexes.filter(filterVal => { - return filterVal.name == resp.name; - })[0]; + indexInfo = ent.Indexes.find( + filterVal => filterVal.name == resp.name + )!; } else { indexInfo.columns = []; indexInfo.name = resp.name; diff --git a/src/models/EntityInfo.ts b/src/models/EntityInfo.ts index 024a0e0..ecae01c 100644 --- a/src/models/EntityInfo.ts +++ b/src/models/EntityInfo.ts @@ -9,7 +9,7 @@ export class EntityInfo { Schema: string; GenerateConstructor: boolean; - relationImports(): any { + relationImports() { var imports: string[] = []; this.Columns.forEach(column => { column.relations.forEach(relation => { @@ -17,8 +17,8 @@ export class EntityInfo { imports.push(relation.relatedTable); }); }); - this.UniqueImports = imports.filter(function(elem, index, self) { - return index == self.indexOf(elem); - }); + this.UniqueImports = imports.filter( + (elem, index, self) => index == self.indexOf(elem) + ); } } diff --git a/test/integration/entityTypes.test.ts b/test/integration/entityTypes.test.ts index 10e570f..e95fabc 100644 --- a/test/integration/entityTypes.test.ts +++ b/test/integration/entityTypes.test.ts @@ -67,8 +67,8 @@ describe("Platform specyfic types", async function () { await engine.createModelFromDatabase() let filesGenPath = path.resolve(resultsPath, 'entities') - let filesOrg = fs.readdirSync(filesOrgPathTS).filter(function (this, val, ind, arr) { return val.toString().endsWith('.ts') }) - let filesGen = fs.readdirSync(filesGenPath).filter(function (this, val, ind, arr) { return val.toString().endsWith('.ts') }) + let filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) + let filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) @@ -79,9 +79,7 @@ describe("Platform specyfic types", async function () { expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) } const currentDirectoryFiles = fs.readdirSync(filesGenPath). - filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => { - return path.resolve(filesGenPath, v) - }) + filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) let compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { experimentalDecorators: true, sourceMap: false, diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index 1c348ed..03099e5 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -89,8 +89,8 @@ describe("GitHub issues", async function () { await engine.createModelFromDatabase() let filesGenPath = path.resolve(resultsPath, 'entities') - let filesOrg = fs.readdirSync(filesOrgPathTS).filter(function (this, val) { return val.toString().endsWith('.ts') }) - let filesGen = fs.readdirSync(filesGenPath).filter(function (this, val) { return val.toString().endsWith('.ts') }) + let filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) + let filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) @@ -101,9 +101,7 @@ describe("GitHub issues", async function () { expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) } const currentDirectoryFiles = fs.readdirSync(filesGenPath). - filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => { - return path.resolve(filesGenPath, v) - }) + filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) let compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { experimentalDecorators: true, sourceMap: false, diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index d75bb1a..5c11403 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -69,8 +69,8 @@ describe("TypeOrm examples", async function () { await engine.createModelFromDatabase() let filesGenPath = path.resolve(resultsPath, 'entities') - let filesOrg = fs.readdirSync(filesOrgPathTS).filter(function (this, val) { return val.toString().endsWith('.ts') }) - let filesGen = fs.readdirSync(filesGenPath).filter(function (this, val) { return val.toString().endsWith('.ts') }) + let filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) + let filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) @@ -81,9 +81,7 @@ describe("TypeOrm examples", async function () { expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) } const currentDirectoryFiles = fs.readdirSync(filesGenPath). - filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => { - return path.resolve(filesGenPath, v) - }) + filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) let compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { experimentalDecorators: true, sourceMap: false, diff --git a/test/utils/EntityFileToJson.ts b/test/utils/EntityFileToJson.ts index 89c6d84..0a1ac1f 100644 --- a/test/utils/EntityFileToJson.ts +++ b/test/utils/EntityFileToJson.ts @@ -3,9 +3,7 @@ export class EntityFileToJson { getEntityOptions(trimmedLine: string, ent: EntityJson) { let decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) if (decoratorParameters.length > 0) { - if (decoratorParameters[0] == '"' && decoratorParameters.endsWith('"')) { - - } else { + if (decoratorParameters[0] != '"' || !decoratorParameters.endsWith('"')) { let badJSON = decoratorParameters.substring(decoratorParameters.indexOf(',') + 1).trim() if (badJSON.lastIndexOf(',') == badJSON.length - 3) { badJSON = badJSON.slice(0, badJSON.length - 3) + badJSON[badJSON.length - 2] + badJSON[badJSON.length - 1] @@ -19,9 +17,7 @@ export class EntityFileToJson { let primaryGeneratedColumn = trimmedLine.substring(0, trimmedLine.indexOf('('))=='@PrimaryGeneratedColumn' if (decoratorParameters.length > 0) { if (decoratorParameters.search(',') > 0 && !primaryGeneratedColumn) { - col.columnTypes = decoratorParameters.substring(0, decoratorParameters.indexOf(',')).trim().split('|').map(function (x) { - return x; - }); + col.columnTypes = decoratorParameters.substring(0, decoratorParameters.indexOf(',')).trim().split('|'); let badJSON = decoratorParameters.substring(decoratorParameters.indexOf(',') + 1).trim() if (badJSON.lastIndexOf(',') == badJSON.length - 3) { badJSON = badJSON.slice(0, badJSON.length - 3) + badJSON[badJSON.length - 2] + badJSON[badJSON.length - 1] @@ -29,10 +25,7 @@ export class EntityFileToJson { col.columnOptions = JSON.parse(badJSON.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')) } else { if (decoratorParameters[0] == '"' && decoratorParameters.endsWith('"')) { - col.columnTypes = decoratorParameters.split('|').map(function (x) { - x = x.trim(); - return x; - }); + col.columnTypes = decoratorParameters.split('|').map( x=>x.trim()) } else { let badJSON = !primaryGeneratedColumn ? decoratorParameters.substring(decoratorParameters.indexOf(',') + 1) : decoratorParameters badJSON = badJSON.trim() @@ -54,8 +47,6 @@ export class EntityFileToJson { badJSON = badJSON.slice(0, badJSON.length - 3) + badJSON[badJSON.length - 2] + badJSON[badJSON.length - 1] } col.columnOptions = JSON.parse(badJSON.replace(/(')/g,`"`).replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')) - } else { - } } } @@ -65,7 +56,7 @@ export class EntityFileToJson { if (decoratorParameters.length > 0) { let containsTables = decoratorParameters.search('\\[') > -1 let containsOptions = decoratorParameters.search('{') > -1 - let containsName = decoratorParameters.search('"') > -1//TODO:no name, but fields as string[] + let containsName = decoratorParameters.search('"') > -1 if (containsName) { ind.indexName = decoratorParameters.slice(decoratorParameters.indexOf('"') + 1, decoratorParameters.substr(decoratorParameters.indexOf('"') + 1).indexOf('"')) } @@ -79,9 +70,7 @@ export class EntityFileToJson { colName = val.slice(val.indexOf('"') + 1, val.lastIndexOf('"')) } return colName - }).filter(v => { - return v.length > 0 - })) + }).filter(v => v.length > 0)) } if (containsOptions) { let optionsStr = decoratorParameters.slice(decoratorParameters.indexOf('{') + 1, decoratorParameters.indexOf('}')) @@ -307,9 +296,8 @@ export class EntityFileToJson { return x; }); - if (!retVal.columns[retVal.columns.length - 1].columnTypes.some(function (this, val, ind, arr) { - return val == "null" ? true : false; - })) retVal.columns[retVal.columns.length - 1].columnTypes.push('null') + if (!retVal.columns[retVal.columns.length - 1].columnTypes.some( (val) => val == "null" ? true : false)) + retVal.columns[retVal.columns.length - 1].columnTypes.push('null') if (retVal.indicies.length > 0 && retVal.indicies[retVal.indicies.length - 1].columnNames.length == 0) { retVal.indicies[retVal.indicies.length - 1].columnNames.push(retVal.columns[retVal.columns.length - 1].columnName) } From a4592ffb4df6687e916d8e9233f7cb4875c009aa Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 8 Dec 2018 10:46:18 +0100 Subject: [PATCH 066/130] code cleanup, introducing tslint --- .npmignore | 1 + package-lock.json | 117 +++++++++ package.json | 4 +- src/AbstractNamingStrategy.ts | 8 +- src/Engine.ts | 43 +-- src/NamingStrategy.ts | 15 +- src/Utils.ts | 12 +- src/drivers/AbstractDriver.ts | 360 +++++++++++++------------- src/drivers/MariaDbDriver.ts | 2 +- src/drivers/MssqlDriver.ts | 28 +- src/drivers/MysqlDriver.ts | 126 ++++----- src/drivers/OracleDriver.ts | 106 ++++---- src/drivers/PostgresDriver.ts | 21 +- src/drivers/SqliteDriver.ts | 88 ++++--- src/index.ts | 22 +- src/models/ColumnInfo.ts | 32 +-- src/models/DatabaseModel.ts | 2 +- src/models/EntityInfo.ts | 21 +- src/models/RelationInfo.ts | 23 +- src/tslint.json | 9 + test/drivers/MssqlDriver.test.ts | 50 ++-- test/integration/entityTypes.test.ts | 60 ++--- test/integration/githubIssues.test.ts | 65 ++--- test/integration/integration.test.ts | 58 ++--- test/utils/EntityFileToJson.ts | 113 ++++---- test/utils/GeneralTestUtils.ts | 141 +++++----- 26 files changed, 857 insertions(+), 670 deletions(-) create mode 100644 src/tslint.json diff --git a/.npmignore b/.npmignore index 26bb543..01817ea 100644 --- a/.npmignore +++ b/.npmignore @@ -23,3 +23,4 @@ codecov.yml tsconfig.json typings.json dist/test/ +src/tslint.json diff --git a/package-lock.json b/package-lock.json index b03a94e..c293e85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -338,6 +338,59 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -2147,6 +2200,12 @@ "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", @@ -3510,6 +3569,12 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -4889,6 +4954,58 @@ "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==", "dev": true }, + "tslint": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.27.2" + }, + "dependencies": { + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } + } + }, + "tslint-config-prettier": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.17.0.tgz", + "integrity": "sha512-NKWNkThwqE4Snn4Cm6SZB7lV5RMDDFsBwz6fWUkTxOKGjMx8ycOHnjIbhn7dZd5XmssW3CwqUjlANR6EhP9YQw==", + "dev": true + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", diff --git a/package.json b/package.json index 9737908..aef97b4 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,8 @@ "remap-istanbul": "^0.12.0", "rimraf": "^2.6.2", "sinon": "^6.0.0", - "sinon-chai": "^3.0.0" + "sinon-chai": "^3.0.0", + "tslint": "^5.11.0", + "tslint-config-prettier": "^1.17.0" } } diff --git a/src/AbstractNamingStrategy.ts b/src/AbstractNamingStrategy.ts index c0ea4bf..b739cd2 100644 --- a/src/AbstractNamingStrategy.ts +++ b/src/AbstractNamingStrategy.ts @@ -1,14 +1,14 @@ -import { RelationInfo } from "./models/RelationInfo"; import { DatabaseModel } from "./models/DatabaseModel"; +import { RelationInfo } from "./models/RelationInfo"; export abstract class AbstractNamingStrategy { - abstract relationName( + public abstract relationName( columnName: string, relation: RelationInfo, dbModel: DatabaseModel ): string; - abstract entityName(entityName: string): string; + public abstract entityName(entityName: string): string; - abstract columnName(columnName: string): string; + public abstract columnName(columnName: string): string; } diff --git a/src/Engine.ts b/src/Engine.ts index cbd2727..fefef16 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -1,11 +1,11 @@ +import changeCase = require("change-case"); +import fs = require("fs"); +import * as Handlebars from "handlebars"; +import path = require("path"); +import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { AbstractDriver } from "./drivers/AbstractDriver"; import { DatabaseModel } from "./models/DatabaseModel"; -import * as Handlebars from "handlebars"; -import fs = require("fs"); -import path = require("path"); import * as TomgUtils from "./Utils"; -import changeCase = require("change-case"); -import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; export class Engine { constructor( @@ -14,7 +14,7 @@ export class Engine { ) {} public async createModelFromDatabase(): Promise { - let dbModel = await this.getEntitiesInfo( + const dbModel = await this.getEntitiesInfo( this.Options.databaseName, this.Options.host, this.Options.port, @@ -60,18 +60,24 @@ export class Engine { } private createModelFromMetadata(databaseModel: DatabaseModel) { this.createHandlebarsHelpers(); - let templatePath = path.resolve(__dirname, "../../src/entity.mst"); - let template = fs.readFileSync(templatePath, "UTF-8"); - let resultPath = this.Options.resultsPath; - if (!fs.existsSync(resultPath)) fs.mkdirSync(resultPath); + const templatePath = path.resolve(__dirname, "../../src/entity.mst"); + const template = fs.readFileSync(templatePath, "UTF-8"); + const resultPath = this.Options.resultsPath; + if (!fs.existsSync(resultPath)) { + fs.mkdirSync(resultPath); + } let entitesPath = resultPath; if (!this.Options.noConfigs) { this.createTsConfigFile(resultPath); this.createTypeOrmConfig(resultPath); entitesPath = path.resolve(resultPath, "./entities"); - if (!fs.existsSync(entitesPath)) fs.mkdirSync(entitesPath); + if (!fs.existsSync(entitesPath)) { + fs.mkdirSync(entitesPath); + } } - let compliedTemplate = Handlebars.compile(template, { noEscape: true }); + const compliedTemplate = Handlebars.compile(template, { + noEscape: true + }); databaseModel.entities.forEach(element => { element.Imports = []; element.Columns.forEach(column => { @@ -100,11 +106,11 @@ export class Engine { casedFileName = element.EntityName; break; } - let resultFilePath = path.resolve( + const resultFilePath = path.resolve( entitesPath, casedFileName + ".ts" ); - let rendered = compliedTemplate(element); + const rendered = compliedTemplate(element); fs.writeFileSync(resultFilePath, rendered, { encoding: "UTF-8", flag: "w" @@ -173,8 +179,11 @@ export class Engine { }); Handlebars.registerHelper("toLowerCase", str => str.toLowerCase()); Handlebars.registerHelper("toLazy", str => { - if (this.Options.lazy) return `Promise<${str}>`; - else return str; + if (this.Options.lazy) { + return `Promise<${str}>`; + } else { + return str; + } }); Handlebars.registerHelper({ eq: (v1, v2) => v1 === v2, @@ -188,7 +197,7 @@ export class Engine { }); } - //TODO:Move to mustache template file + // TODO:Move to mustache template file private createTsConfigFile(resultPath) { fs.writeFileSync( path.resolve(resultPath, "tsconfig.json"), diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index 33882ec..f22c59a 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -1,15 +1,15 @@ import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; -import { RelationInfo } from "./models/RelationInfo"; import { DatabaseModel } from "./models/DatabaseModel"; +import { RelationInfo } from "./models/RelationInfo"; export class NamingStrategy extends AbstractNamingStrategy { - relationName( + public relationName( columnOldName: string, relation: RelationInfo, dbModel: DatabaseModel ): string { - let isRelationToMany = relation.isOneToMany || relation.isManyToMany; - let ownerEntity = dbModel.entities.find( + const isRelationToMany = relation.isOneToMany || relation.isManyToMany; + const ownerEntity = dbModel.entities.find( v => v.EntityName == relation.ownerTable )!; @@ -51,8 +51,9 @@ export class NamingStrategy extends AbstractNamingStrategy { v.tsName != columnName || columnName == columnOldName ) - ) + ) { break; + } } } } @@ -60,11 +61,11 @@ export class NamingStrategy extends AbstractNamingStrategy { return columnName; } - entityName(entityName: string): string { + public entityName(entityName: string): string { return entityName; } - columnName(columnName: string): string { + public columnName(columnName: string): string { return columnName; } } diff --git a/src/Utils.ts b/src/Utils.ts index 8e34d49..d62d204 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -9,12 +9,16 @@ export function LogError( console.error(`${packageVersion()} node@${process.version}`); console.error( `If you think this is a bug please open an issue including this log on ${ - (packagejson).bugs.url + (packagejson as any).bugs.url }` ); - if (isABug && !errObject) errObject = new Error().stack; - if (!!errObject) console.error(errObject); + if (isABug && !errObject) { + errObject = new Error().stack; + } + if (!!errObject) { + console.error(errObject); + } } export function packageVersion() { - return `${(packagejson).name}@${(packagejson).version}`; + return `${(packagejson as any).name}@${(packagejson as any).version}`; } diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index f84fb99..c47ff7d 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -1,119 +1,24 @@ -import { EntityInfo } from "../models/EntityInfo"; -import { DatabaseModel } from "../models/DatabaseModel"; -import * as TomgUtils from "../Utils"; -import { RelationInfo } from "../models/RelationInfo"; -import { ColumnInfo } from "../models/ColumnInfo"; import { - WithWidthColumnType, + WithLengthColumnType, WithPrecisionColumnType, - WithLengthColumnType + WithWidthColumnType } from "typeorm/driver/types/ColumnTypes"; import { AbstractNamingStrategy } from "../AbstractNamingStrategy"; +import { ColumnInfo } from "../models/ColumnInfo"; +import { DatabaseModel } from "../models/DatabaseModel"; +import { EntityInfo } from "../models/EntityInfo"; +import { RelationInfo } from "../models/RelationInfo"; +import * as TomgUtils from "../Utils"; export abstract class AbstractDriver { - changeColumnNames(dbModel: DatabaseModel) { - dbModel.entities.forEach(entity => { - entity.Columns.forEach(column => { - let newName = this.namingStrategy.columnName(column.tsName); - entity.Indexes.forEach(index => { - index.columns - .filter(column2 => column2.name == column.tsName) - .forEach(column2 => (column2.name = newName)); - }); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column2 => { - column2.relations - .filter( - relation => - relation.relatedTable == - entity.EntityName && - relation.relatedColumn == column.tsName - ) - .map(v => (v.relatedColumn = newName)); - column2.relations - .filter( - relation => - relation.relatedTable == - entity.EntityName && - relation.ownerColumn == column.tsName - ) - .map(v => (v.ownerColumn = newName)); - }); - }); - - column.tsName = newName; - }); - }); - } - changeEntityNames(dbModel: DatabaseModel) { - dbModel.entities.forEach(entity => { - let newName = this.namingStrategy.entityName(entity.EntityName); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column => { - column.relations.forEach(relation => { - if (relation.ownerTable == entity.EntityName) - relation.ownerTable = newName; - if (relation.relatedTable == entity.EntityName) - relation.relatedTable = newName; - }); - }); - }); - entity.EntityName = newName; - }); - } - changeRelationNames(dbModel: DatabaseModel) { - dbModel.entities.forEach(entity => { - entity.Columns.forEach(column => { - column.relations.forEach(relation => { - let newName = this.namingStrategy.relationName( - column.tsName, - relation, - dbModel - ); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column2 => { - column2.relations.forEach(relation2 => { - if ( - relation2.relatedTable == - entity.EntityName && - relation2.ownerColumn == column.tsName - ) { - relation2.ownerColumn = newName; - } - if ( - relation2.relatedTable == - entity.EntityName && - relation2.relatedColumn == column.tsName - ) { - relation2.relatedColumn = newName; - } - if (relation.isOwner) { - entity.Indexes.forEach(ind => { - ind.columns - .filter( - col => col.name == column.tsName - ) - .forEach( - col => (col.name = newName) - ); - }); - } - }); - }); - }); - column.tsName = newName; - }); - }); - }); - } - ColumnTypesWithWidth: WithWidthColumnType[] = [ + public ColumnTypesWithWidth: WithWidthColumnType[] = [ "tinyint", "smallint", "mediumint", "int", "bigint" ]; - ColumnTypesWithPrecision: WithPrecisionColumnType[] = [ + public ColumnTypesWithPrecision: WithPrecisionColumnType[] = [ "float", "double", "dec", @@ -133,7 +38,7 @@ export abstract class AbstractDriver { "timestamp with time zone", "timestamp with local time zone" ]; - ColumnTypesWithLength: WithLengthColumnType[] = [ + public ColumnTypesWithLength: WithLengthColumnType[] = [ "character varying", "varying character", "nvarchar", @@ -148,19 +53,126 @@ export abstract class AbstractDriver { "binary", "varbinary" ]; - namingStrategy: AbstractNamingStrategy; - generateRelationsIds: boolean; + public namingStrategy: AbstractNamingStrategy; + public generateRelationsIds: boolean; - FindManyToManyRelations(dbModel: DatabaseModel) { - let manyToManyEntities = dbModel.entities.filter( + public abstract GetAllTablesQuery: ( + schema: string + ) => Promise< + Array<{ + TABLE_SCHEMA: string; + TABLE_NAME: string; + }> + >; + public changeColumnNames(dbModel: DatabaseModel) { + dbModel.entities.forEach(entity => { + entity.Columns.forEach(column => { + const newName = this.namingStrategy.columnName(column.tsName); + entity.Indexes.forEach(index => { + index.columns + .filter(column2 => column2.name === column.tsName) + .forEach(column2 => (column2.name = newName)); + }); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column2 => { + column2.relations + .filter( + relation => + relation.relatedTable === + entity.EntityName && + relation.relatedColumn === column.tsName + ) + .map(v => (v.relatedColumn = newName)); + column2.relations + .filter( + relation => + relation.relatedTable === + entity.EntityName && + relation.ownerColumn === column.tsName + ) + .map(v => (v.ownerColumn = newName)); + }); + }); + + column.tsName = newName; + }); + }); + } + public changeEntityNames(dbModel: DatabaseModel) { + dbModel.entities.forEach(entity => { + const newName = this.namingStrategy.entityName(entity.EntityName); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column => { + column.relations.forEach(relation => { + if (relation.ownerTable === entity.EntityName) { + relation.ownerTable = newName; + } + if (relation.relatedTable === entity.EntityName) { + relation.relatedTable = newName; + } + }); + }); + }); + entity.EntityName = newName; + }); + } + public changeRelationNames(dbModel: DatabaseModel) { + dbModel.entities.forEach(entity => { + entity.Columns.forEach(column => { + column.relations.forEach(relation => { + const newName = this.namingStrategy.relationName( + column.tsName, + relation, + dbModel + ); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column2 => { + column2.relations.forEach(relation2 => { + if ( + relation2.relatedTable === + entity.EntityName && + relation2.ownerColumn === column.tsName + ) { + relation2.ownerColumn = newName; + } + if ( + relation2.relatedTable === + entity.EntityName && + relation2.relatedColumn === column.tsName + ) { + relation2.relatedColumn = newName; + } + if (relation.isOwner) { + entity.Indexes.forEach(ind => { + ind.columns + .filter( + col => + col.name === column.tsName + ) + .forEach( + col => (col.name = newName) + ); + }); + } + }); + }); + }); + column.tsName = newName; + }); + }); + }); + } + + public FindManyToManyRelations(dbModel: DatabaseModel) { + const manyToManyEntities = dbModel.entities.filter( entity => entity.Columns.filter(column => { return ( - column.relations.length == 1 && + column.relations.length === 1 && !column.relations[0].isOneToMany && column.relations[0].isOwner ); - }).length == entity.Columns.length + }).length === entity.Columns.length ); manyToManyEntities.map(entity => { let relations: RelationInfo[] = []; @@ -168,12 +180,12 @@ export abstract class AbstractDriver { (prev: RelationInfo[], curr) => prev.concat(curr.relations), relations ); - let namesOfRelatedTables = relations + const namesOfRelatedTables = relations .map(v => v.relatedTable) - .filter((v, i, s) => s.indexOf(v) == i); - if (namesOfRelatedTables.length == 2) { - let relatedTable1 = dbModel.entities.find( - v => v.EntityName == namesOfRelatedTables[0] + .filter((v, i, s) => s.indexOf(v) === i); + if (namesOfRelatedTables.length === 2) { + const relatedTable1 = dbModel.entities.find( + v => v.EntityName === namesOfRelatedTables[0] )!; relatedTable1.Columns = relatedTable1.Columns.filter( v => @@ -181,8 +193,8 @@ export abstract class AbstractDriver { .toLowerCase() .startsWith(entity.EntityName.toLowerCase()) ); - let relatedTable2 = dbModel.entities.find( - v => v.EntityName == namesOfRelatedTables[1] + const relatedTable2 = dbModel.entities.find( + v => v.EntityName === namesOfRelatedTables[1] )!; relatedTable2.Columns = relatedTable2.Columns.filter( v => @@ -191,13 +203,13 @@ export abstract class AbstractDriver { .startsWith(entity.EntityName.toLowerCase()) ); dbModel.entities = dbModel.entities.filter(ent => { - return ent.EntityName != entity.EntityName; + return ent.EntityName !== entity.EntityName; }); - let column1 = new ColumnInfo(); + const column1 = new ColumnInfo(); column1.tsName = namesOfRelatedTables[1]; - let col1Rel = new RelationInfo(); + const col1Rel = new RelationInfo(); col1Rel.relatedTable = namesOfRelatedTables[1]; col1Rel.relatedColumn = namesOfRelatedTables[1]; @@ -208,10 +220,10 @@ export abstract class AbstractDriver { column1.relations.push(col1Rel); relatedTable1.Columns.push(column1); - let column2 = new ColumnInfo(); + const column2 = new ColumnInfo(); column2.tsName = namesOfRelatedTables[0]; - let col2Rel = new RelationInfo(); + const col2Rel = new RelationInfo(); col2Rel.relatedTable = namesOfRelatedTables[0]; col2Rel.relatedColumn = namesOfRelatedTables[1]; @@ -222,7 +234,7 @@ export abstract class AbstractDriver { } }); } - async GetDataFromServer( + public async GetDataFromServer( database: string, server: string, port: number, @@ -234,10 +246,10 @@ export abstract class AbstractDriver { relationIds: boolean ): Promise { this.generateRelationsIds = relationIds; - let dbModel = {}; + const dbModel = {} as DatabaseModel; this.namingStrategy = namingStrategy; await this.ConnectToServer(database, server, port, user, password, ssl); - let sqlEscapedSchema = "'" + schema.split(",").join("','") + "'"; + const sqlEscapedSchema = "'" + schema.split(",").join("','") + "'"; dbModel.entities = await this.GetAllTables(sqlEscapedSchema); await this.GetCoulmnsFromEntity(dbModel.entities, sqlEscapedSchema); await this.GetIndexesFromEntity(dbModel.entities, sqlEscapedSchema); @@ -252,13 +264,7 @@ export abstract class AbstractDriver { return dbModel; } - private ApplyNamingStrategy(dbModel: DatabaseModel) { - this.changeRelationNames(dbModel); - this.changeEntityNames(dbModel); - this.changeColumnNames(dbModel); - } - - abstract async ConnectToServer( + public abstract async ConnectToServer( database: string, server: string, port: number, @@ -267,36 +273,27 @@ export abstract class AbstractDriver { ssl: boolean ); - abstract GetAllTablesQuery: ( - schema: string - ) => Promise< - { - TABLE_SCHEMA: string; - TABLE_NAME: string; - }[] - >; - - async GetAllTables(schema: string): Promise { - let response = await this.GetAllTablesQuery(schema); - let ret: EntityInfo[] = []; + public async GetAllTables(schema: string): Promise { + const response = await this.GetAllTablesQuery(schema); + const ret: EntityInfo[] = [] as EntityInfo[]; response.forEach(val => { - let ent: EntityInfo = new EntityInfo(); + const ent: EntityInfo = new EntityInfo(); ent.EntityName = val.TABLE_NAME; ent.Schema = val.TABLE_SCHEMA; - ent.Columns = []; - ent.Indexes = []; + ent.Columns = [] as ColumnInfo[]; + ent.Indexes = [] as IndexInfo[]; ret.push(ent); }); return ret; } - GetRelationsFromRelationTempInfo( + public GetRelationsFromRelationTempInfo( relationsTemp: RelationTempInfo[], entities: EntityInfo[] ) { relationsTemp.forEach(relationTmp => { - let ownerEntity = entities.find( - entitity => entitity.EntityName == relationTmp.ownerTable + const ownerEntity = entities.find( + entitity => entitity.EntityName === relationTmp.ownerTable ); if (!ownerEntity) { TomgUtils.LogError( @@ -306,8 +303,8 @@ export abstract class AbstractDriver { ); return; } - let referencedEntity = entities.find( - entitity => entitity.EntityName == relationTmp.referencedTable + const referencedEntity = entities.find( + entitity => entitity.EntityName === relationTmp.referencedTable ); if (!referencedEntity) { TomgUtils.LogError( @@ -322,9 +319,9 @@ export abstract class AbstractDriver { relationColumnIndex < relationTmp.ownerColumnsNames.length; relationColumnIndex++ ) { - let ownerColumn = ownerEntity.Columns.find( + const ownerColumn = ownerEntity.Columns.find( column => - column.tsName == + column.tsName === relationTmp.ownerColumnsNames[relationColumnIndex] ); if (!ownerColumn) { @@ -339,9 +336,9 @@ export abstract class AbstractDriver { ); return; } - let relatedColumn = referencedEntity.Columns.find( + const relatedColumn = referencedEntity.Columns.find( column => - column.tsName == + column.tsName === relationTmp.referencedColumnsNames[relationColumnIndex] ); if (!relatedColumn) { @@ -358,16 +355,16 @@ export abstract class AbstractDriver { } let isOneToMany: boolean; isOneToMany = false; - let index = ownerEntity.Indexes.find( + const index = ownerEntity.Indexes.find( index => index.isUnique && index.columns.some( - col => col.name == ownerColumn!.tsName + col => col.name === ownerColumn!.tsName ) ); isOneToMany = !index; - let ownerRelation = new RelationInfo(); + const ownerRelation = new RelationInfo(); ownerRelation.actionOnDelete = relationTmp.actionOnDelete; ownerRelation.actionOnUpdate = relationTmp.actionOnUpdate; ownerRelation.isOwner = true; @@ -381,7 +378,7 @@ export abstract class AbstractDriver { let columnName = ownerEntity.EntityName; if ( - referencedEntity.Columns.some(v => v.tsName == columnName) + referencedEntity.Columns.some(v => v.tsName === columnName) ) { columnName = columnName + "_"; for (let i = 2; i <= referencedEntity.Columns.length; i++) { @@ -392,19 +389,20 @@ export abstract class AbstractDriver { ) + i.toString(); if ( referencedEntity.Columns.every( - v => v.tsName != columnName + v => v.tsName !== columnName ) - ) + ) { break; + } } } ownerRelation.ownerColumn = columnName; ownerColumn.relations.push(ownerRelation); if (isOneToMany) { - let col = new ColumnInfo(); + const col = new ColumnInfo(); col.tsName = columnName; - let referencedRelation = new RelationInfo(); + const referencedRelation = new RelationInfo(); col.relations.push(referencedRelation); referencedRelation.actionOnDelete = relationTmp.actionOnDelete; @@ -418,9 +416,9 @@ export abstract class AbstractDriver { referencedRelation.relationType = "OneToMany"; referencedEntity.Columns.push(col); } else { - let col = new ColumnInfo(); + const col = new ColumnInfo(); col.tsName = columnName; - let referencedRelation = new RelationInfo(); + const referencedRelation = new RelationInfo(); col.relations.push(referencedRelation); referencedRelation.actionOnDelete = relationTmp.actionOnDelete; @@ -438,27 +436,27 @@ export abstract class AbstractDriver { }); return entities; } - abstract async GetCoulmnsFromEntity( + public abstract async GetCoulmnsFromEntity( entities: EntityInfo[], schema: string ): Promise; - abstract async GetIndexesFromEntity( + public abstract async GetIndexesFromEntity( entities: EntityInfo[], schema: string ): Promise; - abstract async GetRelations( + public abstract async GetRelations( entities: EntityInfo[], schema: string ): Promise; - FindPrimaryColumnsFromIndexes(dbModel: DatabaseModel) { + public FindPrimaryColumnsFromIndexes(dbModel: DatabaseModel) { dbModel.entities.forEach(entity => { - let primaryIndex = entity.Indexes.find(v => v.isPrimaryKey); + const primaryIndex = entity.Indexes.find(v => v.isPrimaryKey); entity.Columns.filter( col => primaryIndex && primaryIndex.columns.some( - cIndex => cIndex.name == col.tsName + cIndex => cIndex.name === col.tsName ) ).forEach(col => (col.isPrimary = true)); if ( @@ -474,9 +472,15 @@ export abstract class AbstractDriver { } }); } - abstract async DisconnectFromServer(); - abstract async CreateDB(dbName: string); - abstract async DropDB(dbName: string); - abstract async UseDB(dbName: string); - abstract async CheckIfDBExists(dbName: string): Promise; + public abstract async DisconnectFromServer(); + public abstract async CreateDB(dbName: string); + public abstract async DropDB(dbName: string); + public abstract async UseDB(dbName: string); + public abstract async CheckIfDBExists(dbName: string): Promise; + + private ApplyNamingStrategy(dbModel: DatabaseModel) { + this.changeRelationNames(dbModel); + this.changeEntityNames(dbModel); + this.changeColumnNames(dbModel); + } } diff --git a/src/drivers/MariaDbDriver.ts b/src/drivers/MariaDbDriver.ts index e0633a7..93c587a 100644 --- a/src/drivers/MariaDbDriver.ts +++ b/src/drivers/MariaDbDriver.ts @@ -1,5 +1,5 @@ import { MysqlDriver } from "./MysqlDriver"; export class MariaDbDriver extends MysqlDriver { - readonly EngineName: string = "MariaDb"; + public readonly EngineName: string = "MariaDb"; } diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 7d3fe8c..c8eb5ba 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -6,8 +6,8 @@ import * as TomgUtils from "../Utils"; export class MssqlDriver extends AbstractDriver { GetAllTablesQuery = async (schema: string) => { - let request = new MSSQL.Request(this.Connection); - let response: { + const request = new MSSQL.Request(this.Connection); + const response: { TABLE_SCHEMA: string; TABLE_NAME: string; }[] = (await request.query( @@ -20,8 +20,8 @@ export class MssqlDriver extends AbstractDriver { entities: EntityInfo[], schema: string ): Promise { - let request = new MSSQL.Request(this.Connection); - let response: { + const request = new MSSQL.Request(this.Connection); + const response: { TABLE_NAME: string; COLUMN_NAME: string; COLUMN_DEFAULT: string; @@ -199,8 +199,8 @@ export class MssqlDriver extends AbstractDriver { entities: EntityInfo[], schema: string ): Promise { - let request = new MSSQL.Request(this.Connection); - let response: { + const request = new MSSQL.Request(this.Connection); + const response: { TableName: string; IndexName: string; ColumnName: string; @@ -258,8 +258,8 @@ ORDER BY entities: EntityInfo[], schema: string ): Promise { - let request = new MSSQL.Request(this.Connection); - let response: { + const request = new MSSQL.Request(this.Connection); + const response: { TableWithForeignKey: string; FK_PartNo: number; ForeignKeyColumn: string; @@ -365,7 +365,7 @@ order by } }; - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { this.Connection = new MSSQL.ConnectionPool(config, err => { if (!err) { resolve(true); @@ -383,20 +383,20 @@ order by await promise; } async CreateDB(dbName: string) { - let request = new MSSQL.Request(this.Connection); + const request = new MSSQL.Request(this.Connection); await request.query(`CREATE DATABASE ${dbName}; `); } async UseDB(dbName: string) { - let request = new MSSQL.Request(this.Connection); + const request = new MSSQL.Request(this.Connection); await request.query(`USE ${dbName}; `); } async DropDB(dbName: string) { - let request = new MSSQL.Request(this.Connection); + const request = new MSSQL.Request(this.Connection); await request.query(`DROP DATABASE ${dbName}; `); } async CheckIfDBExists(dbName: string): Promise { - let request = new MSSQL.Request(this.Connection); - let resp = await request.query( + const request = new MSSQL.Request(this.Connection); + const resp = await request.query( `SELECT name FROM master.sys.databases WHERE name = N'${dbName}' ` ); return resp.recordset.length > 0; diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 2fa3bf3..c0826c8 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -1,14 +1,16 @@ -import { AbstractDriver } from "./AbstractDriver"; import * as MYSQL from "mysql"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; +import { AbstractDriver } from "./AbstractDriver"; export class MysqlDriver extends AbstractDriver { - readonly EngineName: string = "MySQL"; + public readonly EngineName: string = "MySQL"; - GetAllTablesQuery = async (schema: string) => { - let response = this.ExecQuery<{ + private Connection: MYSQL.Connection; + + public GetAllTablesQuery = async (schema: string) => { + const response = this.ExecQuery<{ TABLE_SCHEMA: string; TABLE_NAME: string; }>(`SELECT TABLE_SCHEMA, TABLE_NAME @@ -18,11 +20,11 @@ export class MysqlDriver extends AbstractDriver { return response; }; - async GetCoulmnsFromEntity( + public async GetCoulmnsFromEntity( entities: EntityInfo[], schema: string ): Promise { - let response = await this.ExecQuery<{ + const response = await this.ExecQuery<{ TABLE_NAME: string; COLUMN_NAME: string; COLUMN_DEFAULT: string; @@ -40,14 +42,14 @@ export class MysqlDriver extends AbstractDriver { FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA like DATABASE()`); entities.forEach(ent => { response - .filter(filterVal => filterVal.TABLE_NAME == ent.EntityName) + .filter(filterVal => filterVal.TABLE_NAME === ent.EntityName) .forEach(resp => { - let colInfo: ColumnInfo = new ColumnInfo(); + const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; - colInfo.is_nullable = resp.IS_NULLABLE == "YES"; - colInfo.is_generated = resp.IsIdentity == 1; - colInfo.is_unique = resp.column_key == "UNI"; + colInfo.is_nullable = resp.IS_NULLABLE === "YES"; + colInfo.is_generated = resp.IsIdentity === 1; + colInfo.is_unique = resp.column_key === "UNI"; colInfo.default = resp.COLUMN_DEFAULT; colInfo.sql_type = resp.DATA_TYPE; switch (resp.DATA_TYPE) { @@ -55,7 +57,7 @@ export class MysqlDriver extends AbstractDriver { colInfo.ts_type = "number"; break; case "tinyint": - if (resp.column_type == "tinyint(1)") { + if (resp.column_type === "tinyint(1)") { colInfo.width = 1; colInfo.ts_type = "boolean"; } else { @@ -173,7 +175,7 @@ export class MysqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithPrecision.some( - v => v == colInfo.sql_type + v => v === colInfo.sql_type ) ) { colInfo.numericPrecision = resp.NUMERIC_PRECISION; @@ -181,7 +183,7 @@ export class MysqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v == colInfo.sql_type + v => v === colInfo.sql_type ) ) { colInfo.lenght = @@ -192,8 +194,8 @@ export class MysqlDriver extends AbstractDriver { if ( this.ColumnTypesWithWidth.some( v => - v == colInfo.sql_type && - colInfo.ts_type != "boolean" + v === colInfo.sql_type && + colInfo.ts_type !== "boolean" ) ) { colInfo.width = @@ -202,16 +204,18 @@ export class MysqlDriver extends AbstractDriver { : null; } - if (colInfo.sql_type) ent.Columns.push(colInfo); + if (colInfo.sql_type) { + ent.Columns.push(colInfo); + } }); }); return entities; } - async GetIndexesFromEntity( + public async GetIndexesFromEntity( entities: EntityInfo[], schema: string ): Promise { - let response = await this.ExecQuery<{ + const response = await this.ExecQuery<{ TableName: string; IndexName: string; ColumnName: string; @@ -224,23 +228,23 @@ export class MysqlDriver extends AbstractDriver { `); entities.forEach(ent => { response - .filter(filterVal => filterVal.TableName == ent.EntityName) + .filter(filterVal => filterVal.TableName === ent.EntityName) .forEach(resp => { - let indexInfo: IndexInfo = {}; - let indexColumnInfo: IndexColumnInfo = {}; + let indexInfo: IndexInfo = {} as IndexInfo; + const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; if ( ent.Indexes.filter( - filterVal => filterVal.name == resp.IndexName + filterVal => filterVal.name === resp.IndexName ).length > 0 ) { indexInfo = ent.Indexes.find( - filterVal => filterVal.name == resp.IndexName + filterVal => filterVal.name === resp.IndexName )!; } else { - indexInfo.columns = []; + indexInfo.columns = [] as IndexColumnInfo[]; indexInfo.name = resp.IndexName; - indexInfo.isUnique = resp.is_unique == 1; - indexInfo.isPrimaryKey = resp.is_primary_key == 1; + indexInfo.isUnique = resp.is_unique === 1; + indexInfo.isPrimaryKey = resp.is_primary_key === 1; ent.Indexes.push(indexInfo); } indexColumnInfo.name = resp.ColumnName; @@ -250,11 +254,11 @@ export class MysqlDriver extends AbstractDriver { return entities; } - async GetRelations( + public async GetRelations( entities: EntityInfo[], schema: string ): Promise { - let response = await this.ExecQuery<{ + const response = await this.ExecQuery<{ TableWithForeignKey: string; FK_PartNo: number; ForeignKeyColumn: string; @@ -280,19 +284,19 @@ export class MysqlDriver extends AbstractDriver { TABLE_SCHEMA = SCHEMA() AND CU.REFERENCED_TABLE_NAME IS NOT NULL; `); - let relationsTemp: RelationTempInfo[] = []; + const relationsTemp: RelationTempInfo[] = [] as RelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( - val => val.object_id == resp.object_id + val => val.object_id === resp.object_id ); - if (rels == undefined) { - rels = {}; + if (rels === undefined) { + rels = {} as RelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; rels.actionOnDelete = - resp.onDelete == "NO_ACTION" ? null : resp.onDelete; + resp.onDelete === "NO_ACTION" ? null : resp.onDelete; rels.actionOnUpdate = - resp.onUpdate == "NO_ACTION" ? null : resp.onUpdate; + resp.onUpdate === "NO_ACTION" ? null : resp.onUpdate; rels.object_id = resp.object_id; rels.ownerTable = resp.TableWithForeignKey; rels.referencedTable = resp.TableReferenced; @@ -307,8 +311,8 @@ export class MysqlDriver extends AbstractDriver { ); return entities; } - async DisconnectFromServer() { - let promise = new Promise((resolve, reject) => { + public async DisconnectFromServer() { + const promise = new Promise((resolve, reject) => { this.Connection.end(err => { if (!err) { resolve(true); @@ -322,11 +326,11 @@ export class MysqlDriver extends AbstractDriver { } }); }); - if (this.Connection) await promise; + if (this.Connection) { + await promise; + } } - - private Connection: MYSQL.Connection; - async ConnectToServer( + public async ConnectToServer( database: string, server: string, port: number, @@ -337,26 +341,26 @@ export class MysqlDriver extends AbstractDriver { let config: MYSQL.ConnectionConfig; if (ssl) { config = { - database: database, + database, host: server, - port: port, - user: user, - password: password, + port, + user, + password, ssl: { rejectUnauthorized: false } }; } else { config = { - database: database, + database, host: server, - port: port, - user: user, - password: password + port, + user, + password }; } - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { this.Connection = MYSQL.createConnection(config); this.Connection.connect(err => { @@ -375,28 +379,28 @@ export class MysqlDriver extends AbstractDriver { await promise; } - async CreateDB(dbName: string) { + public async CreateDB(dbName: string) { await this.ExecQuery(`CREATE DATABASE ${dbName}; `); } - async UseDB(dbName: string) { + public async UseDB(dbName: string) { await this.ExecQuery(`USE ${dbName}; `); } - async DropDB(dbName: string) { + public async DropDB(dbName: string) { await this.ExecQuery(`DROP DATABASE ${dbName}; `); } - async CheckIfDBExists(dbName: string): Promise { - let resp = await this.ExecQuery( + public async CheckIfDBExists(dbName: string): Promise { + const resp = await this.ExecQuery( `SHOW DATABASES LIKE '${dbName}' ` ); return resp.length > 0; } - async ExecQuery(sql: string): Promise> { - let ret: Array = []; - let query = this.Connection.query(sql); - let stream = query.stream({}); - let promise = new Promise((resolve, reject) => { + public async ExecQuery(sql: string): Promise { + const ret: T[] = []; + const query = this.Connection.query(sql); + const stream = query.stream({}); + const promise = new Promise((resolve, reject) => { stream.on("data", chunk => { - ret.push((chunk)); + ret.push((chunk as any) as T); }); stream.on("error", err => reject(err)); stream.on("end", () => resolve(true)); diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 4ac6580..6cda297 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -1,10 +1,12 @@ -import { AbstractDriver } from "./AbstractDriver"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; +import { AbstractDriver } from "./AbstractDriver"; export class OracleDriver extends AbstractDriver { - Oracle: any; + public Oracle: any; + + private Connection: any /*Oracle.IConnection*/; constructor() { super(); try { @@ -16,21 +18,21 @@ export class OracleDriver extends AbstractDriver { } } - GetAllTablesQuery = async (schema: string) => { - let response: { + public GetAllTablesQuery = async (schema: string) => { + const response: Array<{ TABLE_SCHEMA: string; TABLE_NAME: string; - }[] = (await this.Connection.execute( + }> = (await this.Connection.execute( ` SELECT NULL AS TABLE_SCHEMA, TABLE_NAME FROM all_tables WHERE owner = (select user from dual)` )).rows!; return response; }; - async GetCoulmnsFromEntity( + public async GetCoulmnsFromEntity( entities: EntityInfo[], schema: string ): Promise { - let response: { + const response: Array<{ TABLE_NAME: string; COLUMN_NAME: string; DATA_DEFAULT: string; @@ -41,7 +43,7 @@ export class OracleDriver extends AbstractDriver { DATA_SCALE: number; IDENTITY_COLUMN: string; IS_UNIQUE: Number; - }[] = (await this.Connection + }> = (await this.Connection .execute(`SELECT utc.TABLE_NAME, utc.COLUMN_NAME, DATA_DEFAULT, NULLABLE, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, IDENTITY_COLUMN, (select count(*) from USER_CONS_COLUMNS ucc @@ -51,13 +53,13 @@ export class OracleDriver extends AbstractDriver { entities.forEach(ent => { response - .filter(filterVal => filterVal.TABLE_NAME == ent.EntityName) + .filter(filterVal => filterVal.TABLE_NAME === ent.EntityName) .forEach(resp => { - let colInfo: ColumnInfo = new ColumnInfo(); + const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; - colInfo.is_nullable = resp.NULLABLE == "Y"; - colInfo.is_generated = resp.IDENTITY_COLUMN == "YES"; + colInfo.is_nullable = resp.NULLABLE === "Y"; + colInfo.is_generated = resp.IDENTITY_COLUMN === "YES"; colInfo.default = !resp.DATA_DEFAULT || resp.DATA_DEFAULT.includes('"') ? null @@ -161,7 +163,7 @@ export class OracleDriver extends AbstractDriver { } if ( this.ColumnTypesWithPrecision.some( - v => v == colInfo.sql_type + v => v === colInfo.sql_type ) ) { colInfo.numericPrecision = resp.DATA_PRECISION; @@ -169,29 +171,31 @@ export class OracleDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v == colInfo.sql_type + v => v === colInfo.sql_type ) ) { colInfo.lenght = resp.DATA_LENGTH > 0 ? resp.DATA_LENGTH : null; } - if (colInfo.sql_type) ent.Columns.push(colInfo); + if (colInfo.sql_type) { + ent.Columns.push(colInfo); + } }); }); return entities; } - async GetIndexesFromEntity( + public async GetIndexesFromEntity( entities: EntityInfo[], schema: string ): Promise { - let response: { + const response: Array<{ COLUMN_NAME: string; TABLE_NAME: string; INDEX_NAME: string; UNIQUENESS: string; ISPRIMARYKEY: number; - }[] = (await this.Connection + }> = (await this.Connection .execute(`SELECT ind.TABLE_NAME, ind.INDEX_NAME, col.COLUMN_NAME,ind.UNIQUENESS, CASE WHEN uc.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END ISPRIMARYKEY FROM USER_INDEXES ind JOIN USER_IND_COLUMNS col ON ind.INDEX_NAME=col.INDEX_NAME @@ -200,23 +204,23 @@ export class OracleDriver extends AbstractDriver { entities.forEach(ent => { response - .filter(filterVal => filterVal.TABLE_NAME == ent.EntityName) + .filter(filterVal => filterVal.TABLE_NAME === ent.EntityName) .forEach(resp => { - let indexInfo: IndexInfo = {}; - let indexColumnInfo: IndexColumnInfo = {}; + let indexInfo: IndexInfo = {} as IndexInfo; + const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; if ( ent.Indexes.filter( - filterVal => filterVal.name == resp.INDEX_NAME + filterVal => filterVal.name === resp.INDEX_NAME ).length > 0 ) { indexInfo = ent.Indexes.find( - filterVal => filterVal.name == resp.INDEX_NAME + filterVal => filterVal.name === resp.INDEX_NAME )!; } else { - indexInfo.columns = []; + indexInfo.columns = [] as IndexColumnInfo[]; indexInfo.name = resp.INDEX_NAME; - indexInfo.isUnique = resp.UNIQUENESS == "UNIQUE"; - indexInfo.isPrimaryKey = resp.ISPRIMARYKEY == 1; + indexInfo.isUnique = resp.UNIQUENESS === "UNIQUE"; + indexInfo.isPrimaryKey = resp.ISPRIMARYKEY === 1; ent.Indexes.push(indexInfo); } indexColumnInfo.name = resp.COLUMN_NAME; @@ -226,11 +230,11 @@ export class OracleDriver extends AbstractDriver { return entities; } - async GetRelations( + public async GetRelations( entities: EntityInfo[], schema: string ): Promise { - let response: { + const response: Array<{ OWNER_TABLE_NAME: string; OWNER_POSITION: string; OWNER_COLUMN_NAME: string; @@ -238,7 +242,7 @@ export class OracleDriver extends AbstractDriver { CHILD_COLUMN_NAME: string; DELETE_RULE: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; CONSTRAINT_NAME: string; - }[] = (await this.Connection + }> = (await this.Connection .execute(`select owner.TABLE_NAME OWNER_TABLE_NAME,ownCol.POSITION OWNER_POSITION,ownCol.COLUMN_NAME OWNER_COLUMN_NAME, child.TABLE_NAME CHILD_TABLE_NAME ,childCol.COLUMN_NAME CHILD_COLUMN_NAME, owner.DELETE_RULE, @@ -250,17 +254,17 @@ export class OracleDriver extends AbstractDriver { ORDER BY OWNER_TABLE_NAME ASC, owner.CONSTRAINT_NAME ASC, OWNER_POSITION ASC`)) .rows!; - let relationsTemp: RelationTempInfo[] = []; + const relationsTemp: RelationTempInfo[] = [] as RelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( - val => val.object_id == resp.CONSTRAINT_NAME + val => val.object_id === resp.CONSTRAINT_NAME ); - if (rels == undefined) { - rels = {}; + if (rels === undefined) { + rels = {} as RelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; rels.actionOnDelete = - resp.DELETE_RULE == "NO ACTION" ? null : resp.DELETE_RULE; + resp.DELETE_RULE === "NO ACTION" ? null : resp.DELETE_RULE; rels.actionOnUpdate = null; rels.object_id = resp.CONSTRAINT_NAME; rels.ownerTable = resp.OWNER_TABLE_NAME; @@ -276,12 +280,12 @@ export class OracleDriver extends AbstractDriver { ); return entities; } - async DisconnectFromServer() { - if (this.Connection) await this.Connection.close(); + public async DisconnectFromServer() { + if (this.Connection) { + await this.Connection.close(); + } } - - private Connection: any /*Oracle.IConnection*/; - async ConnectToServer( + public async ConnectToServer( database: string, server: string, port: number, @@ -290,24 +294,24 @@ export class OracleDriver extends AbstractDriver { ssl: boolean ) { let config: any; - if (user == String(process.env.ORACLE_UsernameSys)) { + if (user === String(process.env.ORACLE_UsernameSys)) { config /*Oracle.IConnectionAttributes*/ = { - user: user, - password: password, + user, + password, connectString: `${server}:${port}/${database}`, externalAuth: ssl, privilege: this.Oracle.SYSDBA }; } else { config /*Oracle.IConnectionAttributes*/ = { - user: user, - password: password, + user, + password, connectString: `${server}:${port}/${database}`, externalAuth: ssl }; } - let that = this; - let promise = new Promise((resolve, reject) => { + const that = this; + const promise = new Promise((resolve, reject) => { this.Oracle.getConnection(config, function(err, connection) { if (!err) { that.Connection = connection; @@ -326,7 +330,7 @@ export class OracleDriver extends AbstractDriver { await promise; } - async CreateDB(dbName: string) { + public async CreateDB(dbName: string) { await this.Connection.execute( `CREATE USER ${dbName} IDENTIFIED BY ${String( process.env.ORACLE_Password @@ -334,12 +338,12 @@ export class OracleDriver extends AbstractDriver { ); await this.Connection.execute(`GRANT CONNECT TO ${dbName}`); } - async UseDB(dbName: string) {} - async DropDB(dbName: string) { + public async UseDB(dbName: string) {} + public async DropDB(dbName: string) { await this.Connection.execute(`DROP USER ${dbName} CASCADE`); } - async CheckIfDBExists(dbName: string): Promise { - var x = await this.Connection.execute( + public async CheckIfDBExists(dbName: string): Promise { + const x = await this.Connection.execute( `select count(*) as CNT from dba_users where username='${dbName.toUpperCase()}'` ); return x.rows[0][0] > 0 || x.rows[0].CNT; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index d91411d..4db71f6 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -8,7 +8,7 @@ export class PostgresDriver extends AbstractDriver { private Connection: PG.Client; GetAllTablesQuery = async (schema: string) => { - let response: { + const response: { TABLE_SCHEMA: string; TABLE_NAME: string; }[] = (await this.Connection.query( @@ -21,7 +21,7 @@ export class PostgresDriver extends AbstractDriver { entities: EntityInfo[], schema: string ): Promise { - let response: { + const response: { table_name: string; column_name: string; udt_name: string; @@ -62,7 +62,7 @@ export class PostgresDriver extends AbstractDriver { ? null : resp.column_default; - var columnTypes = this.MatchColumnTypes( + const columnTypes = this.MatchColumnTypes( resp.data_type, resp.udt_name ); @@ -338,7 +338,10 @@ export class PostgresDriver extends AbstractDriver { ret.ts_type = "string"; break; case "ARRAY": - let z = this.MatchColumnTypes(udt_name.substring(1), udt_name); + const z = this.MatchColumnTypes( + udt_name.substring(1), + udt_name + ); ret.ts_type = z.ts_type; ret.sql_type = z.sql_type; ret.is_array = true; @@ -368,7 +371,7 @@ export class PostgresDriver extends AbstractDriver { entities: EntityInfo[], schema: string ): Promise { - let response: { + const response: { tablename: string; indexname: string; columnname: string; @@ -433,7 +436,7 @@ export class PostgresDriver extends AbstractDriver { entities: EntityInfo[], schema: string ): Promise { - let response: { + const response: { tablewithforeignkey: string; fk_partno: number; foreignkeycolumn: string; @@ -509,7 +512,7 @@ export class PostgresDriver extends AbstractDriver { } async DisconnectFromServer() { if (this.Connection) { - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { this.Connection.end(err => { if (!err) { resolve(true); @@ -544,7 +547,7 @@ export class PostgresDriver extends AbstractDriver { ssl: ssl }); - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { this.Connection.connect(err => { if (!err) { resolve(true); @@ -572,7 +575,7 @@ export class PostgresDriver extends AbstractDriver { await this.Connection.query(`DROP DATABASE ${dbName}; `); } async CheckIfDBExists(dbName: string): Promise { - let resp = await this.Connection.query( + const resp = await this.Connection.query( `SELECT datname FROM pg_database WHERE datname ='${dbName}' ` ); return resp.rowCount > 0; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index f9ac79d..ec64f3d 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -1,24 +1,24 @@ -import { AbstractDriver } from "./AbstractDriver"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; +import { AbstractDriver } from "./AbstractDriver"; export class SqliteDriver extends AbstractDriver { - sqlite = require("sqlite3").verbose(); - db: any; - tablesWithGeneratedPrimaryKey: String[] = new Array(); - GetAllTablesQuery: any; + public sqlite = require("sqlite3").verbose(); + public db: any; + public tablesWithGeneratedPrimaryKey: String[] = new Array(); + public GetAllTablesQuery: any; - async GetAllTables(schema: string): Promise { - let ret: EntityInfo[] = []; - let rows = await this.ExecQuery<{ tbl_name: string; sql: string }>( + public async GetAllTables(schema: string): Promise { + const ret: EntityInfo[] = [] as EntityInfo[]; + const rows = await this.ExecQuery<{ tbl_name: string; sql: string }>( `SELECT tbl_name, sql FROM "sqlite_master" WHERE "type" = 'table' AND name NOT LIKE 'sqlite_%'` ); rows.forEach(val => { - let ent: EntityInfo = new EntityInfo(); + const ent: EntityInfo = new EntityInfo(); ent.EntityName = val.tbl_name; - ent.Columns = []; - ent.Indexes = []; + ent.Columns = [] as ColumnInfo[]; + ent.Indexes = [] as IndexInfo[]; if (val.sql.includes("AUTOINCREMENT")) { this.tablesWithGeneratedPrimaryKey.push(ent.EntityName); } @@ -26,12 +26,12 @@ export class SqliteDriver extends AbstractDriver { }); return ret; } - async GetCoulmnsFromEntity( + public async GetCoulmnsFromEntity( entities: EntityInfo[], schema: string ): Promise { for (const ent of entities) { - let response = await this.ExecQuery<{ + const response = await this.ExecQuery<{ cid: number; name: string; type: string; @@ -40,7 +40,7 @@ export class SqliteDriver extends AbstractDriver { pk: number; }>(`PRAGMA table_info('${ent.EntityName}');`); response.forEach(resp => { - let colInfo: ColumnInfo = new ColumnInfo(); + const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.name; colInfo.sqlName = resp.name; colInfo.is_nullable = resp.notnull == 0; @@ -146,19 +146,19 @@ export class SqliteDriver extends AbstractDriver { ); break; } - let options = resp.type.match(/\([0-9 ,]+\)/g); + const options = resp.type.match(/\([0-9 ,]+\)/g); if ( this.ColumnTypesWithPrecision.some( v => v == colInfo.sql_type ) && options ) { - colInfo.numericPrecision = options[0] + colInfo.numericPrecision = options[0] .substring(1, options[0].length - 1) - .split(",")[0]; - colInfo.numericScale = options[0] + .split(",")[0] as any; + colInfo.numericScale = options[0] .substring(1, options[0].length - 1) - .split(",")[1]; + .split(",")[1] as any; } if ( this.ColumnTypesWithLength.some( @@ -166,10 +166,10 @@ export class SqliteDriver extends AbstractDriver { ) && options ) { - colInfo.lenght = options[0].substring( + colInfo.lenght = options[0].substring( 1, options[0].length - 1 - ); + ) as any; } if ( this.ColumnTypesWithWidth.some( @@ -179,24 +179,26 @@ export class SqliteDriver extends AbstractDriver { ) && options ) { - colInfo.width = options[0].substring( + colInfo.width = options[0].substring( 1, options[0].length - 1 - ); + ) as any; } - if (colInfo.sql_type) ent.Columns.push(colInfo); + if (colInfo.sql_type) { + ent.Columns.push(colInfo); + } }); } return entities; } - async GetIndexesFromEntity( + public async GetIndexesFromEntity( entities: EntityInfo[], schema: string ): Promise { for (const ent of entities) { - let response = await this.ExecQuery<{ + const response = await this.ExecQuery<{ seq: number; name: string; unique: number; @@ -204,14 +206,14 @@ export class SqliteDriver extends AbstractDriver { partial: number; }>(`PRAGMA index_list('${ent.EntityName}');`); for (const resp of response) { - let indexColumnsResponse = await this.ExecQuery<{ + const indexColumnsResponse = await this.ExecQuery<{ seqno: number; cid: number; name: string; }>(`PRAGMA index_info('${resp.name}');`); indexColumnsResponse.forEach(element => { - let indexInfo: IndexInfo = {}; - let indexColumnInfo: IndexColumnInfo = {}; + let indexInfo: IndexInfo = {} as IndexInfo; + const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; if ( ent.Indexes.filter(filterVal => { return filterVal.name == resp.name; @@ -221,7 +223,7 @@ export class SqliteDriver extends AbstractDriver { filterVal => filterVal.name == resp.name )!; } else { - indexInfo.columns = []; + indexInfo.columns = [] as IndexColumnInfo[]; indexInfo.name = resp.name; indexInfo.isUnique = resp.unique == 1; ent.Indexes.push(indexInfo); @@ -242,12 +244,12 @@ export class SqliteDriver extends AbstractDriver { return entities; } - async GetRelations( + public async GetRelations( entities: EntityInfo[], schema: string ): Promise { for (const entity of entities) { - let response = await this.ExecQuery<{ + const response = await this.ExecQuery<{ id: number; seq: number; table: string; @@ -257,9 +259,9 @@ export class SqliteDriver extends AbstractDriver { on_delete: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; match: string; }>(`PRAGMA foreign_key_list('${entity.EntityName}');`); - let relationsTemp: RelationTempInfo[] = []; + const relationsTemp: RelationTempInfo[] = [] as RelationTempInfo[]; response.forEach(resp => { - let rels = {}; + const rels = {} as RelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; rels.actionOnDelete = @@ -279,11 +281,11 @@ export class SqliteDriver extends AbstractDriver { } return entities; } - async DisconnectFromServer() { + public async DisconnectFromServer() { this.db.close(); } - async ConnectToServer( + public async ConnectToServer( database: string, server: string, port: number, @@ -294,9 +296,9 @@ export class SqliteDriver extends AbstractDriver { await this.UseDB(database); } - async CreateDB(dbName: string) {} - async UseDB(dbName: string) { - let promise = new Promise((resolve, reject) => { + public async CreateDB(dbName: string) {} + public async UseDB(dbName: string) { + const promise = new Promise((resolve, reject) => { this.db = new this.sqlite.Database(dbName, err => { if (err) { console.error(err.message); @@ -308,14 +310,14 @@ export class SqliteDriver extends AbstractDriver { }); return promise; } - async DropDB(dbName: string) {} - async CheckIfDBExists(dbName: string): Promise { + public async DropDB(dbName: string) {} + public async CheckIfDBExists(dbName: string): Promise { return true; } - async ExecQuery(sql: string): Promise> { + public async ExecQuery(sql: string): Promise { let ret: any; - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { this.db.serialize(() => { this.db.all(sql, [], function(err, row) { if (!err) { diff --git a/src/index.ts b/src/index.ts index fcdb6f1..a4a2a4e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,18 +1,18 @@ +import path = require("path"); +import * as Yargs from "yargs"; +import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { AbstractDriver } from "./drivers/AbstractDriver"; +import { MariaDbDriver } from "./drivers/MariaDbDriver"; import { MssqlDriver } from "./drivers/MssqlDriver"; +import { MysqlDriver } from "./drivers/MysqlDriver"; +import { OracleDriver } from "./drivers/OracleDriver"; import { PostgresDriver } from "./drivers/PostgresDriver"; import { SqliteDriver } from "./drivers/SqliteDriver"; -import { MysqlDriver } from "./drivers/MysqlDriver"; -import { MariaDbDriver } from "./drivers/MariaDbDriver"; -import { OracleDriver } from "./drivers/OracleDriver"; import { Engine } from "./Engine"; -import * as Yargs from "yargs"; -import * as TomgUtils from "./Utils"; -import path = require("path"); -import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { NamingStrategy } from "./NamingStrategy"; +import * as TomgUtils from "./Utils"; -var argv = Yargs.usage( +const argv = Yargs.usage( "Usage: typeorm-model-generator -h -d -p [port] -u -x [password] -e [engine]" ) .option("h", { @@ -148,13 +148,13 @@ switch (argv.e) { } let namingStrategy: AbstractNamingStrategy; if (argv.namingStrategy && argv.namingStrategy != "") { - let req = require(argv.namingStrategy); + const req = require(argv.namingStrategy); namingStrategy = new req.NamingStrategy(); } else { namingStrategy = new NamingStrategy(); } -let engine = new Engine(driver, { +const engine = new Engine(driver, { host: argv.h, port: parseInt(argv.p) || standardPort, databaseName: argv.d ? argv.d.toString() : null, @@ -172,7 +172,7 @@ let engine = new Engine(driver, { lazy: argv.lazy, constructor: argv.generateConstructor, relationIds: argv.relationIds, - namingStrategy: namingStrategy + namingStrategy }); console.log(TomgUtils.packageVersion()); diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index 056c2f7..44964bb 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -1,12 +1,12 @@ import { RelationInfo } from "./RelationInfo"; export class ColumnInfo { - tsName: string = ""; - sqlName: string = ""; - default: string | null = null; - is_nullable: boolean = false; - is_unique: boolean = false; - ts_type: + public tsName: string = ""; + public sqlName: string = ""; + public default: string | null = null; + public is_nullable: boolean = false; + public is_unique: boolean = false; + public ts_type: | "number" | "string" | "boolean" @@ -16,16 +16,16 @@ export class ColumnInfo { | "string | Object" | "string | string[]" | "any"; - sql_type: string; - lenght: number | null = null; - width: number | null = null; - isPrimary: boolean = false; - is_generated: boolean = false; - is_array: boolean = false; - numericPrecision: number | null = null; - numericScale: number | null = null; - enumOptions: string | null = null; - relations: RelationInfo[]; + public sql_type: string; + public lenght: number | null = null; + public width: number | null = null; + public isPrimary: boolean = false; + public is_generated: boolean = false; + public is_array: boolean = false; + public numericPrecision: number | null = null; + public numericScale: number | null = null; + public enumOptions: string | null = null; + public relations: RelationInfo[]; constructor() { this.relations = []; } diff --git a/src/models/DatabaseModel.ts b/src/models/DatabaseModel.ts index 27c6b7b..8dd6410 100644 --- a/src/models/DatabaseModel.ts +++ b/src/models/DatabaseModel.ts @@ -1,4 +1,4 @@ import { EntityInfo } from "./EntityInfo"; export class DatabaseModel { - entities: EntityInfo[]; + public entities: EntityInfo[]; } diff --git a/src/models/EntityInfo.ts b/src/models/EntityInfo.ts index ecae01c..286d107 100644 --- a/src/models/EntityInfo.ts +++ b/src/models/EntityInfo.ts @@ -1,20 +1,21 @@ import { ColumnInfo } from "./ColumnInfo"; export class EntityInfo { - EntityName: string; - Columns: ColumnInfo[]; - Imports: string[]; - UniqueImports: string[]; - Indexes: IndexInfo[]; - Schema: string; - GenerateConstructor: boolean; + public EntityName: string; + public Columns: ColumnInfo[]; + public Imports: string[]; + public UniqueImports: string[]; + public Indexes: IndexInfo[]; + public Schema: string; + public GenerateConstructor: boolean; - relationImports() { - var imports: string[] = []; + public relationImports() { + const imports: string[] = []; this.Columns.forEach(column => { column.relations.forEach(relation => { - if (this.EntityName != relation.relatedTable) + if (this.EntityName != relation.relatedTable) { imports.push(relation.relatedTable); + } }); }); this.UniqueImports = imports.filter( diff --git a/src/models/RelationInfo.ts b/src/models/RelationInfo.ts index fb74a3f..5ec6336 100644 --- a/src/models/RelationInfo.ts +++ b/src/models/RelationInfo.ts @@ -1,19 +1,24 @@ export class RelationInfo { - isOwner: boolean; - relationType: "OneToOne" | "OneToMany" | "ManyToOne" | "ManyToMany"; - relatedTable: string; - relatedColumn: string; - ownerTable: string; - ownerColumn: string; - actionOnDelete: + public isOwner: boolean; + public relationType: "OneToOne" | "OneToMany" | "ManyToOne" | "ManyToMany"; + public relatedTable: string; + public relatedColumn: string; + public ownerTable: string; + public ownerColumn: string; + public actionOnDelete: | "RESTRICT" | "CASCADE" | "SET NULL" | "DEFAULT" | "NO ACTION" | null; - actionOnUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | "DEFAULT" | null; - relationIdField: boolean = false; + public actionOnUpdate: + | "RESTRICT" + | "CASCADE" + | "SET NULL" + | "DEFAULT" + | null; + public relationIdField: boolean = false; get isOneToMany(): boolean { return this.relationType == "OneToMany"; diff --git a/src/tslint.json b/src/tslint.json new file mode 100644 index 0000000..b48b355 --- /dev/null +++ b/src/tslint.json @@ -0,0 +1,9 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended", "tslint-config-prettier" + ], + "jsRules": {}, + "rules": {}, + "rulesDirectory": [] +} diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 5cf0fa3..20bd41b 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -1,30 +1,30 @@ import { expect } from "chai"; -import { MssqlDriver } from '../../src/drivers/MssqlDriver' -import * as Sinon from 'sinon' import * as MSSQL from 'mssql' -import { EntityInfo } from '../../src/models/EntityInfo' +import { IColumnMetadata, Table } from "mssql"; +import * as Sinon from 'sinon' +import { MssqlDriver } from '../../src/drivers/MssqlDriver' import { ColumnInfo } from '../../src/models/ColumnInfo' +import { EntityInfo } from '../../src/models/EntityInfo' import { RelationInfo } from '../../src/models/RelationInfo' -import { Table, IColumnMetadata } from "mssql"; import { NamingStrategy } from "../../src/NamingStrategy"; class fakeResponse implements MSSQL.IResult { - recordsets: MSSQL.IRecordSet[]; - recordset: MSSQL.IRecordSet; - rowsAffected: number[]; - output: { [key: string]: any; }; + public recordsets: Array>; + public recordset: MSSQL.IRecordSet; + public rowsAffected: number[]; + public output: { [key: string]: any; }; } class fakeRecordset extends Array implements MSSQL.IRecordSet{ - columns: IColumnMetadata; - toTable(): Table { + public columns: IColumnMetadata; + public toTable(): Table { return new Table(); } } describe('MssqlDriver', function () { let driver: MssqlDriver - let sandbox = Sinon.sandbox.create() + const sandbox = Sinon.sandbox.create() beforeEach(() => { driver = new MssqlDriver(); @@ -40,19 +40,19 @@ describe('MssqlDriver', function () { .returns( { query: (q) => { - let response = new fakeResponse(); + const response = new fakeResponse(); response.recordset = new fakeRecordset(); response.recordset.push({ TABLE_SCHEMA: 'schema', TABLE_NAME: 'name' }) return response; } }) - let result = await driver.GetAllTables('schema') - let expectedResult = []; - let y = new EntityInfo(); + const result = await driver.GetAllTables('schema') + const expectedResult = [] as EntityInfo[]; + const y = new EntityInfo(); y.EntityName = 'name' y.Schema='schema' - y.Columns = []; - y.Indexes = []; + y.Columns = [] as ColumnInfo[]; + y.Indexes = [] as IndexInfo[]; expectedResult.push(y) expect(result).to.be.deep.equal(expectedResult) }) @@ -61,7 +61,7 @@ describe('MssqlDriver', function () { .returns( { query: (q) => { - let response = new fakeResponse(); + const response = new fakeResponse(); response.recordset = new fakeRecordset(); response.recordset.push({ TABLE_NAME: 'name', CHARACTER_MAXIMUM_LENGTH: 0, @@ -73,13 +73,13 @@ describe('MssqlDriver', function () { } }) - let entities = []; - let y = new EntityInfo(); + const entities = [] as EntityInfo[]; + const y = new EntityInfo(); y.EntityName = 'name' - y.Columns = []; - y.Indexes = []; + y.Columns = [] as ColumnInfo[]; + y.Indexes = [] as IndexInfo[]; entities.push(y) - var expected: EntityInfo[] = JSON.parse(JSON.stringify(entities)); + const expected: EntityInfo[] = JSON.parse(JSON.stringify(entities)); expected[0].Columns.push({ lenght: null, default: 'a', @@ -96,9 +96,9 @@ describe('MssqlDriver', function () { enumOptions: null, is_unique:false, is_array:false, - relations: [], + relations: [] as RelationInfo[], }) - let result = await driver.GetCoulmnsFromEntity(entities, 'schema'); + const result = await driver.GetCoulmnsFromEntity(entities, 'schema'); expect(result).to.be.deep.equal(expected) }) it('should find primary indexes') diff --git a/test/integration/entityTypes.test.ts b/test/integration/entityTypes.test.ts index e95fabc..aa3fc63 100644 --- a/test/integration/entityTypes.test.ts +++ b/test/integration/entityTypes.test.ts @@ -1,41 +1,41 @@ require('dotenv').config() -import "reflect-metadata"; +import { expect } from "chai"; import fs = require('fs-extra'); import path = require('path') -import { expect } from "chai"; +import "reflect-metadata"; import { EntityFileToJson } from "../utils/EntityFileToJson"; -var chai = require('chai'); -var chaiSubset = require('chai-subset'); +const chai = require('chai'); +const chaiSubset = require('chai-subset'); import * as ts from "typescript"; -import * as GTU from "../utils/GeneralTestUtils" import { Engine } from "../../src/Engine"; +import * as GTU from "../utils/GeneralTestUtils" chai.use(chaiSubset); describe("Platform specyfic types", async function () { this.timeout(30000) - this.slow(5000)//compiling created models takes time + this.slow(5000)// compiling created models takes time - let dbDrivers: string[] = [] - if (process.env.SQLITE_Skip == '0') dbDrivers.push('sqlite') - if (process.env.POSTGRES_Skip == '0') dbDrivers.push('postgres') - if (process.env.MYSQL_Skip == '0') dbDrivers.push('mysql') - if (process.env.MARIADB_Skip == '0') dbDrivers.push('mariadb') - if (process.env.MSSQL_Skip == '0') dbDrivers.push('mssql') - if (process.env.ORACLE_Skip == '0') dbDrivers.push('oracle') + const dbDrivers: string[] = [] + if (process.env.SQLITE_Skip == '0') { dbDrivers.push('sqlite') } + if (process.env.POSTGRES_Skip == '0') { dbDrivers.push('postgres') } + if (process.env.MYSQL_Skip == '0') { dbDrivers.push('mysql') } + if (process.env.MARIADB_Skip == '0') { dbDrivers.push('mariadb') } + if (process.env.MSSQL_Skip == '0') { dbDrivers.push('mssql') } + if (process.env.ORACLE_Skip == '0') { dbDrivers.push('oracle') } - let examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/entityTypes') - let examplesPathTS = path.resolve(process.cwd(), 'test/integration/entityTypes') - let files = fs.readdirSync(examplesPathTS) + const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/entityTypes') + const examplesPathTS = path.resolve(process.cwd(), 'test/integration/entityTypes') + const files = fs.readdirSync(examplesPathTS) - for (let dbDriver of dbDrivers) { - for (let folder of files) { + for (const dbDriver of dbDrivers) { + for (const folder of files) { if (dbDriver == folder) { it(dbDriver, async function () { - let filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') - let filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') - let resultsPath = path.resolve(process.cwd(), `output`) + const filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') + const filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') + const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) let engine: Engine; @@ -60,27 +60,27 @@ describe("Platform specyfic types", async function () { break; default: console.log(`Unknown engine type`); - engine = {} + engine = {} as Engine break; } await engine.createModelFromDatabase() - let filesGenPath = path.resolve(resultsPath, 'entities') + const filesGenPath = path.resolve(resultsPath, 'entities') - let filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) - let filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) + const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) + const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) - for (let file of filesOrg) { - let entftj = new EntityFileToJson(); - let jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) - let jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) + for (const file of filesOrg) { + const entftj = new EntityFileToJson(); + const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) + const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) } const currentDirectoryFiles = fs.readdirSync(filesGenPath). filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) - let compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { + const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { experimentalDecorators: true, sourceMap: false, emitDecoratorMetadata: true, diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index 03099e5..1b33c4b 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -1,14 +1,14 @@ require('dotenv').config() -import "reflect-metadata"; -import { createConnection, ConnectionOptions, Connection } from "typeorm"; +import { expect } from "chai"; import fs = require('fs-extra'); import path = require('path') -import { Engine } from "../../src/Engine"; -import { expect } from "chai"; +import "reflect-metadata"; import * as Sinon from 'sinon' +import { Connection, ConnectionOptions, createConnection } from "typeorm"; +import { Engine } from "../../src/Engine"; import { EntityFileToJson } from "../utils/EntityFileToJson"; -var chai = require('chai'); -var chaiSubset = require('chai-subset'); +const chai = require('chai'); +const chaiSubset = require('chai-subset'); import * as ts from "typescript"; import * as GTU from "../utils/GeneralTestUtils" @@ -17,29 +17,30 @@ chai.use(chaiSubset); describe("GitHub issues", async function () { this.timeout(30000) - this.slow(5000)//compiling created models takes time + this.slow(5000)// compiling created models takes time - let dbDrivers: string[] = [] - if (process.env.SQLITE_Skip == '0') dbDrivers.push('sqlite') - if (process.env.POSTGRES_Skip == '0') dbDrivers.push('postgres') - if (process.env.MYSQL_Skip == '0') dbDrivers.push('mysql') - if (process.env.MARIADB_Skip == '0') dbDrivers.push('mariadb') - if (process.env.MSSQL_Skip == '0') dbDrivers.push('mssql') - if (process.env.ORACLE_Skip == '0') dbDrivers.push('oracle') + const dbDrivers: string[] = [] + if (process.env.SQLITE_Skip == '0') { dbDrivers.push('sqlite') } + if (process.env.POSTGRES_Skip == '0') { dbDrivers.push('postgres') } + if (process.env.MYSQL_Skip == '0') { dbDrivers.push('mysql') } + if (process.env.MARIADB_Skip == '0') { dbDrivers.push('mariadb') } + if (process.env.MSSQL_Skip == '0') { dbDrivers.push('mssql') } + if (process.env.ORACLE_Skip == '0') { dbDrivers.push('oracle') } - let examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/github-issues') - let examplesPathTS = path.resolve(process.cwd(), 'test/integration/github-issues') - let files = fs.readdirSync(examplesPathTS) + const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/github-issues') + const examplesPathTS = path.resolve(process.cwd(), 'test/integration/github-issues') + const files = fs.readdirSync(examplesPathTS) - for (let folder of files) { + for (const folder of files) { describe(`#${folder}`, async function () { - for (let dbDriver of dbDrivers) { + for (const dbDriver of dbDrivers) { switch (folder) { case '39': - if (dbDriver == 'mysql' || dbDriver == 'mariadb' || dbDriver == 'oracle' || dbDriver == 'sqlite') + if (dbDriver == 'mysql' || dbDriver == 'mariadb' || dbDriver == 'oracle' || dbDriver == 'sqlite') { continue; + } break; default: break; @@ -47,9 +48,9 @@ describe("GitHub issues", async function () { it(dbDriver, async function () { - let filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') - let filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') - let resultsPath = path.resolve(process.cwd(), `output`) + const filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') + const filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') + const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) let engine: Engine; @@ -74,7 +75,7 @@ describe("GitHub issues", async function () { break; default: console.log(`Unknown engine type`); - engine = {} + engine = {} as Engine break; } @@ -87,22 +88,22 @@ describe("GitHub issues", async function () { } await engine.createModelFromDatabase() - let filesGenPath = path.resolve(resultsPath, 'entities') + const filesGenPath = path.resolve(resultsPath, 'entities') - let filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) - let filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) + const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) + const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) - for (let file of filesOrg) { - let entftj = new EntityFileToJson(); - let jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) - let jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) + for (const file of filesOrg) { + const entftj = new EntityFileToJson(); + const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) + const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) } const currentDirectoryFiles = fs.readdirSync(filesGenPath). filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) - let compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { + const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { experimentalDecorators: true, sourceMap: false, emitDecoratorMetadata: true, diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index 5c11403..516d88c 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -1,12 +1,12 @@ require('dotenv').config() -import "reflect-metadata"; +import { expect } from "chai"; import fs = require('fs-extra'); import path = require('path') +import "reflect-metadata"; import { Engine } from "../../src/Engine"; -import { expect } from "chai"; import { EntityFileToJson } from "../utils/EntityFileToJson"; -var chai = require('chai'); -var chaiSubset = require('chai-subset'); +const chai = require('chai'); +const chaiSubset = require('chai-subset'); import * as ts from "typescript"; import * as GTU from "../utils/GeneralTestUtils" @@ -14,27 +14,27 @@ chai.use(chaiSubset); describe("TypeOrm examples", async function () { this.timeout(30000) - this.slow(5000)//compiling created models takes time + this.slow(5000)// compiling created models takes time - let dbDrivers: string[] = [] - if (process.env.SQLITE_Skip == '0') dbDrivers.push('sqlite') - if (process.env.POSTGRES_Skip == '0') dbDrivers.push('postgres') - if (process.env.MYSQL_Skip == '0') dbDrivers.push('mysql') - if (process.env.MARIADB_Skip == '0') dbDrivers.push('mariadb') - if (process.env.MSSQL_Skip == '0') dbDrivers.push('mssql') - if (process.env.ORACLE_Skip == '0') dbDrivers.push('oracle') + const dbDrivers: string[] = [] + if (process.env.SQLITE_Skip == '0') { dbDrivers.push('sqlite') } + if (process.env.POSTGRES_Skip == '0') { dbDrivers.push('postgres') } + if (process.env.MYSQL_Skip == '0') { dbDrivers.push('mysql') } + if (process.env.MARIADB_Skip == '0') { dbDrivers.push('mariadb') } + if (process.env.MSSQL_Skip == '0') { dbDrivers.push('mssql') } + if (process.env.ORACLE_Skip == '0') { dbDrivers.push('oracle') } - let examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/examples') - let examplesPathTS = path.resolve(process.cwd(), 'test/integration/examples') - let files = fs.readdirSync(examplesPathTS) + const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/examples') + const examplesPathTS = path.resolve(process.cwd(), 'test/integration/examples') + const files = fs.readdirSync(examplesPathTS) - for (let folder of files) { + for (const folder of files) { describe(folder, async function () { - for (let dbDriver of dbDrivers) { + for (const dbDriver of dbDrivers) { it(dbDriver, async function () { - let filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') - let filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') - let resultsPath = path.resolve(process.cwd(), `output`) + const filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') + const filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') + const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) let engine: Engine; @@ -59,7 +59,7 @@ describe("TypeOrm examples", async function () { break; default: console.log(`Unknown engine type`); - engine = {} + engine = {} as Engine break; } if (folder == 'sample18-lazy-relations') { @@ -67,22 +67,22 @@ describe("TypeOrm examples", async function () { } await engine.createModelFromDatabase() - let filesGenPath = path.resolve(resultsPath, 'entities') + const filesGenPath = path.resolve(resultsPath, 'entities') - let filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) - let filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) + const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) + const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) - for (let file of filesOrg) { - let entftj = new EntityFileToJson(); - let jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) - let jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) + for (const file of filesOrg) { + const entftj = new EntityFileToJson(); + const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) + const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) } const currentDirectoryFiles = fs.readdirSync(filesGenPath). filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) - let compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { + const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { experimentalDecorators: true, sourceMap: false, emitDecoratorMetadata: true, diff --git a/test/utils/EntityFileToJson.ts b/test/utils/EntityFileToJson.ts index 0a1ac1f..1a88308 100644 --- a/test/utils/EntityFileToJson.ts +++ b/test/utils/EntityFileToJson.ts @@ -1,7 +1,7 @@ export class EntityFileToJson { - getEntityOptions(trimmedLine: string, ent: EntityJson) { - let decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) + public getEntityOptions(trimmedLine: string, ent: EntityJson) { + const decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) if (decoratorParameters.length > 0) { if (decoratorParameters[0] != '"' || !decoratorParameters.endsWith('"')) { let badJSON = decoratorParameters.substring(decoratorParameters.indexOf(',') + 1).trim() @@ -12,9 +12,9 @@ export class EntityFileToJson { } } } - getColumnOptionsAndType(trimmedLine: string, col: EntityColumn) { - let decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) - let primaryGeneratedColumn = trimmedLine.substring(0, trimmedLine.indexOf('('))=='@PrimaryGeneratedColumn' + public getColumnOptionsAndType(trimmedLine: string, col: EntityColumn) { + const decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) + const primaryGeneratedColumn = trimmedLine.substring(0, trimmedLine.indexOf('('))=='@PrimaryGeneratedColumn' if (decoratorParameters.length > 0) { if (decoratorParameters.search(',') > 0 && !primaryGeneratedColumn) { col.columnTypes = decoratorParameters.substring(0, decoratorParameters.indexOf(',')).trim().split('|'); @@ -37,10 +37,10 @@ export class EntityFileToJson { } } } - getRelationOptions(trimmedLine:string, col:EntityColumn){ - let decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) + public getRelationOptions(trimmedLine:string, col:EntityColumn){ + const decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) if (decoratorParameters.length > 0) { - let params = decoratorParameters.match(/(,)(?!([^{]*}))/g) + const params = decoratorParameters.match(/(,)(?!([^{]*}))/g) if ( params && params.length == 2) { let badJSON = decoratorParameters.substring( decoratorParameters.lastIndexOf('{'),decoratorParameters.lastIndexOf('}')+1).trim() if (badJSON.lastIndexOf(',') == badJSON.length - 3) { @@ -50,18 +50,18 @@ export class EntityFileToJson { } } } - getIndexOptions(trimmedLine: string, ind: EntityIndex) { - let decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) + public getIndexOptions(trimmedLine: string, ind: EntityIndex) { + const decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) if (decoratorParameters.length > 0) { - let containsTables = decoratorParameters.search('\\[') > -1 - let containsOptions = decoratorParameters.search('{') > -1 - let containsName = decoratorParameters.search('"') > -1 + const containsTables = decoratorParameters.search('\\[') > -1 + const containsOptions = decoratorParameters.search('{') > -1 + const containsName = decoratorParameters.search('"') > -1 if (containsName) { ind.indexName = decoratorParameters.slice(decoratorParameters.indexOf('"') + 1, decoratorParameters.substr(decoratorParameters.indexOf('"') + 1).indexOf('"')) } if (containsTables) { - let columnsStr = decoratorParameters.slice(decoratorParameters.indexOf('[') + 1, decoratorParameters.indexOf(']')) + const columnsStr = decoratorParameters.slice(decoratorParameters.indexOf('[') + 1, decoratorParameters.indexOf(']')) ind.columnNames.push(...columnsStr.split(',').map((val) => { let colName = '' if (val.search('\\.') > -1) { @@ -73,7 +73,7 @@ export class EntityFileToJson { }).filter(v => v.length > 0)) } if (containsOptions) { - let optionsStr = decoratorParameters.slice(decoratorParameters.indexOf('{') + 1, decoratorParameters.indexOf('}')) + const optionsStr = decoratorParameters.slice(decoratorParameters.indexOf('{') + 1, decoratorParameters.indexOf('}')) optionsStr.split(',').forEach((v) => { if (v.split(':').length - 1 > 0) { switch (optionsStr.split(':')[0].trim()) { @@ -91,23 +91,25 @@ export class EntityFileToJson { } } - convert(entityFile: Buffer): EntityJson { - let retVal = new EntityJson(); + public convert(entityFile: Buffer): EntityJson { + const retVal = new EntityJson(); let isInClassBody = false; let isMultilineStatement = false; let priorPartOfMultilineStatement = ''; - let lines = entityFile.toString().replace('\r', '').split('\n'); - for (let line of lines) { + const lines = entityFile.toString().replace('\r', '').split('\n'); + for (const line of lines) { let trimmedLine = line.trim(); if (trimmedLine.startsWith('//')) { continue; } - if (isMultilineStatement) + if (isMultilineStatement) { trimmedLine = priorPartOfMultilineStatement + ' ' + trimmedLine - if (trimmedLine.length == 0) + } + if (trimmedLine.length == 0) { continue; + } else if (!isInClassBody) { if (trimmedLine.startsWith('import')) { continue; @@ -131,7 +133,7 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let ind = new EntityIndex() + const ind = new EntityIndex() this.getIndexOptions(trimmedLine, ind) retVal.indicies.push(ind); continue; @@ -145,7 +147,7 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let col = new EntityColumn() + const col = new EntityColumn() this.getColumnOptionsAndType(trimmedLine, col) retVal.columns.push(col); continue; @@ -157,9 +159,9 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let col = new EntityColumn() + const col = new EntityColumn() this.getColumnOptionsAndType(trimmedLine, col) - col.columnOptions['primary'] = true + col.columnOptions.primary = true retVal.columns.push(col); continue; } @@ -170,7 +172,7 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let col = new EntityColumn() + const col = new EntityColumn() this.getColumnOptionsAndType(trimmedLine, col) retVal.columns.push(col); continue; @@ -182,10 +184,10 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let col = new EntityColumn() + const col = new EntityColumn() this.getColumnOptionsAndType(trimmedLine, col) - col.columnOptions['primary'] = true - col.columnOptions['generated'] = true + col.columnOptions.primary = true + col.columnOptions.generated = true retVal.columns.push(col); continue; } @@ -196,7 +198,7 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let column = new EntityColumn() + const column = new EntityColumn() retVal.columns.push(column) column.relationType = "ManyToOne" column.isOwnerOfRelation = true; @@ -209,7 +211,7 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let column = new EntityColumn() + const column = new EntityColumn() retVal.columns.push(column) column.relationType = "OneToMany" continue; @@ -221,7 +223,7 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let column = new EntityColumn() + const column = new EntityColumn() retVal.columns.push(column) column.relationType = "ManyToMany" continue; @@ -233,7 +235,7 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let column = new EntityColumn() + const column = new EntityColumn() retVal.columns.push(column) column.relationType = "OneToOne" this.getRelationOptions(trimmedLine,column); @@ -266,7 +268,7 @@ export class EntityFileToJson { continue; } else { isMultilineStatement = false; - let ind = new EntityIndex() + const ind = new EntityIndex() this.getIndexOptions(trimmedLine, ind) retVal.indicies.push(ind); continue; @@ -282,7 +284,7 @@ export class EntityFileToJson { } } else if (trimmedLine.split(':').length - 1 > 0) { retVal.columns[retVal.columns.length - 1].columnName = trimmedLine.split(':')[0].trim(); - //TODO:Should check if null only column is nullable? + // TODO:Should check if null only column is nullable? let colTypes=trimmedLine.split(':')[1].split(';')[0].trim(); if (colTypes.startsWith('Promise<')) { colTypes=colTypes.substring(8,colTypes.length-1) @@ -290,14 +292,15 @@ export class EntityFileToJson { } retVal.columns[retVal.columns.length - 1].columnTypes = colTypes.split('|').map(function (x) { if (x == 'any') { - x = 'string' //for json columns + x = 'string' // for json columns } x = x.trim(); return x; }); - if (!retVal.columns[retVal.columns.length - 1].columnTypes.some( (val) => val == "null" ? true : false)) + if (!retVal.columns[retVal.columns.length - 1].columnTypes.some( (val) => val == "null" ? true : false)) { retVal.columns[retVal.columns.length - 1].columnTypes.push('null') + } if (retVal.indicies.length > 0 && retVal.indicies[retVal.indicies.length - 1].columnNames.length == 0) { retVal.indicies[retVal.indicies.length - 1].columnNames.push(retVal.columns[retVal.columns.length - 1].columnName) } @@ -316,41 +319,43 @@ export class EntityFileToJson { } retVal.columns = retVal.columns.map(col => { - if (col.columnName.endsWith('Id')) + if (col.columnName.endsWith('Id')) { col.columnName = col.columnName.substr(0, col.columnName.length - 2) + } return col; }) retVal.indicies = retVal.indicies.map(ind => { ind.columnNames = ind.columnNames.map(colName => { - if (colName.endsWith('Id')) + if (colName.endsWith('Id')) { colName = colName.substr(0, colName.length - 2) + } return colName; }) return ind; }) return retVal; } - isPartOfMultilineStatement(statement: string) { - let matchStarting = statement.split('(').length+statement.split('{').length - let matchEnding = statement.split(')').length+statement.split('}').length + public isPartOfMultilineStatement(statement: string) { + const matchStarting = statement.split('(').length+statement.split('{').length + const matchEnding = statement.split(')').length+statement.split('}').length return !(matchStarting == matchEnding) } } class EntityJson { - entityName: string - entityOptions: any = {} - columns: EntityColumn[] = []; - indicies: EntityIndex[] = []; + public entityName: string + public entityOptions: any = {} + public columns: EntityColumn[] = [] as EntityColumn[]; + public indicies: EntityIndex[] = [] as EntityIndex[]; } class EntityColumn { - columnName: string - columnTypes: string[] = [] - columnOptions: any = {} - relationType: "OneToOne" | "OneToMany" | "ManyToOne" | "ManyToMany" | "None" = "None" - isOwnerOfRelation: boolean = false; + public columnName: string + public columnTypes: string[] = [] + public columnOptions: any = {} + public relationType: "OneToOne" | "OneToMany" | "ManyToOne" | "ManyToMany" | "None" = "None" + public isOwnerOfRelation: boolean = false; } class EntityIndex { - indexName: string - columnNames: string[] = [] - isUnique: boolean = false + public indexName: string + public columnNames: string[] = [] + public isUnique: boolean = false } diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index f895b76..e3c3c47 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -1,16 +1,16 @@ +import path = require('path') +import { ConnectionOptions, createConnection } from "typeorm"; import * as ts from "typescript"; +import * as yn from "yn" +import { AbstractNamingStrategy } from "../../src/AbstractNamingStrategy"; import { AbstractDriver } from "../../src/drivers/AbstractDriver"; -import { MssqlDriver } from "../../src/drivers/MssqlDriver"; -import { PostgresDriver } from "../../src/drivers/PostgresDriver"; -import { MysqlDriver } from "../../src/drivers/MysqlDriver"; import { MariaDbDriver } from "../../src/drivers/MariaDbDriver"; +import { MssqlDriver } from "../../src/drivers/MssqlDriver"; +import { MysqlDriver } from "../../src/drivers/MysqlDriver"; import { OracleDriver } from "../../src/drivers/OracleDriver"; +import { PostgresDriver } from "../../src/drivers/PostgresDriver"; import { SqliteDriver } from "../../src/drivers/SqliteDriver"; import { Engine } from "../../src/Engine"; -import { createConnection, ConnectionOptions } from "typeorm"; -import * as yn from "yn" -import path = require('path') -import { AbstractNamingStrategy } from "../../src/AbstractNamingStrategy"; import { NamingStrategy } from "../../src/NamingStrategy"; export async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Promise { @@ -19,12 +19,13 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin driver = new MssqlDriver(); await driver.ConnectToServer(`master`, String(process.env.MSSQL_Host), Number(process.env.MSSQL_Port), String(process.env.MSSQL_Username), String(process.env.MSSQL_Password), yn(process.env.MSSQL_SSL)); - if (await driver.CheckIfDBExists(String(process.env.MSSQL_Database))) + if (await driver.CheckIfDBExists(String(process.env.MSSQL_Database))) { await driver.DropDB(String(process.env.MSSQL_Database)); + } await driver.CreateDB(String(process.env.MSSQL_Database)); await driver.DisconnectFromServer(); - let connOpt: ConnectionOptions = { + const connOpt: ConnectionOptions = { database: String(process.env.MSSQL_Database), host: String(process.env.MSSQL_Host), password: String(process.env.MSSQL_Password), @@ -36,7 +37,7 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin entities: [path.resolve(filesOrgPath, '*.js')], } - let schemas = 'dbo,sch1,sch2' + const schemas = 'dbo,sch1,sch2' let conn = await createConnection(connOpt) let queryRunner = conn.createQueryRunner() for (const sch of schemas.split(',')) { @@ -44,13 +45,14 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin } await conn.synchronize(); - if (conn.isConnected) + if (conn.isConnected) { await conn.close() + } - let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); + const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new MssqlDriver(); - let engine = new Engine( + const engine = new Engine( driver, { host: String(process.env.MSSQL_Host), port: Number(process.env.MSSQL_Port), @@ -58,7 +60,7 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin user: String(process.env.MSSQL_Username), password: String(process.env.MSSQL_Password), databaseType: 'mssql', - resultsPath: resultsPath, + resultsPath, schemaName: 'dbo,sch1,sch2', ssl: yn(process.env.MSSQL_SSL), noConfigs: false, @@ -68,7 +70,7 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin propertyVisibility: 'none', lazy: false, constructor: false, - namingStrategy: namingStrategy, + namingStrategy, relationIds: false }); @@ -78,8 +80,9 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin await queryRunner.createSchema(sch, true); } await conn.synchronize(); - if (conn.isConnected) + if (conn.isConnected) { await conn.close() + } return engine; } @@ -89,12 +92,13 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st driver = new PostgresDriver(); await driver.ConnectToServer(`postgres`, String(process.env.POSTGRES_Host), Number(process.env.POSTGRES_Port), String(process.env.POSTGRES_Username), String(process.env.POSTGRES_Password), yn(process.env.POSTGRES_SSL)); - if (await driver.CheckIfDBExists(String(process.env.POSTGRES_Database))) + if (await driver.CheckIfDBExists(String(process.env.POSTGRES_Database))) { await driver.DropDB(String(process.env.POSTGRES_Database)); + } await driver.CreateDB(String(process.env.POSTGRES_Database)); await driver.DisconnectFromServer(); - let connOpt: ConnectionOptions = { + const connOpt: ConnectionOptions = { database: String(process.env.POSTGRES_Database), host: String(process.env.POSTGRES_Host), password: String(process.env.POSTGRES_Password), @@ -106,7 +110,7 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st entities: [path.resolve(filesOrgPath, '*.js')], } - let schemas = 'public,sch1,sch2' + const schemas = 'public,sch1,sch2' let conn = await createConnection(connOpt) let queryRunner = conn.createQueryRunner() for (const sch of schemas.split(',')) { @@ -114,12 +118,13 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st } await conn.synchronize(); - if (conn.isConnected) + if (conn.isConnected) { await conn.close() - let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); + } + const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new PostgresDriver(); - let engine = new Engine( + const engine = new Engine( driver, { host: String(process.env.POSTGRES_Host), port: Number(process.env.POSTGRES_Port), @@ -127,7 +132,7 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st user: String(process.env.POSTGRES_Username), password: String(process.env.POSTGRES_Password), databaseType: 'postgres', - resultsPath: resultsPath, + resultsPath, schemaName: 'public,sch1,sch2', ssl: yn(process.env.POSTGRES_SSL), noConfigs: false, @@ -137,7 +142,7 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st propertyVisibility: 'none', lazy: false, constructor: false, - namingStrategy: namingStrategy, + namingStrategy, relationIds: false }); @@ -147,8 +152,9 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st await queryRunner.createSchema(sch, true); } await conn.synchronize(); - if (conn.isConnected) + if (conn.isConnected) { await conn.close() + } return engine; } @@ -158,12 +164,13 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri driver = new SqliteDriver(); await driver.ConnectToServer(String(process.env.SQLITE_Database), '', 0, '', '', false); - if (await driver.CheckIfDBExists(String(process.env.SQLITE_Database))) + if (await driver.CheckIfDBExists(String(process.env.SQLITE_Database))) { await driver.DropDB(String(process.env.SQLITE_Database)); + } await driver.CreateDB(String(process.env.SQLITE_Database)); await driver.DisconnectFromServer(); - let connOpt: ConnectionOptions = { + const connOpt: ConnectionOptions = { database: String(process.env.SQLITE_Database), type: 'sqlite', dropSchema: true, @@ -175,12 +182,13 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri let queryRunner = conn.createQueryRunner() await conn.synchronize(); - if (conn.isConnected) + if (conn.isConnected) { await conn.close() - let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); + } + const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new SqliteDriver(); - let engine = new Engine( + const engine = new Engine( driver, { host: '', port: 0, @@ -188,7 +196,7 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri user: '', password: '', databaseType: 'sqlite', - resultsPath: resultsPath, + resultsPath, schemaName: '', ssl: false, noConfigs: false, @@ -198,15 +206,16 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri propertyVisibility: 'none', lazy: false, constructor: false, - namingStrategy: namingStrategy, + namingStrategy, relationIds: false }); conn = await createConnection(connOpt) queryRunner = conn.createQueryRunner() await conn.synchronize(); - if (conn.isConnected) + if (conn.isConnected) { await conn.close() + } return engine; } @@ -216,12 +225,13 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin driver = new MysqlDriver(); await driver.ConnectToServer(`mysql`, String(process.env.MYSQL_Host), Number(process.env.MYSQL_Port), String(process.env.MYSQL_Username), String(process.env.MYSQL_Password), yn(process.env.MYSQL_SSL)); - if (await driver.CheckIfDBExists(String(process.env.MYSQL_Database))) + if (await driver.CheckIfDBExists(String(process.env.MYSQL_Database))) { await driver.DropDB(String(process.env.MYSQL_Database)); + } await driver.CreateDB(String(process.env.MYSQL_Database)); await driver.DisconnectFromServer(); - let connOpt: ConnectionOptions = { + const connOpt: ConnectionOptions = { database: String(process.env.MYSQL_Database), host: String(process.env.MYSQL_Host), password: String(process.env.MYSQL_Password), @@ -232,14 +242,15 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin synchronize: true, entities: [path.resolve(filesOrgPath, '*.js')], } - let conn = await createConnection(connOpt) + const conn = await createConnection(connOpt) - if (conn.isConnected) + if (conn.isConnected) { await conn.close() - let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); + } + const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new MysqlDriver(); - let engine = new Engine( + const engine = new Engine( driver, { host: String(process.env.MYSQL_Host), port: Number(process.env.MYSQL_Port), @@ -247,7 +258,7 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin user: String(process.env.MYSQL_Username), password: String(process.env.MYSQL_Password), databaseType: 'mysql', - resultsPath: resultsPath, + resultsPath, schemaName: 'ignored', ssl: yn(process.env.MYSQL_SSL), noConfigs: false, @@ -257,7 +268,7 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin propertyVisibility: 'none', lazy: false, constructor: false, - namingStrategy: namingStrategy, + namingStrategy, relationIds: false }); @@ -268,12 +279,13 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str driver = new MariaDbDriver(); await driver.ConnectToServer(`mysql`, String(process.env.MARIADB_Host), Number(process.env.MARIADB_Port), String(process.env.MARIADB_Username), String(process.env.MARIADB_Password), yn(process.env.MARIADB_SSL)); - if (await driver.CheckIfDBExists(String(process.env.MARIADB_Database))) + if (await driver.CheckIfDBExists(String(process.env.MARIADB_Database))) { await driver.DropDB(String(process.env.MARIADB_Database)); + } await driver.CreateDB(String(process.env.MARIADB_Database)); await driver.DisconnectFromServer(); - let connOpt: ConnectionOptions = { + const connOpt: ConnectionOptions = { database: String(process.env.MARIADB_Database), host: String(process.env.MARIADB_Host), password: String(process.env.MARIADB_Password), @@ -284,14 +296,15 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str synchronize: true, entities: [path.resolve(filesOrgPath, '*.js')], } - let conn = await createConnection(connOpt) + const conn = await createConnection(connOpt) - if (conn.isConnected) + if (conn.isConnected) { await conn.close() - let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); + } + const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new MariaDbDriver(); - let engine = new Engine( + const engine = new Engine( driver, { host: String(process.env.MARIADB_Host), port: Number(process.env.MARIADB_Port), @@ -299,7 +312,7 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str user: String(process.env.MARIADB_Username), password: String(process.env.MARIADB_Password), databaseType: 'mariadb', - resultsPath: resultsPath, + resultsPath, schemaName: 'ignored', ssl: yn(process.env.MARIADB_SSL), noConfigs: false, @@ -309,7 +322,7 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str propertyVisibility: 'none', lazy: false, constructor: false, - namingStrategy: namingStrategy, + namingStrategy, relationIds: false }); @@ -323,12 +336,13 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st driver = new OracleDriver(); await driver.ConnectToServer(String(process.env.ORACLE_Database), String(process.env.ORACLE_Host), Number(process.env.ORACLE_Port), String(process.env.ORACLE_UsernameSys), String(process.env.ORACLE_PasswordSys), yn(process.env.ORACLE_SSL)); - if (await driver.CheckIfDBExists(String(process.env.ORACLE_Username))) + if (await driver.CheckIfDBExists(String(process.env.ORACLE_Username))) { await driver.DropDB(String(process.env.ORACLE_Username)); + } await driver.CreateDB(String(process.env.ORACLE_Username)); await driver.DisconnectFromServer(); - let connOpt: ConnectionOptions = { + const connOpt: ConnectionOptions = { database: String(process.env.ORACLE_Database), sid: String(process.env.ORACLE_Database), host: String(process.env.ORACLE_Host), @@ -339,14 +353,15 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st synchronize: true, entities: [path.resolve(filesOrgPath, '*.js')], } - let conn = await createConnection(connOpt) + const conn = await createConnection(connOpt) - if (conn.isConnected) + if (conn.isConnected) { await conn.close() - let namingStrategy: AbstractNamingStrategy = new NamingStrategy(); + } + const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); driver = new OracleDriver(); - let engine = new Engine( + const engine = new Engine( driver, { host: String(process.env.ORACLE_Host), port: Number(process.env.ORACLE_Port), @@ -354,7 +369,7 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st user: String(process.env.ORACLE_Username), password: String(process.env.ORACLE_Password), databaseType: 'oracle', - resultsPath: resultsPath, + resultsPath, schemaName: String(process.env.ORACLE_Username), ssl: yn(process.env.ORACLE_SSL), noConfigs: false, @@ -364,7 +379,7 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st propertyVisibility: 'none', lazy: false, constructor: false, - namingStrategy: namingStrategy, + namingStrategy, relationIds: false }); @@ -372,16 +387,16 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st } export function compileTsFiles(fileNames: string[], options: ts.CompilerOptions): boolean { - let program = ts.createProgram(fileNames, options); - let emitResult = program.emit(); + const program = ts.createProgram(fileNames, options); + const emitResult = program.emit(); let compileErrors = false; - let preDiagnostics = ts.getPreEmitDiagnostics(program); + const preDiagnostics = ts.getPreEmitDiagnostics(program); - let allDiagnostics = [...preDiagnostics, ...emitResult.diagnostics]; + const allDiagnostics = [...preDiagnostics, ...emitResult.diagnostics]; allDiagnostics.forEach(diagnostic => { - let lineAndCharacter = diagnostic.file!.getLineAndCharacterOfPosition(diagnostic.start!); - let message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'); + const lineAndCharacter = diagnostic.file!.getLineAndCharacterOfPosition(diagnostic.start!); + const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'); console.log(`${diagnostic.file!.fileName} (${lineAndCharacter.line + 1},${lineAndCharacter.character + 1}): ${message}`); compileErrors = true; }); From 721a85a0b9fabf4a91ddcd42f4adb103e7a76b33 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 8 Dec 2018 12:49:57 +0100 Subject: [PATCH 067/130] more code cleaning --- src/Engine.ts | 20 ++-- src/NamingStrategy.ts | 16 ++-- src/drivers/AbstractDriver.ts | 8 +- src/drivers/MssqlDriver.ts | 157 ++++++++++++++++--------------- src/drivers/MysqlDriver.ts | 102 ++++++++++---------- src/drivers/OracleDriver.ts | 96 ++++++++++--------- src/drivers/PostgresDriver.ts | 105 ++++++++++----------- src/drivers/SqliteDriver.ts | 108 +++++++++++---------- src/entity.mst | 22 ++--- src/index.ts | 80 ++++++++-------- src/models/ColumnInfo.ts | 12 +-- src/models/EntityInfo.ts | 4 +- src/models/RelationInfo.ts | 8 +- src/models/RelationTempInfo.ts | 2 +- test/drivers/MssqlDriver.test.ts | 12 +-- 15 files changed, 379 insertions(+), 373 deletions(-) diff --git a/src/Engine.ts b/src/Engine.ts index fefef16..58a8d52 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -10,7 +10,7 @@ import * as TomgUtils from "./Utils"; export class Engine { constructor( private driver: AbstractDriver, - public Options: EngineOptions + public Options: IEngineOptions ) {} public async createModelFromDatabase(): Promise { @@ -88,7 +88,7 @@ export class Engine { }); }); element.GenerateConstructor = this.Options.constructor; - element.Imports.filter(function(elem, index, self) { + element.Imports.filter((elem, index, self) => { return index === self.indexOf(elem); }); let casedFileName = ""; @@ -186,13 +186,13 @@ export class Engine { } }); Handlebars.registerHelper({ - eq: (v1, v2) => v1 === v2, - ne: (v1, v2) => v1 !== v2, - lt: (v1, v2) => v1 < v2, - gt: (v1, v2) => v1 > v2, - lte: (v1, v2) => v1 <= v2, - gte: (v1, v2) => v1 >= v2, and: (v1, v2) => v1 && v2, + eq: (v1, v2) => v1 === v2, + gt: (v1, v2) => v1 > v2, + gte: (v1, v2) => v1 >= v2, + lt: (v1, v2) => v1 < v2, + lte: (v1, v2) => v1 <= v2, + ne: (v1, v2) => v1 !== v2, or: (v1, v2) => v1 || v2 }); } @@ -214,7 +214,7 @@ export class Engine { ); } private createTypeOrmConfig(resultPath) { - if (this.Options.schemaName == "") { + if (this.Options.schemaName === "") { fs.writeFileSync( path.resolve(resultPath, "ormconfig.json"), `[ @@ -258,7 +258,7 @@ export class Engine { } } } -export interface EngineOptions { +export interface IEngineOptions { host: string; port: number; databaseName: string; diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index f22c59a..698f5a6 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -10,7 +10,7 @@ export class NamingStrategy extends AbstractNamingStrategy { ): string { const isRelationToMany = relation.isOneToMany || relation.isManyToMany; const ownerEntity = dbModel.entities.find( - v => v.EntityName == relation.ownerTable + v => v.EntityName === relation.ownerTable )!; let columnName = @@ -25,19 +25,19 @@ export class NamingStrategy extends AbstractNamingStrategy { columnName.toLowerCase().lastIndexOf("id") ); } - if (!isNaN(parseInt(columnName[columnName.length - 1]))) { + if (!isNaN(parseInt(columnName[columnName.length - 1], 10))) { columnName = columnName.substring(0, columnName.length - 1); } - if (!isNaN(parseInt(columnName[columnName.length - 1]))) { + if (!isNaN(parseInt(columnName[columnName.length - 1], 10))) { columnName = columnName.substring(0, columnName.length - 1); } columnName += isRelationToMany ? "s" : ""; if ( - relation.relationType != "ManyToMany" && - columnOldName != columnName + relation.relationType !== "ManyToMany" && + columnOldName !== columnName ) { - if (ownerEntity.Columns.some(v => v.tsName == columnName)) { + if (ownerEntity.Columns.some(v => v.tsName === columnName)) { columnName = columnName + "_"; for (let i = 2; i <= ownerEntity.Columns.length; i++) { columnName = @@ -48,8 +48,8 @@ export class NamingStrategy extends AbstractNamingStrategy { if ( ownerEntity.Columns.every( v => - v.tsName != columnName || - columnName == columnOldName + v.tsName !== columnName || + columnName === columnOldName ) ) { break; diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index c47ff7d..1557341 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -288,7 +288,7 @@ export abstract class AbstractDriver { } public GetRelationsFromRelationTempInfo( - relationsTemp: RelationTempInfo[], + relationsTemp: IRelationTempInfo[], entities: EntityInfo[] ) { relationsTemp.forEach(relationTmp => { @@ -356,9 +356,9 @@ export abstract class AbstractDriver { let isOneToMany: boolean; isOneToMany = false; const index = ownerEntity.Indexes.find( - index => - index.isUnique && - index.columns.some( + ind => + ind.isUnique && + ind.columns.some( col => col.name === ownerColumn!.tsName ) ); diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index c8eb5ba..9bd6b2e 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -1,27 +1,28 @@ -import { AbstractDriver } from "./AbstractDriver"; import * as MSSQL from "mssql"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; +import { AbstractDriver } from "./AbstractDriver"; export class MssqlDriver extends AbstractDriver { - GetAllTablesQuery = async (schema: string) => { + private Connection: MSSQL.ConnectionPool; + public GetAllTablesQuery = async (schema: string) => { const request = new MSSQL.Request(this.Connection); - const response: { + const response: Array<{ TABLE_SCHEMA: string; TABLE_NAME: string; - }[] = (await request.query( + }> = (await request.query( `SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema})` )).recordset; return response; }; - async GetCoulmnsFromEntity( + public async GetCoulmnsFromEntity( entities: EntityInfo[], schema: string ): Promise { const request = new MSSQL.Request(this.Connection); - const response: { + const response: Array<{ TABLE_NAME: string; COLUMN_NAME: string; COLUMN_DEFAULT: string; @@ -32,7 +33,7 @@ export class MssqlDriver extends AbstractDriver { NUMERIC_SCALE: number; IsIdentity: number; IsUnique: number; - }[] = (await request.query(`SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE, + }> = (await request.query(`SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE, DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE, COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') IsIdentity, (SELECT count(*) @@ -52,113 +53,113 @@ export class MssqlDriver extends AbstractDriver { return filterVal.TABLE_NAME == ent.EntityName; }) .forEach(resp => { - let colInfo: ColumnInfo = new ColumnInfo(); + const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; - colInfo.is_nullable = resp.IS_NULLABLE == "YES"; - colInfo.is_generated = resp.IsIdentity == 1; - colInfo.is_unique = resp.IsUnique == 1; + colInfo.isNullable = resp.IS_NULLABLE == "YES"; + colInfo.isGenerated = resp.IsIdentity == 1; + colInfo.isUnique = resp.IsUnique == 1; colInfo.default = resp.COLUMN_DEFAULT; - colInfo.sql_type = resp.DATA_TYPE; + colInfo.sqlType = resp.DATA_TYPE; switch (resp.DATA_TYPE) { case "bigint": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "bit": - colInfo.ts_type = "boolean"; + colInfo.tsType = "boolean"; break; case "decimal": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "int": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "money": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "numeric": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "smallint": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "smallmoney": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "tinyint": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "float": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "real": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "date": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "datetime2": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "datetime": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "datetimeoffset": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "smalldatetime": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "time": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "char": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "text": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "varchar": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "nchar": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "ntext": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "nvarchar": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "binary": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "image": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "varbinary": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "hierarchyid": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "sql_variant": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "timestamp": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "uniqueidentifier": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "xml": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "geometry": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "geography": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; default: TomgUtils.LogError( @@ -173,7 +174,7 @@ export class MssqlDriver extends AbstractDriver { if ( this.ColumnTypesWithPrecision.some( - v => v == colInfo.sql_type + v => v == colInfo.sqlType ) ) { colInfo.numericPrecision = resp.NUMERIC_PRECISION; @@ -181,7 +182,7 @@ export class MssqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v == colInfo.sql_type + v => v == colInfo.sqlType ) ) { colInfo.lenght = @@ -190,23 +191,25 @@ export class MssqlDriver extends AbstractDriver { : null; } - if (colInfo.sql_type) ent.Columns.push(colInfo); + if (colInfo.sqlType) { + ent.Columns.push(colInfo); + } }); }); return entities; } - async GetIndexesFromEntity( + public async GetIndexesFromEntity( entities: EntityInfo[], schema: string ): Promise { const request = new MSSQL.Request(this.Connection); - const response: { + const response: Array<{ TableName: string; IndexName: string; ColumnName: string; is_unique: number; is_primary_key: number; - }[] = (await request.query(`SELECT + }> = (await request.query(`SELECT TableName = t.name, IndexName = ind.name, ColumnName = col.name, @@ -230,8 +233,8 @@ ORDER BY response .filter(filterVal => filterVal.TableName == ent.EntityName) .forEach(resp => { - let indexInfo: IndexInfo = {}; - let indexColumnInfo: IndexColumnInfo = {}; + let indexInfo: IndexInfo = {} as IndexInfo; + const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; if ( ent.Indexes.filter(filterVal => { return filterVal.name == resp.IndexName; @@ -241,7 +244,7 @@ ORDER BY return filterVal.name == resp.IndexName; })[0]; } else { - indexInfo.columns = []; + indexInfo.columns = [] as IndexColumnInfo[]; indexInfo.name = resp.IndexName; indexInfo.isUnique = resp.is_unique == 1; indexInfo.isPrimaryKey = resp.is_primary_key == 1; @@ -254,12 +257,12 @@ ORDER BY return entities; } - async GetRelations( + public async GetRelations( entities: EntityInfo[], schema: string ): Promise { const request = new MSSQL.Request(this.Connection); - const response: { + const response: Array<{ TableWithForeignKey: string; FK_PartNo: number; ForeignKeyColumn: string; @@ -268,7 +271,7 @@ ORDER BY onDelete: "RESTRICT" | "CASCADE" | "SET_NULL" | "NO_ACTION"; onUpdate: "RESTRICT" | "CASCADE" | "SET_NULL" | "NO_ACTION"; object_id: number; - }[] = (await request.query(`select + }> = (await request.query(`select parentTable.name as TableWithForeignKey, fkc.constraint_column_id as FK_PartNo, parentColumn.name as ForeignKeyColumn, @@ -295,13 +298,13 @@ where fk.is_disabled=0 and fk.is_ms_shipped=0 and parentSchema.name in (${schema}) order by TableWithForeignKey, FK_PartNo`)).recordset; - let relationsTemp: RelationTempInfo[] = []; + const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( val => val.object_id == resp.object_id ); if (rels == undefined) { - rels = {}; + rels = {} as IRelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; switch (resp.onDelete) { @@ -340,12 +343,12 @@ order by ); return entities; } - async DisconnectFromServer() { - if (this.Connection) await this.Connection.close(); + public async DisconnectFromServer() { + if (this.Connection) { + await this.Connection.close(); + } } - - private Connection: MSSQL.ConnectionPool; - async ConnectToServer( + public async ConnectToServer( database: string, server: string, port: number, @@ -353,16 +356,16 @@ order by password: string, ssl: boolean ) { - let config: MSSQL.config = { - database: database, - server: server, - port: port, - user: user, - password: password, + const config: MSSQL.config = { + database, options: { - encrypt: ssl, - appName: "typeorm-model-generator" - } + appName: "typeorm-model-generator", + encrypt: ssl + }, + password, + port, + server, + user }; const promise = new Promise((resolve, reject) => { @@ -382,19 +385,19 @@ order by await promise; } - async CreateDB(dbName: string) { + public async CreateDB(dbName: string) { const request = new MSSQL.Request(this.Connection); await request.query(`CREATE DATABASE ${dbName}; `); } - async UseDB(dbName: string) { + public async UseDB(dbName: string) { const request = new MSSQL.Request(this.Connection); await request.query(`USE ${dbName}; `); } - async DropDB(dbName: string) { + public async DropDB(dbName: string) { const request = new MSSQL.Request(this.Connection); await request.query(`DROP DATABASE ${dbName}; `); } - async CheckIfDBExists(dbName: string): Promise { + public async CheckIfDBExists(dbName: string): Promise { const request = new MSSQL.Request(this.Connection); const resp = await request.query( `SELECT name FROM master.sys.databases WHERE name = N'${dbName}' ` diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index c0826c8..7ae30d2 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -47,121 +47,121 @@ export class MysqlDriver extends AbstractDriver { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; - colInfo.is_nullable = resp.IS_NULLABLE === "YES"; - colInfo.is_generated = resp.IsIdentity === 1; - colInfo.is_unique = resp.column_key === "UNI"; + colInfo.isNullable = resp.IS_NULLABLE === "YES"; + colInfo.isGenerated = resp.IsIdentity === 1; + colInfo.isUnique = resp.column_key === "UNI"; colInfo.default = resp.COLUMN_DEFAULT; - colInfo.sql_type = resp.DATA_TYPE; + colInfo.sqlType = resp.DATA_TYPE; switch (resp.DATA_TYPE) { case "int": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "tinyint": if (resp.column_type === "tinyint(1)") { colInfo.width = 1; - colInfo.ts_type = "boolean"; + colInfo.tsType = "boolean"; } else { - colInfo.ts_type = "number"; + colInfo.tsType = "number"; } break; case "smallint": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "mediumint": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "bigint": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "float": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "double": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "decimal": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "date": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "datetime": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "timestamp": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "time": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "year": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "char": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "varchar": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "blob": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "text": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "tinyblob": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "tinytext": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "mediumblob": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "mediumtext": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "longblob": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "longtext": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "enum": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; colInfo.enumOptions = resp.column_type .substring(5, resp.column_type.length - 1) .replace(/\'/gi, '"'); break; case "json": - colInfo.ts_type = "Object"; + colInfo.tsType = "Object"; break; case "binary": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "geometry": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "point": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "linestring": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "polygon": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "multipoint": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "multilinestring": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "multipolygon": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "geometrycollection": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; default: TomgUtils.LogError( @@ -175,7 +175,7 @@ export class MysqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithPrecision.some( - v => v === colInfo.sql_type + v => v === colInfo.sqlType ) ) { colInfo.numericPrecision = resp.NUMERIC_PRECISION; @@ -183,7 +183,7 @@ export class MysqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v === colInfo.sql_type + v => v === colInfo.sqlType ) ) { colInfo.lenght = @@ -194,8 +194,8 @@ export class MysqlDriver extends AbstractDriver { if ( this.ColumnTypesWithWidth.some( v => - v === colInfo.sql_type && - colInfo.ts_type !== "boolean" + v === colInfo.sqlType && + colInfo.tsType !== "boolean" ) ) { colInfo.width = @@ -204,7 +204,7 @@ export class MysqlDriver extends AbstractDriver { : null; } - if (colInfo.sql_type) { + if (colInfo.sqlType) { ent.Columns.push(colInfo); } }); @@ -284,13 +284,13 @@ export class MysqlDriver extends AbstractDriver { TABLE_SCHEMA = SCHEMA() AND CU.REFERENCED_TABLE_NAME IS NOT NULL; `); - const relationsTemp: RelationTempInfo[] = [] as RelationTempInfo[]; + const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( val => val.object_id === resp.object_id ); if (rels === undefined) { - rels = {} as RelationTempInfo; + rels = {} as IRelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; rels.actionOnDelete = @@ -343,20 +343,20 @@ export class MysqlDriver extends AbstractDriver { config = { database, host: server, - port, - user, password, + port, ssl: { rejectUnauthorized: false - } + }, + user }; } else { config = { database, host: server, + password, port, - user, - password + user }; } diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 6cda297..bf9d143 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -42,7 +42,7 @@ export class OracleDriver extends AbstractDriver { DATA_PRECISION: number; DATA_SCALE: number; IDENTITY_COLUMN: string; - IS_UNIQUE: Number; + IS_UNIQUE: number; }> = (await this.Connection .execute(`SELECT utc.TABLE_NAME, utc.COLUMN_NAME, DATA_DEFAULT, NULLABLE, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, IDENTITY_COLUMN, @@ -58,102 +58,102 @@ export class OracleDriver extends AbstractDriver { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; - colInfo.is_nullable = resp.NULLABLE === "Y"; - colInfo.is_generated = resp.IDENTITY_COLUMN === "YES"; + colInfo.isNullable = resp.NULLABLE === "Y"; + colInfo.isGenerated = resp.IDENTITY_COLUMN === "YES"; colInfo.default = !resp.DATA_DEFAULT || resp.DATA_DEFAULT.includes('"') ? null : resp.DATA_DEFAULT; - colInfo.is_unique = resp.IS_UNIQUE > 0; + colInfo.isUnique = resp.IS_UNIQUE > 0; resp.DATA_TYPE = resp.DATA_TYPE.replace(/\([0-9]+\)/g, ""); - colInfo.sql_type = resp.DATA_TYPE.toLowerCase(); + colInfo.sqlType = resp.DATA_TYPE.toLowerCase(); switch (resp.DATA_TYPE.toLowerCase()) { case "char": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "nchar": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "nvarchar2": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "varchar2": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "long": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "raw": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "long raw": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "number": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "numeric": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "float": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "dec": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "decimal": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "integer": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "int": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "smallint": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "real": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "double precision": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "date": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "timestamp": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "timestamp with time zone": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "timestamp with local time zone": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; case "interval year to month": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "interval day to second": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "bfile": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "blob": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "clob": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "nclob": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "rowid": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "urowid": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; default: TomgUtils.LogError( @@ -163,7 +163,7 @@ export class OracleDriver extends AbstractDriver { } if ( this.ColumnTypesWithPrecision.some( - v => v === colInfo.sql_type + v => v === colInfo.sqlType ) ) { colInfo.numericPrecision = resp.DATA_PRECISION; @@ -171,14 +171,14 @@ export class OracleDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v === colInfo.sql_type + v => v === colInfo.sqlType ) ) { colInfo.lenght = resp.DATA_LENGTH > 0 ? resp.DATA_LENGTH : null; } - if (colInfo.sql_type) { + if (colInfo.sqlType) { ent.Columns.push(colInfo); } }); @@ -254,13 +254,13 @@ export class OracleDriver extends AbstractDriver { ORDER BY OWNER_TABLE_NAME ASC, owner.CONSTRAINT_NAME ASC, OWNER_POSITION ASC`)) .rows!; - const relationsTemp: RelationTempInfo[] = [] as RelationTempInfo[]; + const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( val => val.object_id === resp.CONSTRAINT_NAME ); if (rels === undefined) { - rels = {} as RelationTempInfo; + rels = {} as IRelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; rels.actionOnDelete = @@ -296,23 +296,23 @@ export class OracleDriver extends AbstractDriver { let config: any; if (user === String(process.env.ORACLE_UsernameSys)) { config /*Oracle.IConnectionAttributes*/ = { - user, - password, connectString: `${server}:${port}/${database}`, externalAuth: ssl, - privilege: this.Oracle.SYSDBA + password, + privilege: this.Oracle.SYSDBA, + user }; } else { config /*Oracle.IConnectionAttributes*/ = { - user, - password, connectString: `${server}:${port}/${database}`, - externalAuth: ssl + externalAuth: ssl, + password, + user }; } const that = this; const promise = new Promise((resolve, reject) => { - this.Oracle.getConnection(config, function(err, connection) { + this.Oracle.getConnection(config, (err, connection) => { if (!err) { that.Connection = connection; resolve(true); @@ -338,7 +338,9 @@ export class OracleDriver extends AbstractDriver { ); await this.Connection.execute(`GRANT CONNECT TO ${dbName}`); } - public async UseDB(dbName: string) {} + public async UseDB(dbName: string) { + // not supported + } public async DropDB(dbName: string) { await this.Connection.execute(`DROP USER ${dbName} CASCADE`); } diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 4db71f6..b192145 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -1,27 +1,27 @@ -import { AbstractDriver } from "./AbstractDriver"; import * as PG from "pg"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; +import { AbstractDriver } from "./AbstractDriver"; export class PostgresDriver extends AbstractDriver { private Connection: PG.Client; - GetAllTablesQuery = async (schema: string) => { - const response: { + public GetAllTablesQuery = async (schema: string) => { + const response: Array<{ TABLE_SCHEMA: string; TABLE_NAME: string; - }[] = (await this.Connection.query( + }> = (await this.Connection.query( `SELECT table_schema as "TABLE_SCHEMA",table_name as "TABLE_NAME" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND table_schema in (${schema}) ` )).rows; return response; }; - async GetCoulmnsFromEntity( + public async GetCoulmnsFromEntity( entities: EntityInfo[], schema: string ): Promise { - const response: { + const response: Array<{ table_name: string; column_name: string; udt_name: string; @@ -33,7 +33,7 @@ export class PostgresDriver extends AbstractDriver { numeric_scale: number; isidentity: string; isunique: number; - }[] = (await this.Connection + }> = (await this.Connection .query(`SELECT table_name,column_name,udt_name,column_default,is_nullable, data_type,character_maximum_length,numeric_precision,numeric_scale, case when column_default LIKE 'nextval%' then 'YES' else 'NO' end isidentity, @@ -52,13 +52,13 @@ export class PostgresDriver extends AbstractDriver { response .filter(filterVal => filterVal.table_name == ent.EntityName) .forEach(resp => { - let colInfo: ColumnInfo = new ColumnInfo(); + const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.column_name; colInfo.sqlName = resp.column_name; - colInfo.is_nullable = resp.is_nullable == "YES"; - colInfo.is_generated = resp.isidentity == "YES"; - colInfo.is_unique = resp.isunique == 1; - colInfo.default = colInfo.is_generated + colInfo.isNullable = resp.is_nullable == "YES"; + colInfo.isGenerated = resp.isidentity == "YES"; + colInfo.isUnique = resp.isunique == 1; + colInfo.default = colInfo.isGenerated ? null : resp.column_default; @@ -89,19 +89,19 @@ export class PostgresDriver extends AbstractDriver { } return; } - colInfo.sql_type = columnTypes.sql_type; - colInfo.ts_type = columnTypes.ts_type; - colInfo.is_array = columnTypes.is_array; - if (colInfo.is_array) { - colInfo.ts_type = colInfo.ts_type + colInfo.sqlType = columnTypes.sql_type; + colInfo.tsType = columnTypes.ts_type; + colInfo.isArray = columnTypes.is_array; + if (colInfo.isArray) { + colInfo.tsType = colInfo.tsType .split("|") .map(x => x.replace("|", "").trim() + "[]") - .join(" | "); + .join(" | ") as any; } if ( this.ColumnTypesWithPrecision.some( - v => v == colInfo.sql_type + v => v == colInfo.sqlType ) ) { colInfo.numericPrecision = resp.numeric_precision; @@ -109,7 +109,7 @@ export class PostgresDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v == colInfo.sql_type + v => v == colInfo.sqlType ) ) { colInfo.lenght = @@ -119,7 +119,7 @@ export class PostgresDriver extends AbstractDriver { } if ( this.ColumnTypesWithWidth.some( - v => v == colInfo.sql_type + v => v == colInfo.sqlType ) ) { colInfo.width = @@ -127,7 +127,7 @@ export class PostgresDriver extends AbstractDriver { ? resp.character_maximum_length : null; } - if (colInfo.sql_type && colInfo.ts_type) { + if (colInfo.sqlType && colInfo.tsType) { ent.Columns.push(colInfo); } }); @@ -135,8 +135,8 @@ export class PostgresDriver extends AbstractDriver { return entities; } - MatchColumnTypes(data_type: string, udt_name: string) { - let ret: { + public MatchColumnTypes(dataType: string, udtName: string) { + const ret: { ts_type: | "number" | "string" @@ -151,8 +151,8 @@ export class PostgresDriver extends AbstractDriver { sql_type: string | null; is_array: boolean; } = { ts_type: null, sql_type: null, is_array: false }; - ret.sql_type = data_type; - switch (data_type) { + ret.sql_type = dataType; + switch (dataType) { case "int2": ret.ts_type = "number"; break; @@ -338,18 +338,15 @@ export class PostgresDriver extends AbstractDriver { ret.ts_type = "string"; break; case "ARRAY": - const z = this.MatchColumnTypes( - udt_name.substring(1), - udt_name - ); + const z = this.MatchColumnTypes(udtName.substring(1), udtName); ret.ts_type = z.ts_type; ret.sql_type = z.sql_type; ret.is_array = true; break; case "USER-DEFINED": - ret.sql_type = udt_name; + ret.sql_type = udtName; ret.ts_type = "string"; - switch (udt_name) { + switch (udtName) { case "citext": case "hstore": case "geometry": @@ -367,17 +364,17 @@ export class PostgresDriver extends AbstractDriver { } return ret; } - async GetIndexesFromEntity( + public async GetIndexesFromEntity( entities: EntityInfo[], schema: string ): Promise { - const response: { + const response: Array<{ tablename: string; indexname: string; columnname: string; is_unique: number; is_primary_key: number; - }[] = (await this.Connection.query(`SELECT + }> = (await this.Connection.query(`SELECT c.relname AS tablename, i.relname as indexname, f.attname AS columnname, @@ -405,8 +402,8 @@ export class PostgresDriver extends AbstractDriver { response .filter(filterVal => filterVal.tablename == ent.EntityName) .forEach(resp => { - let indexInfo: IndexInfo = {}; - let indexColumnInfo: IndexColumnInfo = {}; + let indexInfo: IndexInfo = {} as IndexInfo; + const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; if ( ent.Indexes.filter( filterVal => filterVal.name == resp.indexname @@ -416,7 +413,7 @@ export class PostgresDriver extends AbstractDriver { filterVal => filterVal.name == resp.indexname )!; } else { - indexInfo.columns = []; + indexInfo.columns = [] as IndexColumnInfo[]; indexInfo.name = resp.indexname; indexInfo.isUnique = resp.is_unique == 1; indexInfo.isPrimaryKey = resp.is_primary_key == 1; @@ -432,11 +429,11 @@ export class PostgresDriver extends AbstractDriver { return entities; } - async GetRelations( + public async GetRelations( entities: EntityInfo[], schema: string ): Promise { - const response: { + const response: Array<{ tablewithforeignkey: string; fk_partno: number; foreignkeycolumn: string; @@ -445,7 +442,7 @@ export class PostgresDriver extends AbstractDriver { ondelete: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; onupdate: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; object_id: string; - }[] = (await this.Connection.query(`SELECT + }> = (await this.Connection.query(`SELECT con.relname AS tablewithforeignkey, att.attnum as fk_partno, att2.attname AS foreignkeycolumn, @@ -483,13 +480,13 @@ export class PostgresDriver extends AbstractDriver { AND att2.attrelid = con.conrelid AND att2.attnum = con.parent and rc.constraint_name= con.conname`)).rows; - let relationsTemp: RelationTempInfo[] = []; + const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( val => val.object_id == resp.object_id ); if (rels == undefined) { - rels = {}; + rels = {} as IRelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; rels.actionOnDelete = @@ -510,7 +507,7 @@ export class PostgresDriver extends AbstractDriver { ); return entities; } - async DisconnectFromServer() { + public async DisconnectFromServer() { if (this.Connection) { const promise = new Promise((resolve, reject) => { this.Connection.end(err => { @@ -530,7 +527,7 @@ export class PostgresDriver extends AbstractDriver { } } - async ConnectToServer( + public async ConnectToServer( database: string, server: string, port: number, @@ -539,12 +536,12 @@ export class PostgresDriver extends AbstractDriver { ssl: boolean ) { this.Connection = new PG.Client({ - database: database, + database, host: server, - port: port, - user: user, - password: password, - ssl: ssl + password, + port, + ssl, + user }); const promise = new Promise((resolve, reject) => { @@ -565,16 +562,16 @@ export class PostgresDriver extends AbstractDriver { await promise; } - async CreateDB(dbName: string) { + public async CreateDB(dbName: string) { await this.Connection.query(`CREATE DATABASE ${dbName}; `); } - async UseDB(dbName: string) { + public async UseDB(dbName: string) { await this.Connection.query(`USE ${dbName}; `); } - async DropDB(dbName: string) { + public async DropDB(dbName: string) { await this.Connection.query(`DROP DATABASE ${dbName}; `); } - async CheckIfDBExists(dbName: string): Promise { + public async CheckIfDBExists(dbName: string): Promise { const resp = await this.Connection.query( `SELECT datname FROM pg_database WHERE datname ='${dbName}' ` ); diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index ec64f3d..530c869 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -6,7 +6,7 @@ import { AbstractDriver } from "./AbstractDriver"; export class SqliteDriver extends AbstractDriver { public sqlite = require("sqlite3").verbose(); public db: any; - public tablesWithGeneratedPrimaryKey: String[] = new Array(); + public tablesWithGeneratedPrimaryKey: string[] = new Array(); public GetAllTablesQuery: any; public async GetAllTables(schema: string): Promise { @@ -43,103 +43,103 @@ export class SqliteDriver extends AbstractDriver { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.name; colInfo.sqlName = resp.name; - colInfo.is_nullable = resp.notnull == 0; + colInfo.isNullable = resp.notnull === 0; colInfo.isPrimary = resp.pk > 0; colInfo.default = resp.dflt_value ? resp.dflt_value : null; - colInfo.sql_type = resp.type + colInfo.sqlType = resp.type .replace(/\([0-9 ,]+\)/g, "") .toLowerCase() .trim(); - colInfo.is_generated = + colInfo.isGenerated = colInfo.isPrimary && this.tablesWithGeneratedPrimaryKey.includes(ent.EntityName); - switch (colInfo.sql_type) { + switch (colInfo.sqlType) { case "int": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "integer": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "int2": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "int8": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "tinyint": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "smallint": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "mediumint": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "bigint": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "unsigned big int": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "character": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "varchar": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "varying character": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "nchar": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "native character": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "nvarchar": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "text": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "blob": - colInfo.ts_type = "Buffer"; + colInfo.tsType = "Buffer"; break; case "clob": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "real": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "double": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "double precision": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "float": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "numeric": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "decimal": - colInfo.ts_type = "number"; + colInfo.tsType = "number"; break; case "boolean": - colInfo.ts_type = "boolean"; + colInfo.tsType = "boolean"; break; case "date": - colInfo.ts_type = "string"; + colInfo.tsType = "string"; break; case "datetime": - colInfo.ts_type = "Date"; + colInfo.tsType = "Date"; break; default: - console.log(colInfo.sql_type.toLowerCase().trim()); + console.log(colInfo.sqlType.toLowerCase().trim()); TomgUtils.LogError( `Unknown column type: ${ - colInfo.sql_type + colInfo.sqlType } table name: ${ent.EntityName} column name: ${ resp.name }` @@ -149,7 +149,7 @@ export class SqliteDriver extends AbstractDriver { const options = resp.type.match(/\([0-9 ,]+\)/g); if ( this.ColumnTypesWithPrecision.some( - v => v == colInfo.sql_type + v => v === colInfo.sqlType ) && options ) { @@ -162,7 +162,7 @@ export class SqliteDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v == colInfo.sql_type + v => v === colInfo.sqlType ) && options ) { @@ -174,8 +174,8 @@ export class SqliteDriver extends AbstractDriver { if ( this.ColumnTypesWithWidth.some( v => - v == colInfo.sql_type && - colInfo.ts_type != "boolean" + v === colInfo.sqlType && + colInfo.tsType !== "boolean" ) && options ) { @@ -185,7 +185,7 @@ export class SqliteDriver extends AbstractDriver { ) as any; } - if (colInfo.sql_type) { + if (colInfo.sqlType) { ent.Columns.push(colInfo); } }); @@ -216,26 +216,26 @@ export class SqliteDriver extends AbstractDriver { const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; if ( ent.Indexes.filter(filterVal => { - return filterVal.name == resp.name; + return filterVal.name === resp.name; }).length > 0 ) { indexInfo = ent.Indexes.find( - filterVal => filterVal.name == resp.name + filterVal => filterVal.name === resp.name )!; } else { indexInfo.columns = [] as IndexColumnInfo[]; indexInfo.name = resp.name; - indexInfo.isUnique = resp.unique == 1; + indexInfo.isUnique = resp.unique === 1; ent.Indexes.push(indexInfo); } indexColumnInfo.name = element.name; if ( - indexColumnsResponse.length == 1 && + indexColumnsResponse.length === 1 && indexInfo.isUnique ) { ent.Columns.filter( - v => v.tsName == indexColumnInfo.name - ).map(v => (v.is_unique = true)); + v => v.tsName === indexColumnInfo.name + ).map(v => (v.isUnique = true)); } indexInfo.columns.push(indexColumnInfo); }); @@ -259,15 +259,15 @@ export class SqliteDriver extends AbstractDriver { on_delete: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; match: string; }>(`PRAGMA foreign_key_list('${entity.EntityName}');`); - const relationsTemp: RelationTempInfo[] = [] as RelationTempInfo[]; + const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { - const rels = {} as RelationTempInfo; + const rels = {} as IRelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; rels.actionOnDelete = - resp.on_delete == "NO ACTION" ? null : resp.on_delete; + resp.on_delete === "NO ACTION" ? null : resp.on_delete; rels.actionOnUpdate = - resp.on_update == "NO ACTION" ? null : resp.on_update; + resp.on_update === "NO ACTION" ? null : resp.on_update; rels.ownerTable = entity.EntityName; rels.referencedTable = resp.table; relationsTemp.push(rels); @@ -296,7 +296,9 @@ export class SqliteDriver extends AbstractDriver { await this.UseDB(database); } - public async CreateDB(dbName: string) {} + public async CreateDB(dbName: string) { + // not supported + } public async UseDB(dbName: string) { const promise = new Promise((resolve, reject) => { this.db = new this.sqlite.Database(dbName, err => { @@ -310,7 +312,9 @@ export class SqliteDriver extends AbstractDriver { }); return promise; } - public async DropDB(dbName: string) {} + public async DropDB(dbName: string) { + // not supported + } public async CheckIfDBExists(dbName: string): Promise { return true; } @@ -319,7 +323,7 @@ export class SqliteDriver extends AbstractDriver { let ret: any; const promise = new Promise((resolve, reject) => { this.db.serialize(() => { - this.db.all(sql, [], function(err, row) { + this.db.all(sql, [], (err, row) => { if (!err) { ret = row; resolve(true); diff --git a/src/entity.mst b/src/entity.mst index 6834464..0dd8ee7 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -8,24 +8,24 @@ import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, O {{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}} { {{#Columns}} - {{^relations}}{{#is_generated}} @PrimaryGeneratedColumn({ - type:"{{sql_type}}", {{/is_generated}}{{^is_generated}} @Column("{{sql_type}}",{ {{#is_nullable}} - nullable:true,{{/is_nullable}}{{^is_nullable}} - nullable:false,{{/is_nullable}}{{#isPrimary}} - primary:{{isPrimary}},{{/isPrimary}}{{/is_generated}}{{#is_unique}} - unique: true,{{/is_unique}}{{#lenght}} + {{^relations}}{{#isGenerated}} @PrimaryGeneratedColumn({ + type:"{{sqlType}}", {{/isGenerated}}{{^isGenerated}} @Column("{{sqlType}}",{ {{#isNullable}} + nullable:true,{{/isNullable}}{{^isNullable}} + nullable:false,{{/isNullable}}{{#isPrimary}} + primary:{{isPrimary}},{{/isPrimary}}{{/isGenerated}}{{#isUnique}} + unique: true,{{/isUnique}}{{#lenght}} length:{{.}},{{/lenght}}{{#width}} width:{{.}},{{/width}}{{#default}} default:"{{.}}",{{/default}}{{#numericPrecision}} precision:{{.}},{{/numericPrecision}}{{#numericScale}} scale:{{.}},{{/numericScale}}{{#enumOptions}} - enum:[{{.}}],{{/enumOptions}}{{#is_array}} - array:{{is_array}},{{/is_array}} + enum:[{{.}}],{{/enumOptions}}{{#isArray}} + array:{{isArray}},{{/isArray}} name:"{{sqlName}}" }) - {{printPropertyVisibility}}{{toPropertyName tsName}}:{{ts_type}}{{#is_nullable}} | null{{/is_nullable}}; + {{printPropertyVisibility}}{{toPropertyName tsName}}:{{tsType}}{{#isNullable}} | null{{/isNullable}}; {{/relations}}{{#relations}} - @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../is_nullable}} nullable:false,{{/../is_nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} + @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../isNullable}} nullable:false,{{/../isNullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; {{else}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; @@ -33,7 +33,7 @@ import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, O {{#if relationIdField }} @RelationId(({{../../EntityName}}: {{../../EntityName}}) => {{../../EntityName}}.{{toPropertyName ../tsName}}) - {{toPropertyName ../tsName}}Id: {{#if isOneToOne}}{{toLazy ../ts_type}}{{else}}{{toLazy (concat ../ts_type "[]")}}{{/if}};{{/if}}{{/relations}} + {{toPropertyName ../tsName}}Id: {{#if isOneToOne}}{{toLazy ../tsType}}{{else}}{{toLazy (concat ../tsType "[]")}}{{/if}};{{/if}}{{/relations}} {{/Columns}} {{#if GenerateConstructor}} constructor(init?: Partial<{{toEntityName EntityName}}>) { diff --git a/src/index.ts b/src/index.ts index a4a2a4e..dbad34a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,13 +17,13 @@ const argv = Yargs.usage( ) .option("h", { alias: "host", - describe: "IP adress/Hostname for database server", - default: "127.0.0.1" + default: "127.0.0.1", + describe: "IP adress/Hostname for database server" }) .option("d", { alias: "database", - describe: "Database name(or path for sqlite)", - demand: true + demand: true, + describe: "Database name(or path for sqlite)" }) .option("u", { alias: "user", @@ -31,8 +31,8 @@ const argv = Yargs.usage( }) .option("x", { alias: "pass", - describe: "Password for database server", - default: "" + default: "", + describe: "Password for database server" }) .option("p", { alias: "port", @@ -40,14 +40,14 @@ const argv = Yargs.usage( }) .option("e", { alias: "engine", - describe: "Database engine", choices: ["mssql", "postgres", "mysql", "mariadb", "oracle", "sqlite"], - default: "mssql" + default: "mssql", + describe: "Database engine" }) .option("o", { alias: "output", - describe: "Where to place generated models", - default: path.resolve(process.cwd(), "output") + default: path.resolve(process.cwd(), "output"), + describe: "Where to place generated models" }) .option("s", { alias: "schema", @@ -60,50 +60,50 @@ const argv = Yargs.usage( }) .option("noConfig", { boolean: true, - describe: `Doesn't create tsconfig.json and ormconfig.json`, - default: false + default: false, + describe: `Doesn't create tsconfig.json and ormconfig.json` }) .option("cf", { alias: "case-file", - describe: "Convert file names to specified case", choices: ["pascal", "param", "camel", "none"], - default: "none" + default: "none", + describe: "Convert file names to specified case" }) .option("ce", { alias: "case-entity", - describe: "Convert class names to specified case", choices: ["pascal", "camel", "none"], - default: "none" + default: "none", + describe: "Convert class names to specified case" }) .option("cp", { alias: "case-property", - describe: "Convert property names to specified case", choices: ["pascal", "camel", "none"], - default: "none" + default: "none", + describe: "Convert property names to specified case" }) .option("pv", { alias: "property-visibility", - describe: "Defines which visibility should have the generated property", choices: ["public", "protected", "private", "none"], - default: "none" + default: "none", + describe: "Defines which visibility should have the generated property" }) .option("lazy", { - describe: "Generate lazy relations", boolean: true, - default: false + default: false, + describe: "Generate lazy relations" }) .option("namingStrategy", { describe: "Use custom naming strategy" }) .option("relationIds", { - describe: "Generate RelationId fields", boolean: true, - default: false + default: false, + describe: "Generate RelationId fields" }) .option("generateConstructor", { - describe: "Generate constructor allowing partial initialization", boolean: true, - default: false + default: false, + describe: "Generate constructor allowing partial initialization" }).argv; let driver: AbstractDriver; @@ -147,7 +147,7 @@ switch (argv.e) { throw new Error("Database engine not recognized."); } let namingStrategy: AbstractNamingStrategy; -if (argv.namingStrategy && argv.namingStrategy != "") { +if (argv.namingStrategy && argv.namingStrategy !== "") { const req = require(argv.namingStrategy); namingStrategy = new req.NamingStrategy(); } else { @@ -155,24 +155,24 @@ if (argv.namingStrategy && argv.namingStrategy != "") { } const engine = new Engine(driver, { - host: argv.h, - port: parseInt(argv.p) || standardPort, + constructor: argv.generateConstructor, + convertCaseEntity: argv.ce, + convertCaseFile: argv.cf, + convertCaseProperty: argv.cp, databaseName: argv.d ? argv.d.toString() : null, - user: argv.u ? argv.u.toString() : standardUser, - password: argv.x ? argv.x.toString() : null, databaseType: argv.e, + host: argv.h, + lazy: argv.lazy, + namingStrategy, + noConfigs: argv.noConfig, + password: argv.x ? argv.x.toString() : null, + port: parseInt(argv.p, 10) || standardPort, + propertyVisibility: argv.pv, + relationIds: argv.relationIds, resultsPath: argv.o ? argv.o.toString() : null, schemaName: argv.s ? argv.s.toString() : standardSchema, ssl: argv.ssl, - noConfigs: argv.noConfig, - convertCaseFile: argv.cf, - convertCaseEntity: argv.ce, - convertCaseProperty: argv.cp, - propertyVisibility: argv.pv, - lazy: argv.lazy, - constructor: argv.generateConstructor, - relationIds: argv.relationIds, - namingStrategy + user: argv.u ? argv.u.toString() : standardUser }); console.log(TomgUtils.packageVersion()); diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index 44964bb..8cdaea3 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -4,9 +4,9 @@ export class ColumnInfo { public tsName: string = ""; public sqlName: string = ""; public default: string | null = null; - public is_nullable: boolean = false; - public is_unique: boolean = false; - public ts_type: + public isNullable: boolean = false; + public isUnique: boolean = false; + public tsType: | "number" | "string" | "boolean" @@ -16,12 +16,12 @@ export class ColumnInfo { | "string | Object" | "string | string[]" | "any"; - public sql_type: string; + public sqlType: string; public lenght: number | null = null; public width: number | null = null; public isPrimary: boolean = false; - public is_generated: boolean = false; - public is_array: boolean = false; + public isGenerated: boolean = false; + public isArray: boolean = false; public numericPrecision: number | null = null; public numericScale: number | null = null; public enumOptions: string | null = null; diff --git a/src/models/EntityInfo.ts b/src/models/EntityInfo.ts index 286d107..82d90ed 100644 --- a/src/models/EntityInfo.ts +++ b/src/models/EntityInfo.ts @@ -13,13 +13,13 @@ export class EntityInfo { const imports: string[] = []; this.Columns.forEach(column => { column.relations.forEach(relation => { - if (this.EntityName != relation.relatedTable) { + if (this.EntityName !== relation.relatedTable) { imports.push(relation.relatedTable); } }); }); this.UniqueImports = imports.filter( - (elem, index, self) => index == self.indexOf(elem) + (elem, index, self) => index === self.indexOf(elem) ); } } diff --git a/src/models/RelationInfo.ts b/src/models/RelationInfo.ts index 5ec6336..6dd8b3c 100644 --- a/src/models/RelationInfo.ts +++ b/src/models/RelationInfo.ts @@ -21,15 +21,15 @@ export class RelationInfo { public relationIdField: boolean = false; get isOneToMany(): boolean { - return this.relationType == "OneToMany"; + return this.relationType === "OneToMany"; } get isManyToMany(): boolean { - return this.relationType == "ManyToMany"; + return this.relationType === "ManyToMany"; } get isOneToOne(): boolean { - return this.relationType == "OneToOne"; + return this.relationType === "OneToOne"; } get isManyToOne(): boolean { - return this.relationType == "ManyToOne"; + return this.relationType === "ManyToOne"; } } diff --git a/src/models/RelationTempInfo.ts b/src/models/RelationTempInfo.ts index 0081955..1c4f8d8 100644 --- a/src/models/RelationTempInfo.ts +++ b/src/models/RelationTempInfo.ts @@ -1,4 +1,4 @@ -interface RelationTempInfo { +interface IRelationTempInfo { ownerTable: string; ownerColumnsNames: string[]; referencedTable: string; diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 20bd41b..8ddb9c1 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -83,19 +83,19 @@ describe('MssqlDriver', function () { expected[0].Columns.push({ lenght: null, default: 'a', - is_nullable: true, + isNullable: true, isPrimary: false, - is_generated: true, + isGenerated: true, tsName: 'name', sqlName: 'name', numericPrecision: null, numericScale: null, width: null, - sql_type: 'int', - ts_type: 'number', + sqlType: 'int', + tsType: 'number', enumOptions: null, - is_unique:false, - is_array:false, + isUnique:false, + isArray:false, relations: [] as RelationInfo[], }) const result = await driver.GetCoulmnsFromEntity(entities, 'schema'); From d5faa8b9c379d36c638c68ff96ccacfe7101d978 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 8 Dec 2018 18:58:16 +0100 Subject: [PATCH 068/130] more cleaning up --- src/drivers/MssqlDriver.ts | 30 +++++++++++----------- src/drivers/PostgresDriver.ts | 48 +++++++++++++++++------------------ src/drivers/SqliteDriver.ts | 7 +++-- src/index.ts | 1 + src/tslint.json | 4 ++- 5 files changed, 48 insertions(+), 42 deletions(-) diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 9bd6b2e..3b9b4fe 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -50,15 +50,15 @@ export class MssqlDriver extends AbstractDriver { entities.forEach(ent => { response .filter(filterVal => { - return filterVal.TABLE_NAME == ent.EntityName; + return filterVal.TABLE_NAME === ent.EntityName; }) .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; colInfo.sqlName = resp.COLUMN_NAME; - colInfo.isNullable = resp.IS_NULLABLE == "YES"; - colInfo.isGenerated = resp.IsIdentity == 1; - colInfo.isUnique = resp.IsUnique == 1; + colInfo.isNullable = resp.IS_NULLABLE === "YES"; + colInfo.isGenerated = resp.IsIdentity === 1; + colInfo.isUnique = resp.IsUnique === 1; colInfo.default = resp.COLUMN_DEFAULT; colInfo.sqlType = resp.DATA_TYPE; switch (resp.DATA_TYPE) { @@ -174,7 +174,7 @@ export class MssqlDriver extends AbstractDriver { if ( this.ColumnTypesWithPrecision.some( - v => v == colInfo.sqlType + v => v === colInfo.sqlType ) ) { colInfo.numericPrecision = resp.NUMERIC_PRECISION; @@ -182,7 +182,7 @@ export class MssqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v == colInfo.sqlType + v => v === colInfo.sqlType ) ) { colInfo.lenght = @@ -207,8 +207,8 @@ export class MssqlDriver extends AbstractDriver { TableName: string; IndexName: string; ColumnName: string; - is_unique: number; - is_primary_key: number; + is_unique: boolean; + is_primary_key: boolean; }> = (await request.query(`SELECT TableName = t.name, IndexName = ind.name, @@ -231,23 +231,23 @@ ORDER BY t.name, ind.name, ind.index_id, ic.key_ordinal;`)).recordset; entities.forEach(ent => { response - .filter(filterVal => filterVal.TableName == ent.EntityName) + .filter(filterVal => filterVal.TableName === ent.EntityName) .forEach(resp => { let indexInfo: IndexInfo = {} as IndexInfo; const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; if ( ent.Indexes.filter(filterVal => { - return filterVal.name == resp.IndexName; + return filterVal.name === resp.IndexName; }).length > 0 ) { indexInfo = ent.Indexes.filter(filterVal => { - return filterVal.name == resp.IndexName; + return filterVal.name === resp.IndexName; })[0]; } else { indexInfo.columns = [] as IndexColumnInfo[]; indexInfo.name = resp.IndexName; - indexInfo.isUnique = resp.is_unique == 1; - indexInfo.isPrimaryKey = resp.is_primary_key == 1; + indexInfo.isUnique = resp.is_unique; + indexInfo.isPrimaryKey = resp.is_primary_key; ent.Indexes.push(indexInfo); } indexColumnInfo.name = resp.ColumnName; @@ -301,9 +301,9 @@ order by const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( - val => val.object_id == resp.object_id + val => val.object_id === resp.object_id ); - if (rels == undefined) { + if (rels === undefined) { rels = {} as IRelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index b192145..164d788 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -32,7 +32,7 @@ export class PostgresDriver extends AbstractDriver { numeric_precision: number; numeric_scale: number; isidentity: string; - isunique: number; + isunique: string; }> = (await this.Connection .query(`SELECT table_name,column_name,udt_name,column_default,is_nullable, data_type,character_maximum_length,numeric_precision,numeric_scale, @@ -50,14 +50,14 @@ export class PostgresDriver extends AbstractDriver { .rows; entities.forEach(ent => { response - .filter(filterVal => filterVal.table_name == ent.EntityName) + .filter(filterVal => filterVal.table_name === ent.EntityName) .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.column_name; colInfo.sqlName = resp.column_name; - colInfo.isNullable = resp.is_nullable == "YES"; - colInfo.isGenerated = resp.isidentity == "YES"; - colInfo.isUnique = resp.isunique == 1; + colInfo.isNullable = resp.is_nullable === "YES"; + colInfo.isGenerated = resp.isidentity === "YES"; + colInfo.isUnique = resp.isunique === "1"; colInfo.default = colInfo.isGenerated ? null : resp.column_default; @@ -68,8 +68,8 @@ export class PostgresDriver extends AbstractDriver { ); if (!columnTypes.sql_type || !columnTypes.ts_type) { if ( - resp.data_type == "USER-DEFINED" || - resp.data_type == "ARRAY" + resp.data_type === "USER-DEFINED" || + resp.data_type === "ARRAY" ) { TomgUtils.LogError( `Unknown ${resp.data_type} column type: ${ @@ -101,7 +101,7 @@ export class PostgresDriver extends AbstractDriver { if ( this.ColumnTypesWithPrecision.some( - v => v == colInfo.sqlType + v => v === colInfo.sqlType ) ) { colInfo.numericPrecision = resp.numeric_precision; @@ -109,7 +109,7 @@ export class PostgresDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v == colInfo.sqlType + v => v === colInfo.sqlType ) ) { colInfo.lenght = @@ -119,7 +119,7 @@ export class PostgresDriver extends AbstractDriver { } if ( this.ColumnTypesWithWidth.some( - v => v == colInfo.sqlType + v => v === colInfo.sqlType ) ) { colInfo.width = @@ -379,12 +379,12 @@ export class PostgresDriver extends AbstractDriver { i.relname as indexname, f.attname AS columnname, CASE - WHEN ix.indisunique = true THEN '1' - ELSE '0' + WHEN ix.indisunique = true THEN 1 + ELSE 0 END AS is_unique, CASE - WHEN ix.indisprimary='true' THEN '1' - ELSE '0' + WHEN ix.indisprimary='true' THEN 1 + ELSE 0 END AS is_primary_key FROM pg_attribute f JOIN pg_class c ON c.oid = f.attrelid @@ -400,27 +400,27 @@ export class PostgresDriver extends AbstractDriver { ORDER BY c.relname,f.attname;`)).rows; entities.forEach(ent => { response - .filter(filterVal => filterVal.tablename == ent.EntityName) + .filter(filterVal => filterVal.tablename === ent.EntityName) .forEach(resp => { let indexInfo: IndexInfo = {} as IndexInfo; const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; if ( ent.Indexes.filter( - filterVal => filterVal.name == resp.indexname + filterVal => filterVal.name === resp.indexname ).length > 0 ) { indexInfo = ent.Indexes.find( - filterVal => filterVal.name == resp.indexname + filterVal => filterVal.name === resp.indexname )!; } else { indexInfo.columns = [] as IndexColumnInfo[]; indexInfo.name = resp.indexname; - indexInfo.isUnique = resp.is_unique == 1; - indexInfo.isPrimaryKey = resp.is_primary_key == 1; + indexInfo.isUnique = resp.is_unique === 1; + indexInfo.isPrimaryKey = resp.is_primary_key === 1; ent.Indexes.push(indexInfo); } indexColumnInfo.name = resp.columnname; - if (resp.is_primary_key == 0) { + if (resp.is_primary_key === 0) { indexInfo.isPrimaryKey = false; } indexInfo.columns.push(indexColumnInfo); @@ -483,16 +483,16 @@ export class PostgresDriver extends AbstractDriver { const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( - val => val.object_id == resp.object_id + val => val.object_id === resp.object_id ); - if (rels == undefined) { + if (rels === undefined) { rels = {} as IRelationTempInfo; rels.ownerColumnsNames = []; rels.referencedColumnsNames = []; rels.actionOnDelete = - resp.ondelete == "NO ACTION" ? null : resp.ondelete; + resp.ondelete === "NO ACTION" ? null : resp.ondelete; rels.actionOnUpdate = - resp.onupdate == "NO ACTION" ? null : resp.onupdate; + resp.onupdate === "NO ACTION" ? null : resp.onupdate; rels.object_id = resp.object_id; rels.ownerTable = resp.tablewithforeignkey; rels.referencedTable = resp.tablereferenced; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 530c869..5e1cfc1 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -136,7 +136,6 @@ export class SqliteDriver extends AbstractDriver { colInfo.tsType = "Date"; break; default: - console.log(colInfo.sqlType.toLowerCase().trim()); TomgUtils.LogError( `Unknown column type: ${ colInfo.sqlType @@ -303,7 +302,11 @@ export class SqliteDriver extends AbstractDriver { const promise = new Promise((resolve, reject) => { this.db = new this.sqlite.Database(dbName, err => { if (err) { - console.error(err.message); + TomgUtils.LogError( + "Error connecting to SQLite database.", + false, + err.message + ); reject(err); return; } diff --git a/src/index.ts b/src/index.ts index dbad34a..6e36e54 100644 --- a/src/index.ts +++ b/src/index.ts @@ -148,6 +148,7 @@ switch (argv.e) { } let namingStrategy: AbstractNamingStrategy; if (argv.namingStrategy && argv.namingStrategy !== "") { + // tslint:disable-next-line:no-var-requires const req = require(argv.namingStrategy); namingStrategy = new req.NamingStrategy(); } else { diff --git a/src/tslint.json b/src/tslint.json index b48b355..bd2c46b 100644 --- a/src/tslint.json +++ b/src/tslint.json @@ -4,6 +4,8 @@ "tslint:recommended", "tslint-config-prettier" ], "jsRules": {}, - "rules": {}, + "rules": { + "no-console":false + }, "rulesDirectory": [] } From 1d1aff79015a862730c81bebd9201a2ab2ed324c Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 16 Dec 2018 21:09:13 +0100 Subject: [PATCH 069/130] changelog changes --- CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8da42a..69086b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,9 @@ # Changelog -## 0.2.24 -* Allow to define property visibility, by using --pv - ## 0.2.23 * added column type to generated `@PrimaryGeneratedColumn` decorator +* allow to define property visibility, by using --pv +* fixes some problems with duplicated relationships on mysql database ## 0.2.22 * fixed naming stategy for guid ended column names From 62c931883360c26c2b82ecfae90cd867b0c4f7c6 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 16 Dec 2018 21:11:43 +0100 Subject: [PATCH 070/130] 0.2.23 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index c293e85..be9b269 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.22", + "version": "0.2.23", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index aef97b4..c6d6ef5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.22", + "version": "0.2.23", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From f66ee271b51792fe895c437e57d4cb8add8a0f15 Mon Sep 17 00:00:00 2001 From: Jared Malcolm Date: Wed, 19 Dec 2018 10:25:49 -0600 Subject: [PATCH 071/130] Add flag to models that use the ActiveRecord syntax. Closes #131 --- README.md | 2 ++ src/Engine.ts | 2 ++ src/entity.mst | 18 ++++++++++++++++-- src/index.ts | 7 +++++++ src/models/EntityInfo.ts | 1 + 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3ccb0bc..a57a805 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,8 @@ Options: --cp, --case-property Convert property names to specified case [choices: "pascal", "camel", "none"] [default: "none"] --lazy Generate lazy relations [boolean] [default: false] + -a, --active-record Generate models that use the ActiveRecord syntax + [boolean] [default: false] --namingStrategy Use custom naming strategy --relationIds Generate RelationId fields [boolean] [default: false] --generateConstructor Generate constructor allowing partial initialization diff --git a/src/Engine.ts b/src/Engine.ts index 58a8d52..a0a9aae 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -88,6 +88,7 @@ export class Engine { }); }); element.GenerateConstructor = this.Options.constructor; + element.IsActiveRecord = this.Options.activeRecord; element.Imports.filter((elem, index, self) => { return index === self.indexOf(elem); }); @@ -274,6 +275,7 @@ export interface IEngineOptions { convertCaseProperty: "pascal" | "camel" | "none"; propertyVisibility: "public" | "protected" | "private" | "none"; lazy: boolean; + activeRecord: boolean; constructor: boolean; namingStrategy: AbstractNamingStrategy; relationIds: boolean; diff --git a/src/entity.mst b/src/entity.mst index 0dd8ee7..99af1be 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -1,11 +1,25 @@ -import {Index,Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { + BaseEntity, + Column, + Entity, + Index, + JoinColumn, + JoinTable, + ManyToMany, + ManyToOne, + OneToMany, + OneToOne, + PrimaryColumn, + PrimaryGeneratedColumn, + RelationId +} from "typeorm"; {{relationImports}}{{#each UniqueImports}}import {{curly true}}{{toEntityName this}}{{curly false}} from "./{{toFileName this}}"; {{/each}} @Entity("{{EntityName}}"{{#Schema}},{schema:"{{.}}"}{{/Schema}}) {{#Indexes}}{{^isPrimaryKey}}@Index("{{name}}",[{{#columns}}"{{toPropertyName name}}",{{/columns}}]{{#isUnique}},{unique:true}{{/isUnique}}) -{{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}} { +{{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}}{{#if IsActiveRecord}} extends BaseEntity{{/if}} { {{#Columns}} {{^relations}}{{#isGenerated}} @PrimaryGeneratedColumn({ diff --git a/src/index.ts b/src/index.ts index 6e36e54..8a4e903 100644 --- a/src/index.ts +++ b/src/index.ts @@ -92,6 +92,12 @@ const argv = Yargs.usage( default: false, describe: "Generate lazy relations" }) + .option("a", { + alias: "active-record", + boolean: true, + default: false, + describe: "Use ActiveRecord syntax for generated models" + }) .option("namingStrategy", { describe: "Use custom naming strategy" }) @@ -164,6 +170,7 @@ const engine = new Engine(driver, { databaseType: argv.e, host: argv.h, lazy: argv.lazy, + activeRecord: argv.a, namingStrategy, noConfigs: argv.noConfig, password: argv.x ? argv.x.toString() : null, diff --git a/src/models/EntityInfo.ts b/src/models/EntityInfo.ts index 82d90ed..30eec70 100644 --- a/src/models/EntityInfo.ts +++ b/src/models/EntityInfo.ts @@ -8,6 +8,7 @@ export class EntityInfo { public Indexes: IndexInfo[]; public Schema: string; public GenerateConstructor: boolean; + public IsActiveRecord: boolean; public relationImports() { const imports: string[] = []; From 1eacddf6bb4599091b9d611c169572ed4c353e16 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 23 Dec 2018 20:46:00 +0100 Subject: [PATCH 072/130] fixing tests --- src/entity.mst | 18 ++---------------- test/utils/GeneralTestUtils.ts | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/entity.mst b/src/entity.mst index 99af1be..eb5388b 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -1,25 +1,11 @@ -import { - BaseEntity, - Column, - Entity, - Index, - JoinColumn, - JoinTable, - ManyToMany, - ManyToOne, - OneToMany, - OneToOne, - PrimaryColumn, - PrimaryGeneratedColumn, - RelationId -} from "typeorm"; +import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne,OneToMany,OneToOne,PrimaryColumn,PrimaryGeneratedColumn,RelationId} from "typeorm"; {{relationImports}}{{#each UniqueImports}}import {{curly true}}{{toEntityName this}}{{curly false}} from "./{{toFileName this}}"; {{/each}} @Entity("{{EntityName}}"{{#Schema}},{schema:"{{.}}"}{{/Schema}}) {{#Indexes}}{{^isPrimaryKey}}@Index("{{name}}",[{{#columns}}"{{toPropertyName name}}",{{/columns}}]{{#isUnique}},{unique:true}{{/isUnique}}) -{{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}}{{#if IsActiveRecord}} extends BaseEntity{{/if}} { +{{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}}{{#IsActiveRecord}} extends BaseEntity{{/IsActiveRecord}} { {{#Columns}} {{^relations}}{{#isGenerated}} @PrimaryGeneratedColumn({ diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index e3c3c47..596e9e1 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -71,7 +71,8 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin lazy: false, constructor: false, namingStrategy, - relationIds: false + relationIds: false, + activeRecord: false }); conn = await createConnection(connOpt) @@ -143,7 +144,8 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st lazy: false, constructor: false, namingStrategy, - relationIds: false + relationIds: false, + activeRecord: false }); conn = await createConnection(connOpt) @@ -207,7 +209,8 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri lazy: false, constructor: false, namingStrategy, - relationIds: false + relationIds: false, + activeRecord: false }); conn = await createConnection(connOpt) @@ -269,7 +272,8 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin lazy: false, constructor: false, namingStrategy, - relationIds: false + relationIds: false, + activeRecord: false }); return engine; @@ -323,7 +327,8 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str lazy: false, constructor: false, namingStrategy, - relationIds: false + relationIds: false, + activeRecord: false }); @@ -380,7 +385,8 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st lazy: false, constructor: false, namingStrategy, - relationIds: false + relationIds: false, + activeRecord: false }); return engine; From 4d060a7c8940b60e47e237bb5b825b381135c24f Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 29 Dec 2018 17:42:53 +0100 Subject: [PATCH 073/130] docker image changes --- .travis.yml | 14 +++++++------- docker-compose.yml | 22 +++++++++++++++------- test/utils/GeneralTestUtils.ts | 4 ++-- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 367ae48..cfd61e7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,12 +9,12 @@ services: - docker env: matrix: - - POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres - POSTGRES_Password=!Passw0rd POSTGRES_Database=typeorm_mg POSTGRES_SSL=0 MYSQL_Skip=0 - MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=!Passw0rd - MYSQL_Database=typeorm_mg MYSQL_SSL=1 MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 - MARIADB_Username=root MARIADB_Password=!Passw0rd MARIADB_Database=typeorm_mg MARIADB_SSL=0 - MSSQL_Skip=0 MSSQL_Host=localhost MSSQL_Port=1433 MSSQL_Username=sa MSSQL_Password=!Passw0rd + - POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=test + POSTGRES_Password=test POSTGRES_Database=test POSTGRES_SSL=0 MYSQL_Skip=0 + MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=test MYSQL_Password=test + MYSQL_Database=test MYSQL_SSL=0 MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 + MARIADB_Username=test MARIADB_Password=test MARIADB_Database=test MARIADB_SSL=0 + MSSQL_Skip=0 MSSQL_Host=localhost MSSQL_Port=1433 MSSQL_Username=sa MSSQL_Password=Admin12345 MSSQL_Database=typeorm_mg MSSQL_SSL=0 ORACLE_Skip=0 ORACLE_Host=localhost @@ -33,7 +33,7 @@ before_install: - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - if [ -z "$DOCKER_USERNAME" ]; then mv docker-compose-without-login.yml docker-compose.yml; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; fi -- docker-compose pull --parallel --ignore-pull-failures +- docker-compose pull --parallel --ignore-pull-failures - docker-compose up -d - npm install -g npm@5 - npm install -g greenkeeper-lockfile@1 diff --git a/docker-compose.yml b/docker-compose.yml index badf4fc..5ff1d03 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,21 +3,27 @@ services: # mysql mysql: - image: "mysql:5.7.19" + image: "mysql:5.7.10" container_name: "typeorm-mg-mysql" ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD: "!Passw0rd" + MYSQL_ROOT_PASSWORD: "admin" + MYSQL_USER: "test" + MYSQL_PASSWORD: "test" + MYSQL_DATABASE: "test" # mariadb mariadb: - image: "mariadb:10.2.9" + image: "mariadb:10.1.16" container_name: "typeorm-mg-mariadb" ports: - "3307:3306" environment: - MYSQL_ROOT_PASSWORD: "!Passw0rd" + MYSQL_ROOT_PASSWORD: "admin" + MYSQL_USER: "test" + MYSQL_PASSWORD: "test" + MYSQL_DATABASE: "test" # postgres postgres: @@ -26,17 +32,19 @@ services: ports: - "5432:5432" environment: - POSTGRES_PASSWORD: "!Passw0rd" + POSTGRES_USER: "test" + POSTGRES_PASSWORD: "test" + POSTGRES_DB: "test" # mssql mssql: - image: "microsoft/mssql-server-linux:2017-CU4" + image: "mcr.microsoft.com/mssql/server:2017-GA-ubuntu" container_name: "typeorm-mg-mssql" ports: - "1433:1433" environment: + SA_PASSWORD: "Admin12345" ACCEPT_EULA: "Y" - SA_PASSWORD: "!Passw0rd" # oracle oracle: diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index 596e9e1..d481785 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -226,7 +226,7 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri export async function createMysqlModels(filesOrgPath: string, resultsPath: string): Promise { let driver: AbstractDriver; driver = new MysqlDriver(); - await driver.ConnectToServer(`mysql`, String(process.env.MYSQL_Host), Number(process.env.MYSQL_Port), String(process.env.MYSQL_Username), String(process.env.MYSQL_Password), yn(process.env.MYSQL_SSL)); + await driver.ConnectToServer(String(process.env.MYSQL_Database), String(process.env.MYSQL_Host), Number(process.env.MYSQL_Port), String(process.env.MYSQL_Username), String(process.env.MYSQL_Password), yn(process.env.MYSQL_SSL)); if (await driver.CheckIfDBExists(String(process.env.MYSQL_Database))) { await driver.DropDB(String(process.env.MYSQL_Database)); @@ -281,7 +281,7 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin export async function createMariaDBModels(filesOrgPath: string, resultsPath: string): Promise { let driver: AbstractDriver; driver = new MariaDbDriver(); - await driver.ConnectToServer(`mysql`, String(process.env.MARIADB_Host), Number(process.env.MARIADB_Port), String(process.env.MARIADB_Username), String(process.env.MARIADB_Password), yn(process.env.MARIADB_SSL)); + await driver.ConnectToServer(String(process.env.MARIADB_Database), String(process.env.MARIADB_Host), Number(process.env.MARIADB_Port), String(process.env.MARIADB_Username), String(process.env.MARIADB_Password), yn(process.env.MARIADB_SSL)); if (await driver.CheckIfDBExists(String(process.env.MARIADB_Database))) { await driver.DropDB(String(process.env.MARIADB_Database)); From e769696e584f767a86da60c9b07d39218bb211c2 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 29 Dec 2018 20:50:20 +0100 Subject: [PATCH 074/130] closing #130 duplicate relations on mysql --- src/drivers/MysqlDriver.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index ddc3313..b9111be 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -267,7 +267,7 @@ export class MysqlDriver extends AbstractDriver { onDelete: "RESTRICT" | "CASCADE" | "SET NULL" | "NO_ACTION"; onUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | "NO_ACTION"; object_id: string; - }>(`SELECT DISTINCT + }>(`SELECT CU.TABLE_NAME TableWithForeignKey, CU.ORDINAL_POSITION FK_PartNo, CU.COLUMN_NAME ForeignKeyColumn, @@ -279,7 +279,8 @@ export class MysqlDriver extends AbstractDriver { FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU JOIN - INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC ON CU.CONSTRAINT_NAME=RC.CONSTRAINT_NAME + INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC + ON CU.CONSTRAINT_NAME=RC.CONSTRAINT_NAME AND CU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA WHERE TABLE_SCHEMA = SCHEMA() AND CU.REFERENCED_TABLE_NAME IS NOT NULL; From 82f5ae43aa0e9cc75671717853bdaf6c03fbd249 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 30 Dec 2018 12:34:23 +0100 Subject: [PATCH 075/130] fix for #122 - default values --- src/drivers/MssqlDriver.ts | 16 +++- src/drivers/MysqlDriver.ts | 13 ++- src/drivers/OracleDriver.ts | 16 +++- src/drivers/PostgresDriver.ts | 12 ++- src/drivers/SqliteDriver.ts | 13 ++- src/entity.mst | 2 +- test/drivers/MssqlDriver.test.ts | 4 +- test/integration/defaultValues.test.ts | 96 +++++++++++++++++++ .../defaultValues/mariadb/entity/Post.ts | 21 ++++ .../defaultValues/mssql/entity/Post.ts | 21 ++++ .../defaultValues/mysql/entity/Post.ts | 21 ++++ .../defaultValues/oracle/entity/Post.ts | 21 ++++ .../defaultValues/postgres/entity/Post.ts | 21 ++++ .../defaultValues/sqlite/entity/Post.ts | 21 ++++ test/utils/EntityFileToJson.ts | 1 + 15 files changed, 291 insertions(+), 8 deletions(-) create mode 100644 test/integration/defaultValues.test.ts create mode 100644 test/integration/defaultValues/mariadb/entity/Post.ts create mode 100644 test/integration/defaultValues/mssql/entity/Post.ts create mode 100644 test/integration/defaultValues/mysql/entity/Post.ts create mode 100644 test/integration/defaultValues/oracle/entity/Post.ts create mode 100644 test/integration/defaultValues/postgres/entity/Post.ts create mode 100644 test/integration/defaultValues/sqlite/entity/Post.ts diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 3b9b4fe..338603f 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -59,7 +59,9 @@ export class MssqlDriver extends AbstractDriver { colInfo.isNullable = resp.IS_NULLABLE === "YES"; colInfo.isGenerated = resp.IsIdentity === 1; colInfo.isUnique = resp.IsUnique === 1; - colInfo.default = resp.COLUMN_DEFAULT; + colInfo.default = this.ReturnDefaultValueFunction( + resp.COLUMN_DEFAULT + ); colInfo.sqlType = resp.DATA_TYPE; switch (resp.DATA_TYPE) { case "bigint": @@ -404,4 +406,16 @@ order by ); return resp.recordset.length > 0; } + private ReturnDefaultValueFunction(defVal: string | null): string | null { + if (!defVal) { + return null; + } + if (defVal.startsWith("(") && defVal.endsWith(")")) { + defVal = defVal.slice(1, -1); + } + if (defVal.startsWith(`'`)) { + return `() => "${defVal}"`; + } + return `() => "${defVal}"`; + } } diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index b9111be..ba7ff4d 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -50,7 +50,9 @@ export class MysqlDriver extends AbstractDriver { colInfo.isNullable = resp.IS_NULLABLE === "YES"; colInfo.isGenerated = resp.IsIdentity === 1; colInfo.isUnique = resp.column_key === "UNI"; - colInfo.default = resp.COLUMN_DEFAULT; + colInfo.default = this.ReturnDefaultValueFunction( + resp.COLUMN_DEFAULT + ); colInfo.sqlType = resp.DATA_TYPE; switch (resp.DATA_TYPE) { case "int": @@ -409,4 +411,13 @@ export class MysqlDriver extends AbstractDriver { await promise; return ret; } + private ReturnDefaultValueFunction(defVal: string | null): string | null { + if (!defVal) { + return null; + } + if (defVal === "CURRENT_TIMESTAMP" || defVal.startsWith(`'`)) { + return `() => "${defVal}"`; + } + return `() => "'${defVal}'"`; + } } diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index bf9d143..c1b0e12 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -63,7 +63,9 @@ export class OracleDriver extends AbstractDriver { colInfo.default = !resp.DATA_DEFAULT || resp.DATA_DEFAULT.includes('"') ? null - : resp.DATA_DEFAULT; + : this.ReturnDefaultValueFunction( + resp.DATA_DEFAULT + ); colInfo.isUnique = resp.IS_UNIQUE > 0; resp.DATA_TYPE = resp.DATA_TYPE.replace(/\([0-9]+\)/g, ""); colInfo.sqlType = resp.DATA_TYPE.toLowerCase(); @@ -350,4 +352,16 @@ export class OracleDriver extends AbstractDriver { ); return x.rows[0][0] > 0 || x.rows[0].CNT; } + private ReturnDefaultValueFunction(defVal: string | null): string | null { + if (!defVal) { + return null; + } + if (defVal.endsWith(" ")) { + defVal = defVal.slice(0, -1); + } + if (defVal.startsWith(`'`)) { + return `() => "${defVal}"`; + } + return `() => "${defVal}"`; + } } diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 164d788..4716818 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -60,7 +60,7 @@ export class PostgresDriver extends AbstractDriver { colInfo.isUnique = resp.isunique === "1"; colInfo.default = colInfo.isGenerated ? null - : resp.column_default; + : this.ReturnDefaultValueFunction(resp.column_default); const columnTypes = this.MatchColumnTypes( resp.data_type, @@ -577,4 +577,14 @@ export class PostgresDriver extends AbstractDriver { ); return resp.rowCount > 0; } + private ReturnDefaultValueFunction(defVal: string | null): string | null { + if (!defVal) { + return null; + } + defVal = defVal.replace(/'::[\w ]*/, "'"); + if (defVal.startsWith(`'`)) { + return `() => "${defVal}"`; + } + return `() => "${defVal}"`; + } } diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 5e1cfc1..b0799a0 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -45,7 +45,9 @@ export class SqliteDriver extends AbstractDriver { colInfo.sqlName = resp.name; colInfo.isNullable = resp.notnull === 0; colInfo.isPrimary = resp.pk > 0; - colInfo.default = resp.dflt_value ? resp.dflt_value : null; + colInfo.default = this.ReturnDefaultValueFunction( + resp.dflt_value + ); colInfo.sqlType = resp.type .replace(/\([0-9 ,]+\)/g, "") .toLowerCase() @@ -344,4 +346,13 @@ export class SqliteDriver extends AbstractDriver { await promise; return ret; } + private ReturnDefaultValueFunction(defVal: string | null): string | null { + if (!defVal) { + return null; + } + if (defVal.startsWith(`'`)) { + return `() => "${defVal}"`; + } + return `() => "${defVal}"`; + } } diff --git a/src/entity.mst b/src/entity.mst index eb5388b..2a8fa93 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -16,7 +16,7 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne unique: true,{{/isUnique}}{{#lenght}} length:{{.}},{{/lenght}}{{#width}} width:{{.}},{{/width}}{{#default}} - default:"{{.}}",{{/default}}{{#numericPrecision}} + default: {{.}},{{/default}}{{#numericPrecision}} precision:{{.}},{{/numericPrecision}}{{#numericScale}} scale:{{.}},{{/numericScale}}{{#enumOptions}} enum:[{{.}}],{{/enumOptions}}{{#isArray}} diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 8ddb9c1..30448e6 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -65,7 +65,7 @@ describe('MssqlDriver', function () { response.recordset = new fakeRecordset(); response.recordset.push({ TABLE_NAME: 'name', CHARACTER_MAXIMUM_LENGTH: 0, - COLUMN_DEFAULT: 'a', COLUMN_NAME: 'name', DATA_TYPE: 'int', + COLUMN_DEFAULT: "'a'", COLUMN_NAME: 'name', DATA_TYPE: 'int', IS_NULLABLE: 'YES', NUMERIC_PRECISION: 0, NUMERIC_SCALE: 0, IsIdentity: 1 }) @@ -82,7 +82,7 @@ describe('MssqlDriver', function () { const expected: EntityInfo[] = JSON.parse(JSON.stringify(entities)); expected[0].Columns.push({ lenght: null, - default: 'a', + default: `() => "'a'"`, isNullable: true, isPrimary: false, isGenerated: true, diff --git a/test/integration/defaultValues.test.ts b/test/integration/defaultValues.test.ts new file mode 100644 index 0000000..2e536af --- /dev/null +++ b/test/integration/defaultValues.test.ts @@ -0,0 +1,96 @@ +require('dotenv').config() +import { expect } from "chai"; +import fs = require('fs-extra'); +import path = require('path') +import "reflect-metadata"; +import { EntityFileToJson } from "../utils/EntityFileToJson"; +const chai = require('chai'); +const chaiSubset = require('chai-subset'); +import * as ts from "typescript"; +import { Engine } from "../../src/Engine"; +import * as GTU from "../utils/GeneralTestUtils" + +chai.use(chaiSubset); + +describe("Column default values", async function () { + this.timeout(30000) + this.slow(5000)// compiling created models takes time + + const dbDrivers: string[] = [] + if (process.env.SQLITE_Skip == '0') { dbDrivers.push('sqlite') } + if (process.env.POSTGRES_Skip == '0') { dbDrivers.push('postgres') } + if (process.env.MYSQL_Skip == '0') { dbDrivers.push('mysql') } + if (process.env.MARIADB_Skip == '0') { dbDrivers.push('mariadb') } + if (process.env.MSSQL_Skip == '0') { dbDrivers.push('mssql') } + if (process.env.ORACLE_Skip == '0') { dbDrivers.push('oracle') } + + const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/defaultValues') + const examplesPathTS = path.resolve(process.cwd(), 'test/integration/defaultValues') + const files = fs.readdirSync(examplesPathTS) + + for (const dbDriver of dbDrivers) { + for (const folder of files) { + if (dbDriver == folder) { + it(dbDriver, async function () { + + const filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') + const filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') + const resultsPath = path.resolve(process.cwd(), `output`) + fs.removeSync(resultsPath) + + let engine: Engine; + switch (dbDriver) { + case 'sqlite': + engine = await GTU.createSQLiteModels(filesOrgPathJS, resultsPath) + break; + case 'postgres': + engine = await GTU.createPostgresModels(filesOrgPathJS, resultsPath) + break; + case 'mysql': + engine = await GTU.createMysqlModels(filesOrgPathJS, resultsPath) + break; + case 'mariadb': + engine = await GTU.createMariaDBModels(filesOrgPathJS, resultsPath) + break; + case 'mssql': + engine = await GTU.createMSSQLModels(filesOrgPathJS, resultsPath) + break; + case 'oracle': + engine = await GTU.createOracleDBModels(filesOrgPathJS, resultsPath) + break; + default: + console.log(`Unknown engine type`); + engine = {} as Engine + break; + } + + await engine.createModelFromDatabase() + const filesGenPath = path.resolve(resultsPath, 'entities') + + const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) + const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) + + expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) + + for (const file of filesOrg) { + const entftj = new EntityFileToJson(); + const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) + const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) + expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) + } + const currentDirectoryFiles = fs.readdirSync(filesGenPath). + filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) + const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { + experimentalDecorators: true, + sourceMap: false, + emitDecoratorMetadata: true, + target: ts.ScriptTarget.ES2016, + moduleResolution: ts.ModuleResolutionKind.NodeJs, + module: ts.ModuleKind.CommonJS + }); + expect(compileErrors, 'Errors detected while compiling generated model').to.be.false; + }); + } + } + } +}) diff --git a/test/integration/defaultValues/mariadb/entity/Post.ts b/test/integration/defaultValues/mariadb/entity/Post.ts new file mode 100644 index 0000000..e81e4c3 --- /dev/null +++ b/test/integration/defaultValues/mariadb/entity/Post.ts @@ -0,0 +1,21 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; + +@Entity("Post") +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column("timestamp",{ + default: () => "CURRENT_TIMESTAMP", + }) + createdAt:Date; + + + @Column("varchar",{ + length: 30, + default: () => "'defVal'", + }) + text:string; + +} diff --git a/test/integration/defaultValues/mssql/entity/Post.ts b/test/integration/defaultValues/mssql/entity/Post.ts new file mode 100644 index 0000000..0cde951 --- /dev/null +++ b/test/integration/defaultValues/mssql/entity/Post.ts @@ -0,0 +1,21 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; + +@Entity("Post") +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column("datetime",{ + default: () => "getdate()", + }) + createdAt:Date; + + + @Column("varchar",{ + length: 30, + default: () => "'defVal'", + }) + text:string; + +} diff --git a/test/integration/defaultValues/mysql/entity/Post.ts b/test/integration/defaultValues/mysql/entity/Post.ts new file mode 100644 index 0000000..e81e4c3 --- /dev/null +++ b/test/integration/defaultValues/mysql/entity/Post.ts @@ -0,0 +1,21 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; + +@Entity("Post") +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column("timestamp",{ + default: () => "CURRENT_TIMESTAMP", + }) + createdAt:Date; + + + @Column("varchar",{ + length: 30, + default: () => "'defVal'", + }) + text:string; + +} diff --git a/test/integration/defaultValues/oracle/entity/Post.ts b/test/integration/defaultValues/oracle/entity/Post.ts new file mode 100644 index 0000000..e81e4c3 --- /dev/null +++ b/test/integration/defaultValues/oracle/entity/Post.ts @@ -0,0 +1,21 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; + +@Entity("Post") +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column("timestamp",{ + default: () => "CURRENT_TIMESTAMP", + }) + createdAt:Date; + + + @Column("varchar",{ + length: 30, + default: () => "'defVal'", + }) + text:string; + +} diff --git a/test/integration/defaultValues/postgres/entity/Post.ts b/test/integration/defaultValues/postgres/entity/Post.ts new file mode 100644 index 0000000..391a798 --- /dev/null +++ b/test/integration/defaultValues/postgres/entity/Post.ts @@ -0,0 +1,21 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; + +@Entity("Post") +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column("timestamp",{ + default: () => "now()", + }) + createdAt:Date; + + + @Column("varchar",{ + length: 30, + default: () => "'defVal'", + }) + text:string; + +} diff --git a/test/integration/defaultValues/sqlite/entity/Post.ts b/test/integration/defaultValues/sqlite/entity/Post.ts new file mode 100644 index 0000000..697440d --- /dev/null +++ b/test/integration/defaultValues/sqlite/entity/Post.ts @@ -0,0 +1,21 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; + +@Entity("Post") +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column("datetime",{ + default: () => "CURRENT_TIMESTAMP", + }) + createdAt:Date; + + + @Column("varchar",{ + length: 30, + default: () => "'defVal'", + }) + text:string; + +} diff --git a/test/utils/EntityFileToJson.ts b/test/utils/EntityFileToJson.ts index 1a88308..300e56c 100644 --- a/test/utils/EntityFileToJson.ts +++ b/test/utils/EntityFileToJson.ts @@ -22,6 +22,7 @@ export class EntityFileToJson { if (badJSON.lastIndexOf(',') == badJSON.length - 3) { badJSON = badJSON.slice(0, badJSON.length - 3) + badJSON[badJSON.length - 2] + badJSON[badJSON.length - 1] } + badJSON = badJSON.replace(/default: \(\) => (.*)/, `default: $1`) col.columnOptions = JSON.parse(badJSON.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')) } else { if (decoratorParameters[0] == '"' && decoratorParameters.endsWith('"')) { From 72437cdbdc32efd5a0d8cbbf4ef083979f7bca21 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 30 Dec 2018 23:39:13 +0100 Subject: [PATCH 076/130] changelog changes --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69086b5..4026ea5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.2.24 +* fixes generation of default values +* fixes generation of duplicate relations for mysql +* added option for generating entities for AciveRecord pattern + ## 0.2.23 * added column type to generated `@PrimaryGeneratedColumn` decorator * allow to define property visibility, by using --pv From 17facf0b2c19df06c98da030d630854af1a17053 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 30 Dec 2018 23:57:36 +0100 Subject: [PATCH 077/130] 0.2.24 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index be9b269..ed657d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.23", + "version": "0.2.24", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c6d6ef5..4067469 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.23", + "version": "0.2.24", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From 31ff9c8bf5aab55ba4e86aff5ff8e4b47120f0c7 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 6 Jan 2019 14:40:38 +0100 Subject: [PATCH 078/130] fix #135 proper relation generation when unique index have more columns --- src/drivers/AbstractDriver.ts | 5 ++-- .../github-issues/135/entity/Post.ts | 26 +++++++++++++++++++ .../github-issues/135/entity/PostAuthor.ts | 20 ++++++++++++++ .../github-issues/135/entity/PostCategory.ts | 20 ++++++++++++++ .../github-issues/58/entity/feedextrainfo.ts | 6 ++--- 5 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 test/integration/github-issues/135/entity/Post.ts create mode 100644 test/integration/github-issues/135/entity/PostAuthor.ts create mode 100644 test/integration/github-issues/135/entity/PostCategory.ts diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 1557341..6a699cb 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -358,9 +358,8 @@ export abstract class AbstractDriver { const index = ownerEntity.Indexes.find( ind => ind.isUnique && - ind.columns.some( - col => col.name === ownerColumn!.tsName - ) + ind.columns.length === 1 && + ind.columns[0].name === ownerColumn!.tsName ); isOneToMany = !index; diff --git a/test/integration/github-issues/135/entity/Post.ts b/test/integration/github-issues/135/entity/Post.ts new file mode 100644 index 0000000..cdce663 --- /dev/null +++ b/test/integration/github-issues/135/entity/Post.ts @@ -0,0 +1,26 @@ +import { Index, Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable } from "typeorm"; +import { PostAuthor } from "./PostAuthor"; +import { PostCategory } from "./PostCategory"; + + +@Index("travel_travelplanextra_travel_plan_id_extra_id_f825ca51_uniq",["postAuthor","postCategory",],{unique:true}) +@Entity("Post") +export class Post { + + @Column("int", { + nullable: false, + primary: true, + name: "Id" + }) + Id: number; + + @ManyToOne(type => PostAuthor, PostAuthor => PostAuthor.Id) + @JoinColumn() + postAuthor: PostAuthor; + + + @ManyToOne(type => PostCategory, PostCategory => PostCategory.Id) + @JoinColumn() + postCategory: PostCategory; + +} diff --git a/test/integration/github-issues/135/entity/PostAuthor.ts b/test/integration/github-issues/135/entity/PostAuthor.ts new file mode 100644 index 0000000..db8ca99 --- /dev/null +++ b/test/integration/github-issues/135/entity/PostAuthor.ts @@ -0,0 +1,20 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { Post } from "./Post"; + + +@Entity("PostAuthor") +export class PostAuthor { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + + + @OneToMany(type => Post, Post => Post.Id) + posts:Post[]; + +} diff --git a/test/integration/github-issues/135/entity/PostCategory.ts b/test/integration/github-issues/135/entity/PostCategory.ts new file mode 100644 index 0000000..5804e3f --- /dev/null +++ b/test/integration/github-issues/135/entity/PostCategory.ts @@ -0,0 +1,20 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable, RelationId} from "typeorm"; +import { Post } from "./Post"; + + +@Entity("PostCategory") +export class PostCategory { + + @Column("int",{ + nullable:false, + primary:true, + name:"Id" + }) + Id:number; + + + + @OneToMany(type => Post, Post => Post.Id) + posts:Post[]; + +} diff --git a/test/integration/github-issues/58/entity/feedextrainfo.ts b/test/integration/github-issues/58/entity/feedextrainfo.ts index 7413759..2721cb9 100644 --- a/test/integration/github-issues/58/entity/feedextrainfo.ts +++ b/test/integration/github-issues/58/entity/feedextrainfo.ts @@ -4,9 +4,9 @@ import {quests} from "./quests"; @Entity("feedextrainfo") -@Index("feedExtraInfo_FeedOwnerId_idx",["feedOwnerId",]) -@Index("feedExtraInfo_ReaderId_idx",["readerId",]) -@Index("feedExtraInfo_QuestId_idx",["questId",]) +@Index("feedExtraInfo_FeedOwnerId_idx",["feedOwnerId",],{unique:true}) +@Index("feedExtraInfo_ReaderId_idx",["readerId",],{unique:true}) +@Index("feedExtraInfo_QuestId_idx",["questId",],{unique:true}) export class feedextrainfo { From 270461a1934f52a00a9fe158ed2367da691693cf Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 6 Jan 2019 15:37:52 +0100 Subject: [PATCH 079/130] fixed naming strategy changing entity name in db --- src/Engine.ts | 10 ++++----- src/NamingStrategy.ts | 2 +- src/drivers/AbstractDriver.ts | 38 +++++++++++++++++--------------- src/drivers/MssqlDriver.ts | 4 ++-- src/drivers/MysqlDriver.ts | 4 ++-- src/drivers/OracleDriver.ts | 4 ++-- src/drivers/PostgresDriver.ts | 4 ++-- src/drivers/SqliteDriver.ts | 18 ++++++++------- src/entity.mst | 8 +++---- src/models/EntityInfo.ts | 5 +++-- test/drivers/MssqlDriver.test.ts | 5 +++-- 11 files changed, 54 insertions(+), 48 deletions(-) diff --git a/src/Engine.ts b/src/Engine.ts index a0a9aae..00bdfea 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -82,7 +82,7 @@ export class Engine { element.Imports = []; element.Columns.forEach(column => { column.relations.forEach(relation => { - if (element.EntityName !== relation.relatedTable) { + if (element.tsEntityName !== relation.relatedTable) { element.Imports.push(relation.relatedTable); } }); @@ -95,16 +95,16 @@ export class Engine { let casedFileName = ""; switch (this.Options.convertCaseFile) { case "camel": - casedFileName = changeCase.camelCase(element.EntityName); + casedFileName = changeCase.camelCase(element.tsEntityName); break; case "param": - casedFileName = changeCase.paramCase(element.EntityName); + casedFileName = changeCase.paramCase(element.tsEntityName); break; case "pascal": - casedFileName = changeCase.pascalCase(element.EntityName); + casedFileName = changeCase.pascalCase(element.tsEntityName); break; case "none": - casedFileName = element.EntityName; + casedFileName = element.tsEntityName; break; } const resultFilePath = path.resolve( diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index 698f5a6..10bf0c5 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -10,7 +10,7 @@ export class NamingStrategy extends AbstractNamingStrategy { ): string { const isRelationToMany = relation.isOneToMany || relation.isManyToMany; const ownerEntity = dbModel.entities.find( - v => v.EntityName === relation.ownerTable + v => v.tsEntityName === relation.ownerTable )!; let columnName = diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 6a699cb..f04cf2e 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -79,7 +79,7 @@ export abstract class AbstractDriver { .filter( relation => relation.relatedTable === - entity.EntityName && + entity.tsEntityName && relation.relatedColumn === column.tsName ) .map(v => (v.relatedColumn = newName)); @@ -87,7 +87,7 @@ export abstract class AbstractDriver { .filter( relation => relation.relatedTable === - entity.EntityName && + entity.tsEntityName && relation.ownerColumn === column.tsName ) .map(v => (v.ownerColumn = newName)); @@ -100,20 +100,20 @@ export abstract class AbstractDriver { } public changeEntityNames(dbModel: DatabaseModel) { dbModel.entities.forEach(entity => { - const newName = this.namingStrategy.entityName(entity.EntityName); + const newName = this.namingStrategy.entityName(entity.tsEntityName); dbModel.entities.forEach(entity2 => { entity2.Columns.forEach(column => { column.relations.forEach(relation => { - if (relation.ownerTable === entity.EntityName) { + if (relation.ownerTable === entity.tsEntityName) { relation.ownerTable = newName; } - if (relation.relatedTable === entity.EntityName) { + if (relation.relatedTable === entity.tsEntityName) { relation.relatedTable = newName; } }); }); }); - entity.EntityName = newName; + entity.tsEntityName = newName; }); } public changeRelationNames(dbModel: DatabaseModel) { @@ -130,14 +130,14 @@ export abstract class AbstractDriver { column2.relations.forEach(relation2 => { if ( relation2.relatedTable === - entity.EntityName && + entity.tsEntityName && relation2.ownerColumn === column.tsName ) { relation2.ownerColumn = newName; } if ( relation2.relatedTable === - entity.EntityName && + entity.tsEntityName && relation2.relatedColumn === column.tsName ) { relation2.relatedColumn = newName; @@ -185,25 +185,25 @@ export abstract class AbstractDriver { .filter((v, i, s) => s.indexOf(v) === i); if (namesOfRelatedTables.length === 2) { const relatedTable1 = dbModel.entities.find( - v => v.EntityName === namesOfRelatedTables[0] + v => v.tsEntityName === namesOfRelatedTables[0] )!; relatedTable1.Columns = relatedTable1.Columns.filter( v => !v.tsName .toLowerCase() - .startsWith(entity.EntityName.toLowerCase()) + .startsWith(entity.tsEntityName.toLowerCase()) ); const relatedTable2 = dbModel.entities.find( - v => v.EntityName === namesOfRelatedTables[1] + v => v.tsEntityName === namesOfRelatedTables[1] )!; relatedTable2.Columns = relatedTable2.Columns.filter( v => !v.tsName .toLowerCase() - .startsWith(entity.EntityName.toLowerCase()) + .startsWith(entity.tsEntityName.toLowerCase()) ); dbModel.entities = dbModel.entities.filter(ent => { - return ent.EntityName !== entity.EntityName; + return ent.tsEntityName !== entity.tsEntityName; }); const column1 = new ColumnInfo(); @@ -278,7 +278,8 @@ export abstract class AbstractDriver { const ret: EntityInfo[] = [] as EntityInfo[]; response.forEach(val => { const ent: EntityInfo = new EntityInfo(); - ent.EntityName = val.TABLE_NAME; + ent.tsEntityName = val.TABLE_NAME; + ent.sqlEntityName = val.TABLE_NAME; ent.Schema = val.TABLE_SCHEMA; ent.Columns = [] as ColumnInfo[]; ent.Indexes = [] as IndexInfo[]; @@ -293,7 +294,7 @@ export abstract class AbstractDriver { ) { relationsTemp.forEach(relationTmp => { const ownerEntity = entities.find( - entitity => entitity.EntityName === relationTmp.ownerTable + entitity => entitity.tsEntityName === relationTmp.ownerTable ); if (!ownerEntity) { TomgUtils.LogError( @@ -304,7 +305,8 @@ export abstract class AbstractDriver { return; } const referencedEntity = entities.find( - entitity => entitity.EntityName === relationTmp.referencedTable + entitity => + entitity.tsEntityName === relationTmp.referencedTable ); if (!referencedEntity) { TomgUtils.LogError( @@ -375,7 +377,7 @@ export abstract class AbstractDriver { : "OneToOne"; ownerRelation.relationIdField = this.generateRelationsIds; - let columnName = ownerEntity.EntityName; + let columnName = ownerEntity.tsEntityName; if ( referencedEntity.Columns.some(v => v.tsName === columnName) ) { @@ -464,7 +466,7 @@ export abstract class AbstractDriver { }) ) { TomgUtils.LogError( - `Table ${entity.EntityName} has no PK.`, + `Table ${entity.tsEntityName} has no PK.`, false ); return; diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 338603f..14b7c21 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -50,7 +50,7 @@ export class MssqlDriver extends AbstractDriver { entities.forEach(ent => { response .filter(filterVal => { - return filterVal.TABLE_NAME === ent.EntityName; + return filterVal.TABLE_NAME === ent.tsEntityName; }) .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); @@ -233,7 +233,7 @@ ORDER BY t.name, ind.name, ind.index_id, ic.key_ordinal;`)).recordset; entities.forEach(ent => { response - .filter(filterVal => filterVal.TableName === ent.EntityName) + .filter(filterVal => filterVal.TableName === ent.tsEntityName) .forEach(resp => { let indexInfo: IndexInfo = {} as IndexInfo; const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index ba7ff4d..cd110cd 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -42,7 +42,7 @@ export class MysqlDriver extends AbstractDriver { FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA like DATABASE()`); entities.forEach(ent => { response - .filter(filterVal => filterVal.TABLE_NAME === ent.EntityName) + .filter(filterVal => filterVal.TABLE_NAME === ent.tsEntityName) .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; @@ -230,7 +230,7 @@ export class MysqlDriver extends AbstractDriver { `); entities.forEach(ent => { response - .filter(filterVal => filterVal.TableName === ent.EntityName) + .filter(filterVal => filterVal.TableName === ent.tsEntityName) .forEach(resp => { let indexInfo: IndexInfo = {} as IndexInfo; const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index c1b0e12..75baece 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -53,7 +53,7 @@ export class OracleDriver extends AbstractDriver { entities.forEach(ent => { response - .filter(filterVal => filterVal.TABLE_NAME === ent.EntityName) + .filter(filterVal => filterVal.TABLE_NAME === ent.tsEntityName) .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; @@ -206,7 +206,7 @@ export class OracleDriver extends AbstractDriver { entities.forEach(ent => { response - .filter(filterVal => filterVal.TABLE_NAME === ent.EntityName) + .filter(filterVal => filterVal.TABLE_NAME === ent.tsEntityName) .forEach(resp => { let indexInfo: IndexInfo = {} as IndexInfo; const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 4716818..4b8304a 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -50,7 +50,7 @@ export class PostgresDriver extends AbstractDriver { .rows; entities.forEach(ent => { response - .filter(filterVal => filterVal.table_name === ent.EntityName) + .filter(filterVal => filterVal.table_name === ent.tsEntityName) .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.column_name; @@ -400,7 +400,7 @@ export class PostgresDriver extends AbstractDriver { ORDER BY c.relname,f.attname;`)).rows; entities.forEach(ent => { response - .filter(filterVal => filterVal.tablename === ent.EntityName) + .filter(filterVal => filterVal.tablename === ent.tsEntityName) .forEach(resp => { let indexInfo: IndexInfo = {} as IndexInfo; const indexColumnInfo: IndexColumnInfo = {} as IndexColumnInfo; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index b0799a0..ed7e6c6 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -16,11 +16,11 @@ export class SqliteDriver extends AbstractDriver { ); rows.forEach(val => { const ent: EntityInfo = new EntityInfo(); - ent.EntityName = val.tbl_name; + ent.tsEntityName = val.tbl_name; ent.Columns = [] as ColumnInfo[]; ent.Indexes = [] as IndexInfo[]; if (val.sql.includes("AUTOINCREMENT")) { - this.tablesWithGeneratedPrimaryKey.push(ent.EntityName); + this.tablesWithGeneratedPrimaryKey.push(ent.tsEntityName); } ret.push(ent); }); @@ -38,7 +38,7 @@ export class SqliteDriver extends AbstractDriver { notnull: number; dflt_value: string; pk: number; - }>(`PRAGMA table_info('${ent.EntityName}');`); + }>(`PRAGMA table_info('${ent.tsEntityName}');`); response.forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.name; @@ -54,7 +54,9 @@ export class SqliteDriver extends AbstractDriver { .trim(); colInfo.isGenerated = colInfo.isPrimary && - this.tablesWithGeneratedPrimaryKey.includes(ent.EntityName); + this.tablesWithGeneratedPrimaryKey.includes( + ent.tsEntityName + ); switch (colInfo.sqlType) { case "int": colInfo.tsType = "number"; @@ -141,7 +143,7 @@ export class SqliteDriver extends AbstractDriver { TomgUtils.LogError( `Unknown column type: ${ colInfo.sqlType - } table name: ${ent.EntityName} column name: ${ + } table name: ${ent.tsEntityName} column name: ${ resp.name }` ); @@ -205,7 +207,7 @@ export class SqliteDriver extends AbstractDriver { unique: number; origin: string; partial: number; - }>(`PRAGMA index_list('${ent.EntityName}');`); + }>(`PRAGMA index_list('${ent.tsEntityName}');`); for (const resp of response) { const indexColumnsResponse = await this.ExecQuery<{ seqno: number; @@ -259,7 +261,7 @@ export class SqliteDriver extends AbstractDriver { on_update: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; on_delete: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; match: string; - }>(`PRAGMA foreign_key_list('${entity.EntityName}');`); + }>(`PRAGMA foreign_key_list('${entity.tsEntityName}');`); const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { const rels = {} as IRelationTempInfo; @@ -269,7 +271,7 @@ export class SqliteDriver extends AbstractDriver { resp.on_delete === "NO ACTION" ? null : resp.on_delete; rels.actionOnUpdate = resp.on_update === "NO ACTION" ? null : resp.on_update; - rels.ownerTable = entity.EntityName; + rels.ownerTable = entity.tsEntityName; rels.referencedTable = resp.table; relationsTemp.push(rels); rels.ownerColumnsNames.push(resp.from); diff --git a/src/entity.mst b/src/entity.mst index 2a8fa93..eb6846f 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -3,9 +3,9 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne {{/each}} -@Entity("{{EntityName}}"{{#Schema}},{schema:"{{.}}"}{{/Schema}}) +@Entity("{{sqlEntityName}}"{{#Schema}},{schema:"{{.}}"}{{/Schema}}) {{#Indexes}}{{^isPrimaryKey}}@Index("{{name}}",[{{#columns}}"{{toPropertyName name}}",{{/columns}}]{{#isUnique}},{unique:true}{{/isUnique}}) -{{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName EntityName}}{{#IsActiveRecord}} extends BaseEntity{{/IsActiveRecord}} { +{{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName tsEntityName}}{{#IsActiveRecord}} extends BaseEntity{{/IsActiveRecord}} { {{#Columns}} {{^relations}}{{#isGenerated}} @PrimaryGeneratedColumn({ @@ -32,11 +32,11 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne {{/if}} {{#if relationIdField }} - @RelationId(({{../../EntityName}}: {{../../EntityName}}) => {{../../EntityName}}.{{toPropertyName ../tsName}}) + @RelationId(({{../../tsEntityName}}: {{../../tsEntityName}}) => {{../../tsEntityName}}.{{toPropertyName ../tsName}}) {{toPropertyName ../tsName}}Id: {{#if isOneToOne}}{{toLazy ../tsType}}{{else}}{{toLazy (concat ../tsType "[]")}}{{/if}};{{/if}}{{/relations}} {{/Columns}} {{#if GenerateConstructor}} - constructor(init?: Partial<{{toEntityName EntityName}}>) { + constructor(init?: Partial<{{toEntityName tsEntityName}}>) { Object.assign(this, init); } {{/if}} diff --git a/src/models/EntityInfo.ts b/src/models/EntityInfo.ts index 30eec70..1c51dba 100644 --- a/src/models/EntityInfo.ts +++ b/src/models/EntityInfo.ts @@ -1,7 +1,8 @@ import { ColumnInfo } from "./ColumnInfo"; export class EntityInfo { - public EntityName: string; + public tsEntityName: string; + public sqlEntityName: string; public Columns: ColumnInfo[]; public Imports: string[]; public UniqueImports: string[]; @@ -14,7 +15,7 @@ export class EntityInfo { const imports: string[] = []; this.Columns.forEach(column => { column.relations.forEach(relation => { - if (this.EntityName !== relation.relatedTable) { + if (this.tsEntityName !== relation.relatedTable) { imports.push(relation.relatedTable); } }); diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 30448e6..be80d21 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -49,7 +49,8 @@ describe('MssqlDriver', function () { const result = await driver.GetAllTables('schema') const expectedResult = [] as EntityInfo[]; const y = new EntityInfo(); - y.EntityName = 'name' + y.tsEntityName = 'name' + y.sqlEntityName = 'name' y.Schema='schema' y.Columns = [] as ColumnInfo[]; y.Indexes = [] as IndexInfo[]; @@ -75,7 +76,7 @@ describe('MssqlDriver', function () { const entities = [] as EntityInfo[]; const y = new EntityInfo(); - y.EntityName = 'name' + y.tsEntityName = 'name' y.Columns = [] as ColumnInfo[]; y.Indexes = [] as IndexInfo[]; entities.push(y) From 6a81accecb040bd016ae162fb8e95feb436ae70a Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 6 Jan 2019 17:18:21 +0100 Subject: [PATCH 080/130] changelog --- CHANGELOG.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4026ea5..a5b8240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,18 @@ # Changelog +## 0.2.25 +* fixed naming strategy changing entity name in db +* fixed proper relation generation when unique index have more columns + ## 0.2.24 -* fixes generation of default values -* fixes generation of duplicate relations for mysql +* fixed generation of default values +* fixed generation of duplicate relations for mysql * added option for generating entities for AciveRecord pattern ## 0.2.23 * added column type to generated `@PrimaryGeneratedColumn` decorator * allow to define property visibility, by using --pv -* fixes some problems with duplicated relationships on mysql database +* fixed some problems with duplicated relationships on mysql database ## 0.2.22 * fixed naming stategy for guid ended column names From 86a4c0b37826c4ffa27c310152eaf2ea5c17b5b2 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 6 Jan 2019 17:18:33 +0100 Subject: [PATCH 081/130] 0.2.25 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed657d0..061b349 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.24", + "version": "0.2.25", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 4067469..facb717 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.24", + "version": "0.2.25", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From b7b0f2b587422f13dc139d0c18ec9239e6338671 Mon Sep 17 00:00:00 2001 From: Livan Date: Sat, 12 Jan 2019 07:00:27 +0300 Subject: [PATCH 082/130] Add support for VARBINARY in MySQL --- src/drivers/MysqlDriver.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index cd110cd..0753d75 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -141,6 +141,9 @@ export class MysqlDriver extends AbstractDriver { case "binary": colInfo.tsType = "Buffer"; break; + case "varbinary": + colInfo.tsType = "Buffer"; + break; case "geometry": colInfo.tsType = "string"; break; From 7c4639cc55dcc69cd60aea0805d626bb98c2c80a Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 16 Jan 2019 18:44:18 +0100 Subject: [PATCH 083/130] fixing docker-compose without login --- docker-compose-without-login.yml | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/docker-compose-without-login.yml b/docker-compose-without-login.yml index f2bcda5..c123801 100644 --- a/docker-compose-without-login.yml +++ b/docker-compose-without-login.yml @@ -3,42 +3,50 @@ services: # mysql mysql: - image: "mysql:5.7.19" + image: "mysql:5.7.10" container_name: "typeorm-mg-mysql" ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD: "!Passw0rd" + MYSQL_ROOT_PASSWORD: "admin" + MYSQL_USER: "test" + MYSQL_PASSWORD: "test" + MYSQL_DATABASE: "test" # mariadb mariadb: - image: "mariadb:10.2.9" + image: "mariadb:10.1.16" container_name: "typeorm-mg-mariadb" ports: - "3307:3306" environment: - MYSQL_ROOT_PASSWORD: "!Passw0rd" + MYSQL_ROOT_PASSWORD: "admin" + MYSQL_USER: "test" + MYSQL_PASSWORD: "test" + MYSQL_DATABASE: "test" # postgres postgres: - image: "postgres:10.0" + image: "mdillon/postgis:9.6" container_name: "typeorm-mg-postgres" ports: - "5432:5432" environment: - POSTGRES_PASSWORD: "!Passw0rd" + POSTGRES_USER: "test" + POSTGRES_PASSWORD: "test" + POSTGRES_DB: "test" # mssql mssql: - image: "microsoft/mssql-server-linux:2017-CU4" + image: "mcr.microsoft.com/mssql/server:2017-GA-ubuntu" container_name: "typeorm-mg-mssql" ports: - "1433:1433" environment: + SA_PASSWORD: "Admin12345" ACCEPT_EULA: "Y" - SA_PASSWORD: "!Passw0rd" - # oracle +# # oracle # oracle: # image: "store/oracle/database-enterprise:12.2.0.1-slim" # container_name: "typeorm-mg-oracle" From c61930e23e206ae4280ed46af459a9abd7bc832f Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 16 Jan 2019 20:16:53 +0100 Subject: [PATCH 084/130] fixing coverage conf for PR builds --- codecov.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/codecov.yml b/codecov.yml index 56fb227..f9bcad2 100644 --- a/codecov.yml +++ b/codecov.yml @@ -2,3 +2,8 @@ parsers: javascript: enable_partials: yes comment: off +coverage: + status: + project: + default: + threshold: 50 From 98c2310956a84402c03f838bcaf3c84f691460a4 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 16 Jan 2019 22:27:06 +0100 Subject: [PATCH 085/130] updating travis CI configuration --- .travis.yml | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index cfd61e7..0b39a24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: node_js node_js: +- 11 - 10 - 8 - 6 @@ -28,27 +29,20 @@ env: SQLITE_Skip=0 SQLITE_Database=/tmp/sqlitedb.db before_install: +- export images=mysql,mariadb,postgres,mssql - sudo service mysql stop - sudo service postgresql stop - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi -- if [ -z "$DOCKER_USERNAME" ]; then mv docker-compose-without-login.yml docker-compose.yml; fi -- if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; fi -- docker-compose pull --parallel --ignore-pull-failures -- docker-compose up -d +- if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else export images=$images,oracle,oracle_client; fi +- docker-compose pull --parallel --ignore-pull-failures $images +- docker-compose up -d $images - npm install -g npm@5 -- npm install -g greenkeeper-lockfile@1 -- mkdir /opt/oracle -install: -- case $TRAVIS_BRANCH in greenkeeper*) npm i;; *) npm ci;; esac; before_script: -- if [ -n "$DOCKER_USERNAME" ]; then npm i oracledb --no-save; docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi +- if [ -n "$DOCKER_USERNAME" ]; then mkdir /opt/oracle; npm i oracledb --no-save; docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH -- greenkeeper-lockfile-update - npm link typescript - tsc - sleep 180 -after_script: -- greenkeeper-lockfile-upload dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From 09cafec18479e2a630228a7aab05e55a7631032e Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 16 Jan 2019 22:52:11 +0100 Subject: [PATCH 086/130] fixing CI build --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0b39a24..1b57daa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,11 +29,11 @@ env: SQLITE_Skip=0 SQLITE_Database=/tmp/sqlitedb.db before_install: -- export images=mysql,mariadb,postgres,mssql +- images=(mysql mariadb postgres mssql) - sudo service mysql stop - sudo service postgresql stop - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi -- if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else export images=$images,oracle,oracle_client; fi +- if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else images=(${images[@]} oracle oracle_client); fi - docker-compose pull --parallel --ignore-pull-failures $images - docker-compose up -d $images - npm install -g npm@5 From fcfe0307753c9c45687a7ed9d3b4d809fa846381 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 16 Jan 2019 22:57:50 +0100 Subject: [PATCH 087/130] fixing CI build --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1b57daa..a3887d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,7 +36,6 @@ before_install: - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else images=(${images[@]} oracle oracle_client); fi - docker-compose pull --parallel --ignore-pull-failures $images - docker-compose up -d $images -- npm install -g npm@5 before_script: - if [ -n "$DOCKER_USERNAME" ]; then mkdir /opt/oracle; npm i oracledb --no-save; docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH From 8f6b1a06f3c943868a77e73342874d8730acb115 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 16 Jan 2019 23:03:26 +0100 Subject: [PATCH 088/130] CI test --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index a3887d9..24fdadc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,6 +34,7 @@ before_install: - sudo service postgresql stop - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else images=(${images[@]} oracle oracle_client); fi +- echo $images - docker-compose pull --parallel --ignore-pull-failures $images - docker-compose up -d $images before_script: From 2a234d597d05a3a0677a255efb21fb8b51793a79 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 16 Jan 2019 23:09:18 +0100 Subject: [PATCH 089/130] fixing CI --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 24fdadc..ff1d11a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,9 +34,9 @@ before_install: - sudo service postgresql stop - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else images=(${images[@]} oracle oracle_client); fi -- echo $images -- docker-compose pull --parallel --ignore-pull-failures $images -- docker-compose up -d $images +- echo ${images[@]} +- docker-compose pull --parallel --ignore-pull-failures ${images[@]} +- docker-compose up -d ${images[@]} before_script: - if [ -n "$DOCKER_USERNAME" ]; then mkdir /opt/oracle; npm i oracledb --no-save; docker cp typeorm-mg-oracle-client:/usr/lib/oracle/12.2/client64/lib /opt/oracle/instantclient_12_2; fi - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH From 3ba5ed6fb465ee4f301583e44139b8c0446ce71b Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 16 Jan 2019 23:53:28 +0100 Subject: [PATCH 090/130] fixing travis CI --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ff1d11a..b50cec9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,6 @@ node_js: - 11 - 10 - 8 -- 6 cache: npm sudo: required services: From c62010c079a8632441eacf85543aed4537a035c2 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Mon, 21 Jan 2019 21:32:42 +0100 Subject: [PATCH 091/130] refactorings --- src/Engine.ts | 279 +++++++++++++++------ src/drivers/AbstractDriver.ts | 112 +-------- src/drivers/MssqlDriver.ts | 4 + src/drivers/MysqlDriver.ts | 3 + src/drivers/OracleDriver.ts | 4 + src/drivers/PostgresDriver.ts | 4 + src/drivers/SqliteDriver.ts | 4 + src/index.ts | 87 ++----- test/drivers/MssqlDriver.test.ts | 1 - test/integration/defaultValues.test.ts | 41 +-- test/integration/entityTypes.test.ts | 41 +-- test/integration/githubIssues.test.ts | 42 +--- test/integration/integration.test.ts | 44 +--- test/utils/GeneralTestUtils.ts | 334 ++++++++++++------------- 14 files changed, 448 insertions(+), 552 deletions(-) diff --git a/src/Engine.ts b/src/Engine.ts index 00bdfea..42c78d5 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -4,29 +4,59 @@ import * as Handlebars from "handlebars"; import path = require("path"); import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { AbstractDriver } from "./drivers/AbstractDriver"; +import { MariaDbDriver } from "./drivers/MariaDbDriver"; +import { MssqlDriver } from "./drivers/MssqlDriver"; +import { MysqlDriver } from "./drivers/MysqlDriver"; +import { OracleDriver } from "./drivers/OracleDriver"; +import { PostgresDriver } from "./drivers/PostgresDriver"; +import { SqliteDriver } from "./drivers/SqliteDriver"; import { DatabaseModel } from "./models/DatabaseModel"; +import { NamingStrategy } from "./NamingStrategy"; import * as TomgUtils from "./Utils"; export class Engine { - constructor( - private driver: AbstractDriver, - public Options: IEngineOptions - ) {} + public static createDriver(driverName: string): AbstractDriver { + switch (driverName) { + case "mssql": + return new MssqlDriver(); + case "postgres": + return new PostgresDriver(); + case "mysql": + return new MysqlDriver(); + case "mariadb": + return new MariaDbDriver(); + case "oracle": + return new OracleDriver(); + case "sqlite": + return new SqliteDriver(); + default: + TomgUtils.LogError("Database engine not recognized.", false); + throw new Error("Database engine not recognized."); + } + } - public async createModelFromDatabase(): Promise { - const dbModel = await this.getEntitiesInfo( - this.Options.databaseName, - this.Options.host, - this.Options.port, - this.Options.user, - this.Options.password, - this.Options.schemaName, - this.Options.ssl, - this.Options.namingStrategy, - this.Options.relationIds + public static async createModelFromDatabase( + driver: AbstractDriver, + connectionOptions: IConnectionOptions, + generationOptions: IGenerationOptions + ): Promise { + const dbModel = await driver.GetDataFromServer( + connectionOptions.databaseName, + connectionOptions.host, + connectionOptions.port, + connectionOptions.user, + connectionOptions.password, + connectionOptions.schemaName, + connectionOptions.ssl, + generationOptions.relationIds ); if (dbModel.entities.length > 0) { - this.createModelFromMetadata(dbModel); + this.ApplyNamingStrategy(dbModel, generationOptions.namingStrategy); + this.createModelFromMetadata( + dbModel, + connectionOptions, + generationOptions + ); } else { TomgUtils.LogError( "Tables not found in selected database. Skipping creation of typeorm model.", @@ -35,41 +65,23 @@ export class Engine { } return true; } - private async getEntitiesInfo( - database: string, - server: string, - port: number, - user: string, - password: string, - schemaName: string, - ssl: boolean, - namingStrategy: AbstractNamingStrategy, - relationIds: boolean - ): Promise { - return await this.driver.GetDataFromServer( - database, - server, - port, - user, - password, - schemaName, - ssl, - namingStrategy, - relationIds - ); - } - private createModelFromMetadata(databaseModel: DatabaseModel) { - this.createHandlebarsHelpers(); + + private static createModelFromMetadata( + databaseModel: DatabaseModel, + connectionOptions: IConnectionOptions, + generationOptions: IGenerationOptions + ) { + this.createHandlebarsHelpers(generationOptions); const templatePath = path.resolve(__dirname, "../../src/entity.mst"); const template = fs.readFileSync(templatePath, "UTF-8"); - const resultPath = this.Options.resultsPath; + const resultPath = generationOptions.resultsPath; if (!fs.existsSync(resultPath)) { fs.mkdirSync(resultPath); } let entitesPath = resultPath; - if (!this.Options.noConfigs) { + if (!generationOptions.noConfigs) { this.createTsConfigFile(resultPath); - this.createTypeOrmConfig(resultPath); + this.createTypeOrmConfig(resultPath, connectionOptions); entitesPath = path.resolve(resultPath, "./entities"); if (!fs.existsSync(entitesPath)) { fs.mkdirSync(entitesPath); @@ -87,13 +99,13 @@ export class Engine { } }); }); - element.GenerateConstructor = this.Options.constructor; - element.IsActiveRecord = this.Options.activeRecord; + element.GenerateConstructor = generationOptions.constructor; + element.IsActiveRecord = generationOptions.activeRecord; element.Imports.filter((elem, index, self) => { return index === self.indexOf(elem); }); let casedFileName = ""; - switch (this.Options.convertCaseFile) { + switch (generationOptions.convertCaseFile) { case "camel": casedFileName = changeCase.camelCase(element.tsEntityName); break; @@ -118,11 +130,13 @@ export class Engine { }); }); } - private createHandlebarsHelpers() { + private static createHandlebarsHelpers( + generationOptions: IGenerationOptions + ) { Handlebars.registerHelper("curly", open => (open ? "{" : "}")); Handlebars.registerHelper("toEntityName", str => { let retStr = ""; - switch (this.Options.convertCaseEntity) { + switch (generationOptions.convertCaseEntity) { case "camel": retStr = changeCase.camelCase(str); break; @@ -140,7 +154,7 @@ export class Engine { }); Handlebars.registerHelper("toFileName", str => { let retStr = ""; - switch (this.Options.convertCaseFile) { + switch (generationOptions.convertCaseFile) { case "camel": retStr = changeCase.camelCase(str); break; @@ -159,13 +173,13 @@ export class Engine { Handlebars.registerHelper( "printPropertyVisibility", () => - this.Options.propertyVisibility !== "none" - ? this.Options.propertyVisibility + " " + generationOptions.propertyVisibility !== "none" + ? generationOptions.propertyVisibility + " " : "" ); Handlebars.registerHelper("toPropertyName", str => { let retStr = ""; - switch (this.Options.convertCaseProperty) { + switch (generationOptions.convertCaseProperty) { case "camel": retStr = changeCase.camelCase(str); break; @@ -180,7 +194,7 @@ export class Engine { }); Handlebars.registerHelper("toLowerCase", str => str.toLowerCase()); Handlebars.registerHelper("toLazy", str => { - if (this.Options.lazy) { + if (generationOptions.lazy) { return `Promise<${str}>`; } else { return str; @@ -199,7 +213,7 @@ export class Engine { } // TODO:Move to mustache template file - private createTsConfigFile(resultPath) { + private static createTsConfigFile(resultPath) { fs.writeFileSync( path.resolve(resultPath, "tsconfig.json"), `{"compilerOptions": { @@ -214,19 +228,22 @@ export class Engine { { encoding: "UTF-8", flag: "w" } ); } - private createTypeOrmConfig(resultPath) { - if (this.Options.schemaName === "") { + private static createTypeOrmConfig( + resultPath: string, + connectionOptions: IConnectionOptions + ) { + if (connectionOptions.schemaName === "") { fs.writeFileSync( path.resolve(resultPath, "ormconfig.json"), `[ { "name": "default", - "type": "${this.Options.databaseType}", - "host": "${this.Options.host}", - "port": ${this.Options.port}, - "username": "${this.Options.user}", - "password": "${this.Options.password}", - "database": "${this.Options.databaseName}", + "type": "${connectionOptions.databaseType}", + "host": "${connectionOptions.host}", + "port": ${connectionOptions.port}, + "username": "${connectionOptions.user}", + "password": "${connectionOptions.password}", + "database": "${connectionOptions.databaseName}", "synchronize": false, "entities": [ "entities/*.js" @@ -241,13 +258,13 @@ export class Engine { `[ { "name": "default", - "type": "${this.Options.databaseType}", - "host": "${this.Options.host}", - "port": ${this.Options.port}, - "username": "${this.Options.user}", - "password": "${this.Options.password}", - "database": "${this.Options.databaseName}", - "schema": "${this.Options.schemaName}", + "type": "${connectionOptions.databaseType}", + "host": "${connectionOptions.host}", + "port": ${connectionOptions.port}, + "username": "${connectionOptions.user}", + "password": "${connectionOptions.password}", + "database": "${connectionOptions.databaseName}", + "schema": "${connectionOptions.schemaName}", "synchronize": false, "entities": [ "entities/*.js" @@ -258,17 +275,135 @@ export class Engine { ); } } + private static ApplyNamingStrategy( + dbModel: DatabaseModel, + namingStrategy: NamingStrategy + ) { + this.changeRelationNames(dbModel, namingStrategy); + this.changeEntityNames(dbModel, namingStrategy); + this.changeColumnNames(dbModel, namingStrategy); + } + private static changeColumnNames( + dbModel: DatabaseModel, + namingStrategy: NamingStrategy + ) { + dbModel.entities.forEach(entity => { + entity.Columns.forEach(column => { + const newName = namingStrategy.columnName(column.tsName); + entity.Indexes.forEach(index => { + index.columns + .filter(column2 => column2.name === column.tsName) + .forEach(column2 => (column2.name = newName)); + }); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column2 => { + column2.relations + .filter( + relation => + relation.relatedTable === + entity.tsEntityName && + relation.relatedColumn === column.tsName + ) + .map(v => (v.relatedColumn = newName)); + column2.relations + .filter( + relation => + relation.relatedTable === + entity.tsEntityName && + relation.ownerColumn === column.tsName + ) + .map(v => (v.ownerColumn = newName)); + }); + }); + + column.tsName = newName; + }); + }); + } + private static changeEntityNames( + dbModel: DatabaseModel, + namingStrategy: NamingStrategy + ) { + dbModel.entities.forEach(entity => { + const newName = namingStrategy.entityName(entity.tsEntityName); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column => { + column.relations.forEach(relation => { + if (relation.ownerTable === entity.tsEntityName) { + relation.ownerTable = newName; + } + if (relation.relatedTable === entity.tsEntityName) { + relation.relatedTable = newName; + } + }); + }); + }); + entity.tsEntityName = newName; + }); + } + private static changeRelationNames( + dbModel: DatabaseModel, + namingStrategy: NamingStrategy + ) { + dbModel.entities.forEach(entity => { + entity.Columns.forEach(column => { + column.relations.forEach(relation => { + const newName = namingStrategy.relationName( + column.tsName, + relation, + dbModel + ); + dbModel.entities.forEach(entity2 => { + entity2.Columns.forEach(column2 => { + column2.relations.forEach(relation2 => { + if ( + relation2.relatedTable === + entity.tsEntityName && + relation2.ownerColumn === column.tsName + ) { + relation2.ownerColumn = newName; + } + if ( + relation2.relatedTable === + entity.tsEntityName && + relation2.relatedColumn === column.tsName + ) { + relation2.relatedColumn = newName; + } + if (relation.isOwner) { + entity.Indexes.forEach(ind => { + ind.columns + .filter( + col => + col.name === column.tsName + ) + .forEach( + col => (col.name = newName) + ); + }); + } + }); + }); + }); + column.tsName = newName; + }); + }); + }); + } } -export interface IEngineOptions { + +export interface IConnectionOptions { host: string; port: number; databaseName: string; user: string; password: string; - resultsPath: string; databaseType: string; schemaName: string; ssl: boolean; +} +export interface IGenerationOptions { + resultsPath: string; noConfigs: boolean; convertCaseFile: "pascal" | "param" | "camel" | "none"; convertCaseEntity: "pascal" | "camel" | "none"; diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index f04cf2e..a86f454 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -11,6 +11,10 @@ import { RelationInfo } from "../models/RelationInfo"; import * as TomgUtils from "../Utils"; export abstract class AbstractDriver { + public abstract standardPort: number; + public abstract standardSchema: string; + public abstract standardUser: string; + public ColumnTypesWithWidth: WithWidthColumnType[] = [ "tinyint", "smallint", @@ -53,7 +57,6 @@ export abstract class AbstractDriver { "binary", "varbinary" ]; - public namingStrategy: AbstractNamingStrategy; public generateRelationsIds: boolean; public abstract GetAllTablesQuery: ( @@ -64,104 +67,6 @@ export abstract class AbstractDriver { TABLE_NAME: string; }> >; - public changeColumnNames(dbModel: DatabaseModel) { - dbModel.entities.forEach(entity => { - entity.Columns.forEach(column => { - const newName = this.namingStrategy.columnName(column.tsName); - entity.Indexes.forEach(index => { - index.columns - .filter(column2 => column2.name === column.tsName) - .forEach(column2 => (column2.name = newName)); - }); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column2 => { - column2.relations - .filter( - relation => - relation.relatedTable === - entity.tsEntityName && - relation.relatedColumn === column.tsName - ) - .map(v => (v.relatedColumn = newName)); - column2.relations - .filter( - relation => - relation.relatedTable === - entity.tsEntityName && - relation.ownerColumn === column.tsName - ) - .map(v => (v.ownerColumn = newName)); - }); - }); - - column.tsName = newName; - }); - }); - } - public changeEntityNames(dbModel: DatabaseModel) { - dbModel.entities.forEach(entity => { - const newName = this.namingStrategy.entityName(entity.tsEntityName); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column => { - column.relations.forEach(relation => { - if (relation.ownerTable === entity.tsEntityName) { - relation.ownerTable = newName; - } - if (relation.relatedTable === entity.tsEntityName) { - relation.relatedTable = newName; - } - }); - }); - }); - entity.tsEntityName = newName; - }); - } - public changeRelationNames(dbModel: DatabaseModel) { - dbModel.entities.forEach(entity => { - entity.Columns.forEach(column => { - column.relations.forEach(relation => { - const newName = this.namingStrategy.relationName( - column.tsName, - relation, - dbModel - ); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column2 => { - column2.relations.forEach(relation2 => { - if ( - relation2.relatedTable === - entity.tsEntityName && - relation2.ownerColumn === column.tsName - ) { - relation2.ownerColumn = newName; - } - if ( - relation2.relatedTable === - entity.tsEntityName && - relation2.relatedColumn === column.tsName - ) { - relation2.relatedColumn = newName; - } - if (relation.isOwner) { - entity.Indexes.forEach(ind => { - ind.columns - .filter( - col => - col.name === column.tsName - ) - .forEach( - col => (col.name = newName) - ); - }); - } - }); - }); - }); - column.tsName = newName; - }); - }); - }); - } public FindManyToManyRelations(dbModel: DatabaseModel) { const manyToManyEntities = dbModel.entities.filter( @@ -242,12 +147,10 @@ export abstract class AbstractDriver { password: string, schema: string, ssl: boolean, - namingStrategy: AbstractNamingStrategy, relationIds: boolean ): Promise { this.generateRelationsIds = relationIds; const dbModel = {} as DatabaseModel; - this.namingStrategy = namingStrategy; await this.ConnectToServer(database, server, port, user, password, ssl); const sqlEscapedSchema = "'" + schema.split(",").join("','") + "'"; dbModel.entities = await this.GetAllTables(sqlEscapedSchema); @@ -260,7 +163,6 @@ export abstract class AbstractDriver { await this.DisconnectFromServer(); this.FindManyToManyRelations(dbModel); this.FindPrimaryColumnsFromIndexes(dbModel); - this.ApplyNamingStrategy(dbModel); return dbModel; } @@ -478,10 +380,4 @@ export abstract class AbstractDriver { public abstract async DropDB(dbName: string); public abstract async UseDB(dbName: string); public abstract async CheckIfDBExists(dbName: string): Promise; - - private ApplyNamingStrategy(dbModel: DatabaseModel) { - this.changeRelationNames(dbModel); - this.changeEntityNames(dbModel); - this.changeColumnNames(dbModel); - } } diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 14b7c21..c1638b7 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -5,6 +5,10 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class MssqlDriver extends AbstractDriver { + public readonly standardPort = 1433; + public readonly standardSchema = "dbo"; + public readonly standardUser = "sa"; + private Connection: MSSQL.ConnectionPool; public GetAllTablesQuery = async (schema: string) => { const request = new MSSQL.Request(this.Connection); diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 0753d75..1603644 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -6,6 +6,9 @@ import { AbstractDriver } from "./AbstractDriver"; export class MysqlDriver extends AbstractDriver { public readonly EngineName: string = "MySQL"; + public readonly standardPort = 3306; + public readonly standardUser = "root"; + public readonly standardSchema = ""; private Connection: MYSQL.Connection; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 75baece..0b5ca4e 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -4,6 +4,10 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class OracleDriver extends AbstractDriver { + public readonly standardPort = 1521; + public readonly standardUser = "SYS"; + public readonly standardSchema = ""; + public Oracle: any; private Connection: any /*Oracle.IConnection*/; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 4b8304a..58317ca 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -5,6 +5,10 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class PostgresDriver extends AbstractDriver { + public readonly standardPort = 5432; + public readonly standardUser = "postgres"; + public readonly standardSchema = "public"; + private Connection: PG.Client; public GetAllTablesQuery = async (schema: string) => { diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index ed7e6c6..cdab5b6 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -4,6 +4,10 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class SqliteDriver extends AbstractDriver { + public readonly standardPort = 0; + public readonly standardUser = ""; + public readonly standardSchema = ""; + public sqlite = require("sqlite3").verbose(); public db: any; public tablesWithGeneratedPrimaryKey: string[] = new Array(); diff --git a/src/index.ts b/src/index.ts index 8a4e903..5cc2ab7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,14 +1,7 @@ import path = require("path"); import * as Yargs from "yargs"; import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; -import { AbstractDriver } from "./drivers/AbstractDriver"; -import { MariaDbDriver } from "./drivers/MariaDbDriver"; -import { MssqlDriver } from "./drivers/MssqlDriver"; -import { MysqlDriver } from "./drivers/MysqlDriver"; -import { OracleDriver } from "./drivers/OracleDriver"; -import { PostgresDriver } from "./drivers/PostgresDriver"; -import { SqliteDriver } from "./drivers/SqliteDriver"; -import { Engine } from "./Engine"; +import { Engine, IConnectionOptions, IGenerationOptions } from "./Engine"; import { NamingStrategy } from "./NamingStrategy"; import * as TomgUtils from "./Utils"; @@ -112,46 +105,11 @@ const argv = Yargs.usage( describe: "Generate constructor allowing partial initialization" }).argv; -let driver: AbstractDriver; -let standardPort: number; -let standardSchema: string = ""; -let standardUser: string = ""; -switch (argv.e) { - case "mssql": - driver = new MssqlDriver(); - standardPort = 1433; - standardSchema = "dbo"; - standardUser = "sa"; - break; - case "postgres": - driver = new PostgresDriver(); - standardPort = 5432; - standardSchema = "public"; - standardUser = "postgres"; - break; - case "mysql": - driver = new MysqlDriver(); - standardPort = 3306; - standardUser = "root"; - break; - case "mariadb": - driver = new MariaDbDriver(); - standardPort = 3306; - standardUser = "root"; - break; - case "oracle": - driver = new OracleDriver(); - standardPort = 1521; - standardUser = "SYS"; - break; - case "sqlite": - driver = new SqliteDriver(); - standardPort = 0; - break; - default: - TomgUtils.LogError("Database engine not recognized.", false); - throw new Error("Database engine not recognized."); -} +const driver = Engine.createDriver(argv.e); +const standardPort = driver.standardPort; +const standardSchema = driver.standardPort; +const standardUser = driver.standardPort; + let namingStrategy: AbstractNamingStrategy; if (argv.namingStrategy && argv.namingStrategy !== "") { // tslint:disable-next-line:no-var-requires @@ -160,34 +118,39 @@ if (argv.namingStrategy && argv.namingStrategy !== "") { } else { namingStrategy = new NamingStrategy(); } - -const engine = new Engine(driver, { +const connectionOptions: IConnectionOptions = { + databaseName: argv.d ? argv.d.toString() : null, + databaseType: argv.e, + host: argv.h, + password: argv.x ? argv.x.toString() : null, + port: parseInt(argv.p, 10) || standardPort, + schemaName: argv.s ? argv.s.toString() : standardSchema, + ssl: argv.ssl, + user: argv.u ? argv.u.toString() : standardUser +}; +const generationOptions: IGenerationOptions = { + activeRecord: argv.a, constructor: argv.generateConstructor, convertCaseEntity: argv.ce, convertCaseFile: argv.cf, convertCaseProperty: argv.cp, - databaseName: argv.d ? argv.d.toString() : null, - databaseType: argv.e, - host: argv.h, lazy: argv.lazy, - activeRecord: argv.a, namingStrategy, noConfigs: argv.noConfig, - password: argv.x ? argv.x.toString() : null, - port: parseInt(argv.p, 10) || standardPort, propertyVisibility: argv.pv, relationIds: argv.relationIds, - resultsPath: argv.o ? argv.o.toString() : null, - schemaName: argv.s ? argv.s.toString() : standardSchema, - ssl: argv.ssl, - user: argv.u ? argv.u.toString() : standardUser -}); + resultsPath: argv.o ? argv.o.toString() : null +}; console.log(TomgUtils.packageVersion()); console.log( `[${new Date().toLocaleTimeString()}] Starting creation of model classes.` ); -engine.createModelFromDatabase().then(() => { +Engine.createModelFromDatabase( + driver, + connectionOptions, + generationOptions +).then(() => { console.info( `[${new Date().toLocaleTimeString()}] Typeorm model classes created.` ); diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index be80d21..50dfe69 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -28,7 +28,6 @@ describe('MssqlDriver', function () { beforeEach(() => { driver = new MssqlDriver(); - driver.namingStrategy = new NamingStrategy(); }) afterEach(() => { diff --git a/test/integration/defaultValues.test.ts b/test/integration/defaultValues.test.ts index 2e536af..33d3b17 100644 --- a/test/integration/defaultValues.test.ts +++ b/test/integration/defaultValues.test.ts @@ -7,8 +7,10 @@ import { EntityFileToJson } from "../utils/EntityFileToJson"; const chai = require('chai'); const chaiSubset = require('chai-subset'); import * as ts from "typescript"; -import { Engine } from "../../src/Engine"; +import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; import * as GTU from "../utils/GeneralTestUtils" +import { AbstractDriver } from "../../src/drivers/AbstractDriver"; +import { Exception } from "handlebars"; chai.use(chaiSubset); @@ -16,13 +18,7 @@ describe("Column default values", async function () { this.timeout(30000) this.slow(5000)// compiling created models takes time - const dbDrivers: string[] = [] - if (process.env.SQLITE_Skip == '0') { dbDrivers.push('sqlite') } - if (process.env.POSTGRES_Skip == '0') { dbDrivers.push('postgres') } - if (process.env.MYSQL_Skip == '0') { dbDrivers.push('mysql') } - if (process.env.MARIADB_Skip == '0') { dbDrivers.push('mariadb') } - if (process.env.MSSQL_Skip == '0') { dbDrivers.push('mssql') } - if (process.env.ORACLE_Skip == '0') { dbDrivers.push('oracle') } + const dbDrivers: string[] = GTU.getEnabledDbDrivers(); const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/defaultValues') const examplesPathTS = path.resolve(process.cwd(), 'test/integration/defaultValues') @@ -38,33 +34,10 @@ describe("Column default values", async function () { const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) - let engine: Engine; - switch (dbDriver) { - case 'sqlite': - engine = await GTU.createSQLiteModels(filesOrgPathJS, resultsPath) - break; - case 'postgres': - engine = await GTU.createPostgresModels(filesOrgPathJS, resultsPath) - break; - case 'mysql': - engine = await GTU.createMysqlModels(filesOrgPathJS, resultsPath) - break; - case 'mariadb': - engine = await GTU.createMariaDBModels(filesOrgPathJS, resultsPath) - break; - case 'mssql': - engine = await GTU.createMSSQLModels(filesOrgPathJS, resultsPath) - break; - case 'oracle': - engine = await GTU.createOracleDBModels(filesOrgPathJS, resultsPath) - break; - default: - console.log(`Unknown engine type`); - engine = {} as Engine - break; - } + const driver = Engine.createDriver(dbDriver); + const [connectionOptions, generationOptions] = await GTU.getDriverAndOptions(dbDriver, filesOrgPathJS, resultsPath); - await engine.createModelFromDatabase() + await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) diff --git a/test/integration/entityTypes.test.ts b/test/integration/entityTypes.test.ts index aa3fc63..071b5bd 100644 --- a/test/integration/entityTypes.test.ts +++ b/test/integration/entityTypes.test.ts @@ -7,8 +7,10 @@ import { EntityFileToJson } from "../utils/EntityFileToJson"; const chai = require('chai'); const chaiSubset = require('chai-subset'); import * as ts from "typescript"; -import { Engine } from "../../src/Engine"; +import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; import * as GTU from "../utils/GeneralTestUtils" +import { AbstractDriver } from "../../src/drivers/AbstractDriver"; +import { Exception } from "handlebars"; chai.use(chaiSubset); @@ -16,13 +18,7 @@ describe("Platform specyfic types", async function () { this.timeout(30000) this.slow(5000)// compiling created models takes time - const dbDrivers: string[] = [] - if (process.env.SQLITE_Skip == '0') { dbDrivers.push('sqlite') } - if (process.env.POSTGRES_Skip == '0') { dbDrivers.push('postgres') } - if (process.env.MYSQL_Skip == '0') { dbDrivers.push('mysql') } - if (process.env.MARIADB_Skip == '0') { dbDrivers.push('mariadb') } - if (process.env.MSSQL_Skip == '0') { dbDrivers.push('mssql') } - if (process.env.ORACLE_Skip == '0') { dbDrivers.push('oracle') } + const dbDrivers: string[] = GTU.getEnabledDbDrivers(); const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/entityTypes') const examplesPathTS = path.resolve(process.cwd(), 'test/integration/entityTypes') @@ -38,33 +34,10 @@ describe("Platform specyfic types", async function () { const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) - let engine: Engine; - switch (dbDriver) { - case 'sqlite': - engine = await GTU.createSQLiteModels(filesOrgPathJS, resultsPath) - break; - case 'postgres': - engine = await GTU.createPostgresModels(filesOrgPathJS, resultsPath) - break; - case 'mysql': - engine = await GTU.createMysqlModels(filesOrgPathJS, resultsPath) - break; - case 'mariadb': - engine = await GTU.createMariaDBModels(filesOrgPathJS, resultsPath) - break; - case 'mssql': - engine = await GTU.createMSSQLModels(filesOrgPathJS, resultsPath) - break; - case 'oracle': - engine = await GTU.createOracleDBModels(filesOrgPathJS, resultsPath) - break; - default: - console.log(`Unknown engine type`); - engine = {} as Engine - break; - } + const driver = Engine.createDriver(dbDriver); + const [connectionOptions, generationOptions] = await GTU.getDriverAndOptions(dbDriver, filesOrgPathJS, resultsPath); - await engine.createModelFromDatabase() + await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index 1b33c4b..21aea8f 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -5,12 +5,13 @@ import path = require('path') import "reflect-metadata"; import * as Sinon from 'sinon' import { Connection, ConnectionOptions, createConnection } from "typeorm"; -import { Engine } from "../../src/Engine"; +import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; import { EntityFileToJson } from "../utils/EntityFileToJson"; const chai = require('chai'); const chaiSubset = require('chai-subset'); import * as ts from "typescript"; import * as GTU from "../utils/GeneralTestUtils" +import { AbstractDriver } from "../../src/drivers/AbstractDriver"; chai.use(chaiSubset); @@ -19,13 +20,7 @@ describe("GitHub issues", async function () { this.timeout(30000) this.slow(5000)// compiling created models takes time - const dbDrivers: string[] = [] - if (process.env.SQLITE_Skip == '0') { dbDrivers.push('sqlite') } - if (process.env.POSTGRES_Skip == '0') { dbDrivers.push('postgres') } - if (process.env.MYSQL_Skip == '0') { dbDrivers.push('mysql') } - if (process.env.MARIADB_Skip == '0') { dbDrivers.push('mariadb') } - if (process.env.MSSQL_Skip == '0') { dbDrivers.push('mssql') } - if (process.env.ORACLE_Skip == '0') { dbDrivers.push('oracle') } + const dbDrivers: string[] = GTU.getEnabledDbDrivers(); const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/github-issues') const examplesPathTS = path.resolve(process.cwd(), 'test/integration/github-issues') @@ -53,41 +48,18 @@ describe("GitHub issues", async function () { const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) - let engine: Engine; - switch (dbDriver) { - case 'sqlite': - engine = await GTU.createSQLiteModels(filesOrgPathJS, resultsPath) - break; - case 'postgres': - engine = await GTU.createPostgresModels(filesOrgPathJS, resultsPath) - break; - case 'mysql': - engine = await GTU.createMysqlModels(filesOrgPathJS, resultsPath) - break; - case 'mariadb': - engine = await GTU.createMariaDBModels(filesOrgPathJS, resultsPath) - break; - case 'mssql': - engine = await GTU.createMSSQLModels(filesOrgPathJS, resultsPath) - break; - case 'oracle': - engine = await GTU.createOracleDBModels(filesOrgPathJS, resultsPath) - break; - default: - console.log(`Unknown engine type`); - engine = {} as Engine - break; - } + const driver = Engine.createDriver(dbDriver); + const [connectionOptions, generationOptions] = await GTU.getDriverAndOptions(dbDriver, filesOrgPathJS, resultsPath); switch (folder) { case '65': - engine.Options.relationIds = true; + generationOptions.relationIds = true; break; default: break; } - await engine.createModelFromDatabase() + await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index 516d88c..0ee219c 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -3,12 +3,13 @@ import { expect } from "chai"; import fs = require('fs-extra'); import path = require('path') import "reflect-metadata"; -import { Engine } from "../../src/Engine"; +import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; import { EntityFileToJson } from "../utils/EntityFileToJson"; const chai = require('chai'); const chaiSubset = require('chai-subset'); import * as ts from "typescript"; import * as GTU from "../utils/GeneralTestUtils" +import { AbstractDriver } from "../../src/drivers/AbstractDriver"; chai.use(chaiSubset); @@ -16,13 +17,8 @@ describe("TypeOrm examples", async function () { this.timeout(30000) this.slow(5000)// compiling created models takes time - const dbDrivers: string[] = [] - if (process.env.SQLITE_Skip == '0') { dbDrivers.push('sqlite') } - if (process.env.POSTGRES_Skip == '0') { dbDrivers.push('postgres') } - if (process.env.MYSQL_Skip == '0') { dbDrivers.push('mysql') } - if (process.env.MARIADB_Skip == '0') { dbDrivers.push('mariadb') } - if (process.env.MSSQL_Skip == '0') { dbDrivers.push('mssql') } - if (process.env.ORACLE_Skip == '0') { dbDrivers.push('oracle') } + + const dbDrivers: string[] = GTU.getEnabledDbDrivers(); const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/examples') const examplesPathTS = path.resolve(process.cwd(), 'test/integration/examples') @@ -37,36 +33,14 @@ describe("TypeOrm examples", async function () { const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) - let engine: Engine; - switch (dbDriver) { - case 'sqlite': - engine = await GTU.createSQLiteModels(filesOrgPathJS, resultsPath) - break; - case 'postgres': - engine = await GTU.createPostgresModels(filesOrgPathJS, resultsPath) - break; - case 'mysql': - engine = await GTU.createMysqlModels(filesOrgPathJS, resultsPath) - break; - case 'mariadb': - engine = await GTU.createMariaDBModels(filesOrgPathJS, resultsPath) - break; - case 'mssql': - engine = await GTU.createMSSQLModels(filesOrgPathJS, resultsPath) - break; - case 'oracle': - engine = await GTU.createOracleDBModels(filesOrgPathJS, resultsPath) - break; - default: - console.log(`Unknown engine type`); - engine = {} as Engine - break; - } + const driver=Engine.createDriver(dbDriver); + const [connectionOptions, generationOptions] = await GTU.getDriverAndOptions(dbDriver, filesOrgPathJS, resultsPath); + if (folder == 'sample18-lazy-relations') { - engine.Options.lazy = true; + generationOptions.lazy = true; } - await engine.createModelFromDatabase() + await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index d481785..267437b 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -10,10 +10,26 @@ import { MysqlDriver } from "../../src/drivers/MysqlDriver"; import { OracleDriver } from "../../src/drivers/OracleDriver"; import { PostgresDriver } from "../../src/drivers/PostgresDriver"; import { SqliteDriver } from "../../src/drivers/SqliteDriver"; -import { Engine } from "../../src/Engine"; +import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; import { NamingStrategy } from "../../src/NamingStrategy"; -export async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Promise { +export function getGenerationOptions():IGenerationOptions{ + return { + resultsPath: "", + noConfigs: false, + convertCaseEntity: 'none', + convertCaseFile: 'none', + convertCaseProperty: 'none', + propertyVisibility: 'none', + lazy: false, + constructor: false, + namingStrategy: new NamingStrategy(), + relationIds: false, + activeRecord: false + } +} + +export async function createMSSQLModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new MssqlDriver(); @@ -48,33 +64,6 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin if (conn.isConnected) { await conn.close() } - - const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); - - driver = new MssqlDriver(); - const engine = new Engine( - driver, { - host: String(process.env.MSSQL_Host), - port: Number(process.env.MSSQL_Port), - databaseName: String(process.env.MSSQL_Database), - user: String(process.env.MSSQL_Username), - password: String(process.env.MSSQL_Password), - databaseType: 'mssql', - resultsPath, - schemaName: 'dbo,sch1,sch2', - ssl: yn(process.env.MSSQL_SSL), - noConfigs: false, - convertCaseEntity: 'none', - convertCaseFile: 'none', - convertCaseProperty: 'none', - propertyVisibility: 'none', - lazy: false, - constructor: false, - namingStrategy, - relationIds: false, - activeRecord: false - }); - conn = await createConnection(connOpt) queryRunner = conn.createQueryRunner() for (const sch of schemas.split(',')) { @@ -85,10 +74,22 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin await conn.close() } - return engine; + const connectionOptions:IConnectionOptions = { + host: String(process.env.MSSQL_Host), + port: Number(process.env.MSSQL_Port), + databaseName: String(process.env.MSSQL_Database), + user: String(process.env.MSSQL_Username), + password: String(process.env.MSSQL_Password), + databaseType: 'mssql', + schemaName: 'dbo,sch1,sch2', + ssl: yn(process.env.MSSQL_SSL), + } + + + return connectionOptions; } -export async function createPostgresModels(filesOrgPath: string, resultsPath: string): Promise { +export async function createPostgresModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new PostgresDriver(); await driver.ConnectToServer(`postgres`, String(process.env.POSTGRES_Host), Number(process.env.POSTGRES_Port), String(process.env.POSTGRES_Username), String(process.env.POSTGRES_Password), yn(process.env.POSTGRES_SSL)); @@ -122,46 +123,34 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st if (conn.isConnected) { await conn.close() } - const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); - driver = new PostgresDriver(); - const engine = new Engine( - driver, { - host: String(process.env.POSTGRES_Host), - port: Number(process.env.POSTGRES_Port), - databaseName: String(process.env.POSTGRES_Database), - user: String(process.env.POSTGRES_Username), - password: String(process.env.POSTGRES_Password), - databaseType: 'postgres', - resultsPath, - schemaName: 'public,sch1,sch2', - ssl: yn(process.env.POSTGRES_SSL), - noConfigs: false, - convertCaseEntity: 'none', - convertCaseFile: 'none', - convertCaseProperty: 'none', - propertyVisibility: 'none', - lazy: false, - constructor: false, - namingStrategy, - relationIds: false, - activeRecord: false - }); + conn = await createConnection(connOpt) + queryRunner = conn.createQueryRunner() + for (const sch of schemas.split(',')) { + await queryRunner.createSchema(sch, true); + } + await conn.synchronize(); + if (conn.isConnected) { + await conn.close() + } + + + const connectionOptions:IConnectionOptions={ + host: String(process.env.POSTGRES_Host), + port: Number(process.env.POSTGRES_Port), + databaseName: String(process.env.POSTGRES_Database), + user: String(process.env.POSTGRES_Username), + password: String(process.env.POSTGRES_Password), + databaseType: 'postgres', + schemaName: 'public,sch1,sch2', + ssl: yn(process.env.POSTGRES_SSL), - conn = await createConnection(connOpt) - queryRunner = conn.createQueryRunner() - for (const sch of schemas.split(',')) { - await queryRunner.createSchema(sch, true); - } - await conn.synchronize(); - if (conn.isConnected) { - await conn.close() } - return engine; + return connectionOptions; } -export async function createSQLiteModels(filesOrgPath: string, resultsPath: string): Promise { +export async function createSQLiteModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new SqliteDriver(); await driver.ConnectToServer(String(process.env.SQLITE_Database), '', 0, '', '', false); @@ -187,32 +176,6 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri if (conn.isConnected) { await conn.close() } - const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); - - driver = new SqliteDriver(); - const engine = new Engine( - driver, { - host: '', - port: 0, - databaseName: String(process.env.SQLITE_Database), - user: '', - password: '', - databaseType: 'sqlite', - resultsPath, - schemaName: '', - ssl: false, - noConfigs: false, - convertCaseEntity: 'none', - convertCaseFile: 'none', - convertCaseProperty: 'none', - propertyVisibility: 'none', - lazy: false, - constructor: false, - namingStrategy, - relationIds: false, - activeRecord: false - }); - conn = await createConnection(connOpt) queryRunner = conn.createQueryRunner() await conn.synchronize(); @@ -220,10 +183,23 @@ export async function createSQLiteModels(filesOrgPath: string, resultsPath: stri await conn.close() } - return engine; + + const connectionOptions:IConnectionOptions={ + host: '', + port: 0, + databaseName: String(process.env.SQLITE_Database), + user: '', + password: '', + databaseType: 'sqlite', + schemaName: '', + ssl: false, + + } + + return connectionOptions; } -export async function createMysqlModels(filesOrgPath: string, resultsPath: string): Promise { +export async function createMysqlModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new MysqlDriver(); await driver.ConnectToServer(String(process.env.MYSQL_Database), String(process.env.MYSQL_Host), Number(process.env.MYSQL_Port), String(process.env.MYSQL_Username), String(process.env.MYSQL_Password), yn(process.env.MYSQL_SSL)); @@ -250,35 +226,23 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin if (conn.isConnected) { await conn.close() } - const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); - driver = new MysqlDriver(); - const engine = new Engine( - driver, { - host: String(process.env.MYSQL_Host), - port: Number(process.env.MYSQL_Port), - databaseName: String(process.env.MYSQL_Database), - user: String(process.env.MYSQL_Username), - password: String(process.env.MYSQL_Password), - databaseType: 'mysql', - resultsPath, - schemaName: 'ignored', - ssl: yn(process.env.MYSQL_SSL), - noConfigs: false, - convertCaseEntity: 'none', - convertCaseFile: 'none', - convertCaseProperty: 'none', - propertyVisibility: 'none', - lazy: false, - constructor: false, - namingStrategy, - relationIds: false, - activeRecord: false - }); - return engine; + const connectionOptions:IConnectionOptions={ + host: String(process.env.MYSQL_Host), + port: Number(process.env.MYSQL_Port), + databaseName: String(process.env.MYSQL_Database), + user: String(process.env.MYSQL_Username), + password: String(process.env.MYSQL_Password), + databaseType: 'mysql', + schemaName: 'ignored', + ssl: yn(process.env.MYSQL_SSL), + + } + + return connectionOptions; } -export async function createMariaDBModels(filesOrgPath: string, resultsPath: string): Promise { +export async function createMariaDBModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new MariaDbDriver(); await driver.ConnectToServer(String(process.env.MARIADB_Database), String(process.env.MARIADB_Host), Number(process.env.MARIADB_Port), String(process.env.MARIADB_Username), String(process.env.MARIADB_Password), yn(process.env.MARIADB_SSL)); @@ -305,38 +269,24 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str if (conn.isConnected) { await conn.close() } - const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); - - driver = new MariaDbDriver(); - const engine = new Engine( - driver, { - host: String(process.env.MARIADB_Host), - port: Number(process.env.MARIADB_Port), - databaseName: String(process.env.MARIADB_Database), - user: String(process.env.MARIADB_Username), - password: String(process.env.MARIADB_Password), - databaseType: 'mariadb', - resultsPath, - schemaName: 'ignored', - ssl: yn(process.env.MARIADB_SSL), - noConfigs: false, - convertCaseEntity: 'none', - convertCaseFile: 'none', - convertCaseProperty: 'none', - propertyVisibility: 'none', - lazy: false, - constructor: false, - namingStrategy, - relationIds: false, - activeRecord: false - }); + const connectionOptions:IConnectionOptions={ + host: String(process.env.MARIADB_Host), + port: Number(process.env.MARIADB_Port), + databaseName: String(process.env.MARIADB_Database), + user: String(process.env.MARIADB_Username), + password: String(process.env.MARIADB_Password), + databaseType: 'mariadb', + schemaName: 'ignored', + ssl: yn(process.env.MARIADB_SSL), - return engine; + } + + return connectionOptions; } -export async function createOracleDBModels(filesOrgPath: string, resultsPath: string): Promise { +export async function createOracleDBModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new OracleDriver(); await driver.ConnectToServer(String(process.env.ORACLE_Database), String(process.env.ORACLE_Host), Number(process.env.ORACLE_Port), String(process.env.ORACLE_UsernameSys), String(process.env.ORACLE_PasswordSys), yn(process.env.ORACLE_SSL)); @@ -363,33 +313,20 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st if (conn.isConnected) { await conn.close() } - const namingStrategy: AbstractNamingStrategy = new NamingStrategy(); - driver = new OracleDriver(); - const engine = new Engine( - driver, { - host: String(process.env.ORACLE_Host), - port: Number(process.env.ORACLE_Port), - databaseName: String(process.env.ORACLE_Database), - user: String(process.env.ORACLE_Username), - password: String(process.env.ORACLE_Password), - databaseType: 'oracle', - resultsPath, - schemaName: String(process.env.ORACLE_Username), - ssl: yn(process.env.ORACLE_SSL), - noConfigs: false, - convertCaseEntity: 'none', - convertCaseFile: 'none', - convertCaseProperty: 'none', - propertyVisibility: 'none', - lazy: false, - constructor: false, - namingStrategy, - relationIds: false, - activeRecord: false - }); + const connectionOptions:IConnectionOptions = { + host: String(process.env.ORACLE_Host), + port: Number(process.env.ORACLE_Port), + databaseName: String(process.env.ORACLE_Database), + user: String(process.env.ORACLE_Username), + password: String(process.env.ORACLE_Password), + databaseType: 'oracle', + schemaName: String(process.env.ORACLE_Username), + ssl: yn(process.env.ORACLE_SSL), - return engine; + } + + return connectionOptions; } export function compileTsFiles(fileNames: string[], options: ts.CompilerOptions): boolean { @@ -409,3 +346,58 @@ export function compileTsFiles(fileNames: string[], options: ts.CompilerOptions) return compileErrors; } + +export function getEnabledDbDrivers() { + const dbDrivers: string[] = []; + if (process.env.SQLITE_Skip == '0') { + dbDrivers.push('sqlite'); + } + if (process.env.POSTGRES_Skip == '0') { + dbDrivers.push('postgres'); + } + if (process.env.MYSQL_Skip == '0') { + dbDrivers.push('mysql'); + } + if (process.env.MARIADB_Skip == '0') { + dbDrivers.push('mariadb'); + } + if (process.env.MSSQL_Skip == '0') { + dbDrivers.push('mssql'); + } + if (process.env.ORACLE_Skip == '0') { + dbDrivers.push('oracle'); + } + return dbDrivers; +} + +export async function getDriverAndOptions(dbDriver: string, filesOrgPathJS: string, resultsPath: string): Promise<[IConnectionOptions,IGenerationOptions]> { + + let connectionOptions: IConnectionOptions; + let generationOptions = getGenerationOptions(); + switch (dbDriver) { + case 'sqlite': + connectionOptions = await createSQLiteModels(filesOrgPathJS); + break; + case 'postgres': + connectionOptions = await createPostgresModels(filesOrgPathJS); + break; + case 'mysql': + connectionOptions = await createMysqlModels(filesOrgPathJS); + break; + case 'mariadb': + connectionOptions = await createMariaDBModels(filesOrgPathJS); + break; + case 'mssql': + connectionOptions = await createMSSQLModels(filesOrgPathJS); + break; + case 'oracle': + connectionOptions = await createOracleDBModels(filesOrgPathJS); + break; + default: + console.log(`Unknown engine type`); + throw new Error("Unknown engine type"); + } + generationOptions.resultsPath = resultsPath; + return [connectionOptions, generationOptions]; +} + From c34f2912e0e466902c7953cdb222a886b0646fb6 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Mon, 21 Jan 2019 23:51:25 +0100 Subject: [PATCH 092/130] refactorings --- src/drivers/AbstractDriver.ts | 1 - test/integration/defaultValues.test.ts | 11 ++- test/integration/entityTypes.test.ts | 11 ++- test/integration/githubIssues.test.ts | 12 ++- test/integration/integration.test.ts | 11 ++- test/utils/GeneralTestUtils.ts | 103 +++++++------------------ 6 files changed, 47 insertions(+), 102 deletions(-) diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index a86f454..7570cfa 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -3,7 +3,6 @@ import { WithPrecisionColumnType, WithWidthColumnType } from "typeorm/driver/types/ColumnTypes"; -import { AbstractNamingStrategy } from "../AbstractNamingStrategy"; import { ColumnInfo } from "../models/ColumnInfo"; import { DatabaseModel } from "../models/DatabaseModel"; import { EntityInfo } from "../models/EntityInfo"; diff --git a/test/integration/defaultValues.test.ts b/test/integration/defaultValues.test.ts index 33d3b17..a840a47 100644 --- a/test/integration/defaultValues.test.ts +++ b/test/integration/defaultValues.test.ts @@ -4,13 +4,11 @@ import fs = require('fs-extra'); import path = require('path') import "reflect-metadata"; import { EntityFileToJson } from "../utils/EntityFileToJson"; -const chai = require('chai'); -const chaiSubset = require('chai-subset'); +import chai = require('chai'); +import chaiSubset = require('chai-subset'); import * as ts from "typescript"; -import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; +import { Engine } from "../../src/Engine"; import * as GTU from "../utils/GeneralTestUtils" -import { AbstractDriver } from "../../src/drivers/AbstractDriver"; -import { Exception } from "handlebars"; chai.use(chaiSubset); @@ -35,7 +33,8 @@ describe("Column default values", async function () { fs.removeSync(resultsPath) const driver = Engine.createDriver(dbDriver); - const [connectionOptions, generationOptions] = await GTU.getDriverAndOptions(dbDriver, filesOrgPathJS, resultsPath); + const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); + const generationOptions = GTU.getGenerationOptions(resultsPath); await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') diff --git a/test/integration/entityTypes.test.ts b/test/integration/entityTypes.test.ts index 071b5bd..d39d831 100644 --- a/test/integration/entityTypes.test.ts +++ b/test/integration/entityTypes.test.ts @@ -4,13 +4,11 @@ import fs = require('fs-extra'); import path = require('path') import "reflect-metadata"; import { EntityFileToJson } from "../utils/EntityFileToJson"; -const chai = require('chai'); -const chaiSubset = require('chai-subset'); +import chai = require('chai'); +import chaiSubset = require('chai-subset'); import * as ts from "typescript"; -import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; +import { Engine } from "../../src/Engine"; import * as GTU from "../utils/GeneralTestUtils" -import { AbstractDriver } from "../../src/drivers/AbstractDriver"; -import { Exception } from "handlebars"; chai.use(chaiSubset); @@ -35,7 +33,8 @@ describe("Platform specyfic types", async function () { fs.removeSync(resultsPath) const driver = Engine.createDriver(dbDriver); - const [connectionOptions, generationOptions] = await GTU.getDriverAndOptions(dbDriver, filesOrgPathJS, resultsPath); + const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); + const generationOptions = GTU.getGenerationOptions(resultsPath); await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index 21aea8f..ddb9b4a 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -3,15 +3,12 @@ import { expect } from "chai"; import fs = require('fs-extra'); import path = require('path') import "reflect-metadata"; -import * as Sinon from 'sinon' -import { Connection, ConnectionOptions, createConnection } from "typeorm"; -import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; +import { Engine } from "../../src/Engine"; import { EntityFileToJson } from "../utils/EntityFileToJson"; -const chai = require('chai'); -const chaiSubset = require('chai-subset'); +import chai = require('chai'); +import chaiSubset = require('chai-subset'); import * as ts from "typescript"; import * as GTU from "../utils/GeneralTestUtils" -import { AbstractDriver } from "../../src/drivers/AbstractDriver"; chai.use(chaiSubset); @@ -49,7 +46,8 @@ describe("GitHub issues", async function () { fs.removeSync(resultsPath) const driver = Engine.createDriver(dbDriver); - const [connectionOptions, generationOptions] = await GTU.getDriverAndOptions(dbDriver, filesOrgPathJS, resultsPath); + const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); + const generationOptions = GTU.getGenerationOptions(resultsPath); switch (folder) { case '65': diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index 0ee219c..edf6401 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -3,13 +3,12 @@ import { expect } from "chai"; import fs = require('fs-extra'); import path = require('path') import "reflect-metadata"; -import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; +import { Engine } from "../../src/Engine"; import { EntityFileToJson } from "../utils/EntityFileToJson"; -const chai = require('chai'); -const chaiSubset = require('chai-subset'); +import chai = require('chai'); +import chaiSubset = require('chai-subset'); import * as ts from "typescript"; import * as GTU from "../utils/GeneralTestUtils" -import { AbstractDriver } from "../../src/drivers/AbstractDriver"; chai.use(chaiSubset); @@ -17,7 +16,6 @@ describe("TypeOrm examples", async function () { this.timeout(30000) this.slow(5000)// compiling created models takes time - const dbDrivers: string[] = GTU.getEnabledDbDrivers(); const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/examples') @@ -34,7 +32,8 @@ describe("TypeOrm examples", async function () { fs.removeSync(resultsPath) const driver=Engine.createDriver(dbDriver); - const [connectionOptions, generationOptions] = await GTU.getDriverAndOptions(dbDriver, filesOrgPathJS, resultsPath); + const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); + const generationOptions = GTU.getGenerationOptions(resultsPath); if (folder == 'sample18-lazy-relations') { generationOptions.lazy = true; diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index 267437b..a710ded 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -2,7 +2,6 @@ import path = require('path') import { ConnectionOptions, createConnection } from "typeorm"; import * as ts from "typescript"; import * as yn from "yn" -import { AbstractNamingStrategy } from "../../src/AbstractNamingStrategy"; import { AbstractDriver } from "../../src/drivers/AbstractDriver"; import { MariaDbDriver } from "../../src/drivers/MariaDbDriver"; import { MssqlDriver } from "../../src/drivers/MssqlDriver"; @@ -10,22 +9,22 @@ import { MysqlDriver } from "../../src/drivers/MysqlDriver"; import { OracleDriver } from "../../src/drivers/OracleDriver"; import { PostgresDriver } from "../../src/drivers/PostgresDriver"; import { SqliteDriver } from "../../src/drivers/SqliteDriver"; -import { Engine, IConnectionOptions, IGenerationOptions } from "../../src/Engine"; +import { IConnectionOptions, IGenerationOptions } from "../../src/Engine"; import { NamingStrategy } from "../../src/NamingStrategy"; -export function getGenerationOptions():IGenerationOptions{ +export function getGenerationOptions(resultsPath: string): IGenerationOptions { return { - resultsPath: "", - noConfigs: false, - convertCaseEntity: 'none', - convertCaseFile: 'none', - convertCaseProperty: 'none', - propertyVisibility: 'none', - lazy: false, - constructor: false, - namingStrategy: new NamingStrategy(), - relationIds: false, - activeRecord: false + resultsPath: resultsPath, + noConfigs: false, + convertCaseEntity: 'none', + convertCaseFile: 'none', + convertCaseProperty: 'none', + propertyVisibility: 'none', + lazy: false, + constructor: false, + namingStrategy: new NamingStrategy(), + relationIds: false, + activeRecord: false } } @@ -61,20 +60,11 @@ export async function createMSSQLModels(filesOrgPath: string): Promise { - - let connectionOptions: IConnectionOptions; - let generationOptions = getGenerationOptions(); - switch (dbDriver) { +export function createModelsInDb(dbDriver: string, filesOrgPathJS: string): Promise { + switch (dbDriver) { case 'sqlite': - connectionOptions = await createSQLiteModels(filesOrgPathJS); - break; + return createSQLiteModels(filesOrgPathJS); case 'postgres': - connectionOptions = await createPostgresModels(filesOrgPathJS); - break; + return createPostgresModels(filesOrgPathJS); case 'mysql': - connectionOptions = await createMysqlModels(filesOrgPathJS); - break; + return createMysqlModels(filesOrgPathJS); case 'mariadb': - connectionOptions = await createMariaDBModels(filesOrgPathJS); - break; + return createMariaDBModels(filesOrgPathJS); case 'mssql': - connectionOptions = await createMSSQLModels(filesOrgPathJS); - break; + return createMSSQLModels(filesOrgPathJS); case 'oracle': - connectionOptions = await createOracleDBModels(filesOrgPathJS); - break; + return createOracleDBModels(filesOrgPathJS); default: console.log(`Unknown engine type`); throw new Error("Unknown engine type"); } - generationOptions.resultsPath = resultsPath; - return [connectionOptions, generationOptions]; } - From dd59fd3ecae59b8045ac9a9984f6d96cbc8617d6 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 22 Jan 2019 15:58:57 +0100 Subject: [PATCH 093/130] more refactorings --- src/AbstractNamingStrategy.ts | 4 +- src/Engine.ts | 570 ++++++++++++------------- src/NamingStrategy.ts | 6 +- src/drivers/AbstractDriver.ts | 60 +-- src/drivers/MssqlDriver.ts | 22 +- src/drivers/MysqlDriver.ts | 32 +- src/drivers/OracleDriver.ts | 32 +- src/drivers/PostgresDriver.ts | 22 +- src/drivers/SqliteDriver.ts | 12 +- src/index.ts | 25 +- src/models/DatabaseModel.ts | 4 - test/integration/defaultValues.test.ts | 6 +- test/integration/entityTypes.test.ts | 6 +- test/integration/githubIssues.test.ts | 6 +- test/integration/integration.test.ts | 6 +- test/utils/GeneralTestUtils.ts | 143 +++---- 16 files changed, 450 insertions(+), 506 deletions(-) delete mode 100644 src/models/DatabaseModel.ts diff --git a/src/AbstractNamingStrategy.ts b/src/AbstractNamingStrategy.ts index b739cd2..ee3b9ee 100644 --- a/src/AbstractNamingStrategy.ts +++ b/src/AbstractNamingStrategy.ts @@ -1,11 +1,11 @@ -import { DatabaseModel } from "./models/DatabaseModel"; +import { EntityInfo } from "./models/EntityInfo"; import { RelationInfo } from "./models/RelationInfo"; export abstract class AbstractNamingStrategy { public abstract relationName( columnName: string, relation: RelationInfo, - dbModel: DatabaseModel + dbModel: EntityInfo[] ): string; public abstract entityName(entityName: string): string; diff --git a/src/Engine.ts b/src/Engine.ts index 42c78d5..379a5f2 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -10,213 +10,207 @@ import { MysqlDriver } from "./drivers/MysqlDriver"; import { OracleDriver } from "./drivers/OracleDriver"; import { PostgresDriver } from "./drivers/PostgresDriver"; import { SqliteDriver } from "./drivers/SqliteDriver"; -import { DatabaseModel } from "./models/DatabaseModel"; +import { EntityInfo } from "./models/EntityInfo"; import { NamingStrategy } from "./NamingStrategy"; import * as TomgUtils from "./Utils"; -export class Engine { - public static createDriver(driverName: string): AbstractDriver { - switch (driverName) { - case "mssql": - return new MssqlDriver(); - case "postgres": - return new PostgresDriver(); - case "mysql": - return new MysqlDriver(); - case "mariadb": - return new MariaDbDriver(); - case "oracle": - return new OracleDriver(); - case "sqlite": - return new SqliteDriver(); - default: - TomgUtils.LogError("Database engine not recognized.", false); - throw new Error("Database engine not recognized."); - } +export function createDriver(driverName: string): AbstractDriver { + switch (driverName) { + case "mssql": + return new MssqlDriver(); + case "postgres": + return new PostgresDriver(); + case "mysql": + return new MysqlDriver(); + case "mariadb": + return new MariaDbDriver(); + case "oracle": + return new OracleDriver(); + case "sqlite": + return new SqliteDriver(); + default: + TomgUtils.LogError("Database engine not recognized.", false); + throw new Error("Database engine not recognized."); } +} - public static async createModelFromDatabase( - driver: AbstractDriver, - connectionOptions: IConnectionOptions, - generationOptions: IGenerationOptions - ): Promise { - const dbModel = await driver.GetDataFromServer( - connectionOptions.databaseName, - connectionOptions.host, - connectionOptions.port, - connectionOptions.user, - connectionOptions.password, - connectionOptions.schemaName, - connectionOptions.ssl, - generationOptions.relationIds - ); - if (dbModel.entities.length > 0) { - this.ApplyNamingStrategy(dbModel, generationOptions.namingStrategy); - this.createModelFromMetadata( - dbModel, - connectionOptions, - generationOptions - ); - } else { - TomgUtils.LogError( - "Tables not found in selected database. Skipping creation of typeorm model.", - false - ); - } - return true; - } - - private static createModelFromMetadata( - databaseModel: DatabaseModel, - connectionOptions: IConnectionOptions, - generationOptions: IGenerationOptions - ) { - this.createHandlebarsHelpers(generationOptions); - const templatePath = path.resolve(__dirname, "../../src/entity.mst"); - const template = fs.readFileSync(templatePath, "UTF-8"); - const resultPath = generationOptions.resultsPath; - if (!fs.existsSync(resultPath)) { - fs.mkdirSync(resultPath); - } - let entitesPath = resultPath; - if (!generationOptions.noConfigs) { - this.createTsConfigFile(resultPath); - this.createTypeOrmConfig(resultPath, connectionOptions); - entitesPath = path.resolve(resultPath, "./entities"); - if (!fs.existsSync(entitesPath)) { - fs.mkdirSync(entitesPath); - } - } - const compliedTemplate = Handlebars.compile(template, { - noEscape: true - }); - databaseModel.entities.forEach(element => { - element.Imports = []; - element.Columns.forEach(column => { - column.relations.forEach(relation => { - if (element.tsEntityName !== relation.relatedTable) { - element.Imports.push(relation.relatedTable); - } +export async function createModelFromDatabase( + driver: AbstractDriver, + connectionOptions: IConnectionOptions, + generationOptions: IGenerationOptions +) { + function setRelationId(model: EntityInfo[]) { + if (generationOptions.relationIds) { + model.forEach(ent => { + ent.Columns.forEach(col => { + col.relations.map(rel => { + rel.relationIdField = rel.isOwner; + }); }); }); - element.GenerateConstructor = generationOptions.constructor; - element.IsActiveRecord = generationOptions.activeRecord; - element.Imports.filter((elem, index, self) => { - return index === self.indexOf(elem); - }); - let casedFileName = ""; - switch (generationOptions.convertCaseFile) { - case "camel": - casedFileName = changeCase.camelCase(element.tsEntityName); - break; - case "param": - casedFileName = changeCase.paramCase(element.tsEntityName); - break; - case "pascal": - casedFileName = changeCase.pascalCase(element.tsEntityName); - break; - case "none": - casedFileName = element.tsEntityName; - break; - } - const resultFilePath = path.resolve( - entitesPath, - casedFileName + ".ts" - ); - const rendered = compliedTemplate(element); - fs.writeFileSync(resultFilePath, rendered, { - encoding: "UTF-8", - flag: "w" - }); - }); - } - private static createHandlebarsHelpers( - generationOptions: IGenerationOptions - ) { - Handlebars.registerHelper("curly", open => (open ? "{" : "}")); - Handlebars.registerHelper("toEntityName", str => { - let retStr = ""; - switch (generationOptions.convertCaseEntity) { - case "camel": - retStr = changeCase.camelCase(str); - break; - case "pascal": - retStr = changeCase.pascalCase(str); - break; - case "none": - retStr = str; - break; - } - return retStr; - }); - Handlebars.registerHelper("concat", (stra, strb) => { - return stra + strb; - }); - Handlebars.registerHelper("toFileName", str => { - let retStr = ""; - switch (generationOptions.convertCaseFile) { - case "camel": - retStr = changeCase.camelCase(str); - break; - case "param": - retStr = changeCase.paramCase(str); - break; - case "pascal": - retStr = changeCase.pascalCase(str); - break; - case "none": - retStr = str; - break; - } - return retStr; - }); - Handlebars.registerHelper( - "printPropertyVisibility", - () => - generationOptions.propertyVisibility !== "none" - ? generationOptions.propertyVisibility + " " - : "" - ); - Handlebars.registerHelper("toPropertyName", str => { - let retStr = ""; - switch (generationOptions.convertCaseProperty) { - case "camel": - retStr = changeCase.camelCase(str); - break; - case "pascal": - retStr = changeCase.pascalCase(str); - break; - case "none": - retStr = str; - break; - } - return retStr; - }); - Handlebars.registerHelper("toLowerCase", str => str.toLowerCase()); - Handlebars.registerHelper("toLazy", str => { - if (generationOptions.lazy) { - return `Promise<${str}>`; - } else { - return str; - } - }); - Handlebars.registerHelper({ - and: (v1, v2) => v1 && v2, - eq: (v1, v2) => v1 === v2, - gt: (v1, v2) => v1 > v2, - gte: (v1, v2) => v1 >= v2, - lt: (v1, v2) => v1 < v2, - lte: (v1, v2) => v1 <= v2, - ne: (v1, v2) => v1 !== v2, - or: (v1, v2) => v1 || v2 - }); + } + return model; } - // TODO:Move to mustache template file - private static createTsConfigFile(resultPath) { - fs.writeFileSync( - path.resolve(resultPath, "tsconfig.json"), - `{"compilerOptions": { + let dbModel = await driver.GetDataFromServer(connectionOptions); + if (dbModel.length === 0) { + TomgUtils.LogError( + "Tables not found in selected database. Skipping creation of typeorm model.", + false + ); + return; + } + dbModel = setRelationId(dbModel); + dbModel = ApplyNamingStrategy(generationOptions.namingStrategy, dbModel); + createModelFromMetadata(connectionOptions, generationOptions, dbModel); +} +function createModelFromMetadata( + connectionOptions: IConnectionOptions, + generationOptions: IGenerationOptions, + databaseModel: EntityInfo[] +) { + createHandlebarsHelpers(generationOptions); + const templatePath = path.resolve(__dirname, "../../src/entity.mst"); + const template = fs.readFileSync(templatePath, "UTF-8"); + const resultPath = generationOptions.resultsPath; + if (!fs.existsSync(resultPath)) { + fs.mkdirSync(resultPath); + } + let entitesPath = resultPath; + if (!generationOptions.noConfigs) { + createTsConfigFile(resultPath); + createTypeOrmConfig(resultPath, connectionOptions); + entitesPath = path.resolve(resultPath, "./entities"); + if (!fs.existsSync(entitesPath)) { + fs.mkdirSync(entitesPath); + } + } + const compliedTemplate = Handlebars.compile(template, { + noEscape: true + }); + databaseModel.forEach(element => { + element.Imports = []; + element.Columns.forEach(column => { + column.relations.forEach(relation => { + if (element.tsEntityName !== relation.relatedTable) { + element.Imports.push(relation.relatedTable); + } + }); + }); + element.GenerateConstructor = generationOptions.constructor; + element.IsActiveRecord = generationOptions.activeRecord; + element.Imports.filter((elem, index, self) => { + return index === self.indexOf(elem); + }); + let casedFileName = ""; + switch (generationOptions.convertCaseFile) { + case "camel": + casedFileName = changeCase.camelCase(element.tsEntityName); + break; + case "param": + casedFileName = changeCase.paramCase(element.tsEntityName); + break; + case "pascal": + casedFileName = changeCase.pascalCase(element.tsEntityName); + break; + case "none": + casedFileName = element.tsEntityName; + break; + } + const resultFilePath = path.resolve(entitesPath, casedFileName + ".ts"); + const rendered = compliedTemplate(element); + fs.writeFileSync(resultFilePath, rendered, { + encoding: "UTF-8", + flag: "w" + }); + }); +} + +function createHandlebarsHelpers(generationOptions: IGenerationOptions) { + Handlebars.registerHelper("curly", open => (open ? "{" : "}")); + Handlebars.registerHelper("toEntityName", str => { + let retStr = ""; + switch (generationOptions.convertCaseEntity) { + case "camel": + retStr = changeCase.camelCase(str); + break; + case "pascal": + retStr = changeCase.pascalCase(str); + break; + case "none": + retStr = str; + break; + } + return retStr; + }); + Handlebars.registerHelper("concat", (stra, strb) => { + return stra + strb; + }); + Handlebars.registerHelper("toFileName", str => { + let retStr = ""; + switch (generationOptions.convertCaseFile) { + case "camel": + retStr = changeCase.camelCase(str); + break; + case "param": + retStr = changeCase.paramCase(str); + break; + case "pascal": + retStr = changeCase.pascalCase(str); + break; + case "none": + retStr = str; + break; + } + return retStr; + }); + Handlebars.registerHelper( + "printPropertyVisibility", + () => + generationOptions.propertyVisibility !== "none" + ? generationOptions.propertyVisibility + " " + : "" + ); + Handlebars.registerHelper("toPropertyName", str => { + let retStr = ""; + switch (generationOptions.convertCaseProperty) { + case "camel": + retStr = changeCase.camelCase(str); + break; + case "pascal": + retStr = changeCase.pascalCase(str); + break; + case "none": + retStr = str; + break; + } + return retStr; + }); + Handlebars.registerHelper("toLowerCase", str => str.toLowerCase()); + Handlebars.registerHelper("toLazy", str => { + if (generationOptions.lazy) { + return `Promise<${str}>`; + } else { + return str; + } + }); + Handlebars.registerHelper({ + and: (v1, v2) => v1 && v2, + eq: (v1, v2) => v1 === v2, + gt: (v1, v2) => v1 > v2, + gte: (v1, v2) => v1 >= v2, + lt: (v1, v2) => v1 < v2, + lte: (v1, v2) => v1 <= v2, + ne: (v1, v2) => v1 !== v2, + or: (v1, v2) => v1 || v2 + }); +} + +// TODO:Move to mustache template file +function createTsConfigFile(resultPath) { + fs.writeFileSync( + path.resolve(resultPath, "tsconfig.json"), + `{"compilerOptions": { "lib": ["es5", "es6"], "target": "es6", "module": "commonjs", @@ -225,17 +219,17 @@ export class Engine { "experimentalDecorators": true, "sourceMap": true }}`, - { encoding: "UTF-8", flag: "w" } - ); - } - private static createTypeOrmConfig( - resultPath: string, - connectionOptions: IConnectionOptions - ) { - if (connectionOptions.schemaName === "") { - fs.writeFileSync( - path.resolve(resultPath, "ormconfig.json"), - `[ + { encoding: "UTF-8", flag: "w" } + ); +} +function createTypeOrmConfig( + resultPath: string, + connectionOptions: IConnectionOptions +) { + if (connectionOptions.schemaName === "") { + fs.writeFileSync( + path.resolve(resultPath, "ormconfig.json"), + `[ { "name": "default", "type": "${connectionOptions.databaseType}", @@ -250,12 +244,12 @@ export class Engine { ] } ]`, - { encoding: "UTF-8", flag: "w" } - ); - } else { - fs.writeFileSync( - path.resolve(resultPath, "ormconfig.json"), - `[ + { encoding: "UTF-8", flag: "w" } + ); + } else { + fs.writeFileSync( + path.resolve(resultPath, "ormconfig.json"), + `[ { "name": "default", "type": "${connectionOptions.databaseType}", @@ -271,89 +265,29 @@ export class Engine { ] } ]`, - { encoding: "UTF-8", flag: "w" } - ); - } + { encoding: "UTF-8", flag: "w" } + ); } - private static ApplyNamingStrategy( - dbModel: DatabaseModel, - namingStrategy: NamingStrategy - ) { - this.changeRelationNames(dbModel, namingStrategy); - this.changeEntityNames(dbModel, namingStrategy); - this.changeColumnNames(dbModel, namingStrategy); - } - private static changeColumnNames( - dbModel: DatabaseModel, - namingStrategy: NamingStrategy - ) { - dbModel.entities.forEach(entity => { - entity.Columns.forEach(column => { - const newName = namingStrategy.columnName(column.tsName); - entity.Indexes.forEach(index => { - index.columns - .filter(column2 => column2.name === column.tsName) - .forEach(column2 => (column2.name = newName)); - }); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column2 => { - column2.relations - .filter( - relation => - relation.relatedTable === - entity.tsEntityName && - relation.relatedColumn === column.tsName - ) - .map(v => (v.relatedColumn = newName)); - column2.relations - .filter( - relation => - relation.relatedTable === - entity.tsEntityName && - relation.ownerColumn === column.tsName - ) - .map(v => (v.ownerColumn = newName)); - }); - }); +} +function ApplyNamingStrategy( + namingStrategy: NamingStrategy, + dbModel: EntityInfo[] +) { + dbModel = changeRelationNames(dbModel); + dbModel = changeEntityNames(dbModel); + dbModel = changeColumnNames(dbModel); + return dbModel; - column.tsName = newName; - }); - }); - } - private static changeEntityNames( - dbModel: DatabaseModel, - namingStrategy: NamingStrategy - ) { - dbModel.entities.forEach(entity => { - const newName = namingStrategy.entityName(entity.tsEntityName); - dbModel.entities.forEach(entity2 => { - entity2.Columns.forEach(column => { - column.relations.forEach(relation => { - if (relation.ownerTable === entity.tsEntityName) { - relation.ownerTable = newName; - } - if (relation.relatedTable === entity.tsEntityName) { - relation.relatedTable = newName; - } - }); - }); - }); - entity.tsEntityName = newName; - }); - } - private static changeRelationNames( - dbModel: DatabaseModel, - namingStrategy: NamingStrategy - ) { - dbModel.entities.forEach(entity => { + function changeRelationNames(model: EntityInfo[]) { + model.forEach(entity => { entity.Columns.forEach(column => { column.relations.forEach(relation => { const newName = namingStrategy.relationName( column.tsName, relation, - dbModel + model ); - dbModel.entities.forEach(entity2 => { + model.forEach(entity2 => { entity2.Columns.forEach(column2 => { column2.relations.forEach(relation2 => { if ( @@ -389,6 +323,62 @@ export class Engine { }); }); }); + return dbModel; + } + + function changeColumnNames(model: EntityInfo[]) { + model.forEach(entity => { + entity.Columns.forEach(column => { + const newName = namingStrategy.columnName(column.tsName); + entity.Indexes.forEach(index => { + index.columns + .filter(column2 => column2.name === column.tsName) + .forEach(column2 => (column2.name = newName)); + }); + model.forEach(entity2 => { + entity2.Columns.forEach(column2 => { + column2.relations + .filter( + relation => + relation.relatedTable === + entity.tsEntityName && + relation.relatedColumn === column.tsName + ) + .map(v => (v.relatedColumn = newName)); + column2.relations + .filter( + relation => + relation.relatedTable === + entity.tsEntityName && + relation.ownerColumn === column.tsName + ) + .map(v => (v.ownerColumn = newName)); + }); + }); + + column.tsName = newName; + }); + }); + return model; + } + function changeEntityNames(entities: EntityInfo[]) { + entities.forEach(entity => { + const newName = namingStrategy.entityName(entity.tsEntityName); + entities.forEach(entity2 => { + entity2.Columns.forEach(column => { + column.relations.forEach(relation => { + if (relation.ownerTable === entity.tsEntityName) { + relation.ownerTable = newName; + } + if (relation.relatedTable === entity.tsEntityName) { + relation.relatedTable = newName; + } + }); + }); + }); + entity.tsEntityName = newName; + }); + return entities; } } diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index 10bf0c5..5dc38f8 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -1,15 +1,15 @@ import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; -import { DatabaseModel } from "./models/DatabaseModel"; +import { EntityInfo } from "./models/EntityInfo"; import { RelationInfo } from "./models/RelationInfo"; export class NamingStrategy extends AbstractNamingStrategy { public relationName( columnOldName: string, relation: RelationInfo, - dbModel: DatabaseModel + dbModel: EntityInfo[] ): string { const isRelationToMany = relation.isOneToMany || relation.isManyToMany; - const ownerEntity = dbModel.entities.find( + const ownerEntity = dbModel.find( v => v.tsEntityName === relation.ownerTable )!; diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 7570cfa..882447b 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -3,8 +3,8 @@ import { WithPrecisionColumnType, WithWidthColumnType } from "typeorm/driver/types/ColumnTypes"; +import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; -import { DatabaseModel } from "../models/DatabaseModel"; import { EntityInfo } from "../models/EntityInfo"; import { RelationInfo } from "../models/RelationInfo"; import * as TomgUtils from "../Utils"; @@ -56,7 +56,6 @@ export abstract class AbstractDriver { "binary", "varbinary" ]; - public generateRelationsIds: boolean; public abstract GetAllTablesQuery: ( schema: string @@ -67,8 +66,8 @@ export abstract class AbstractDriver { }> >; - public FindManyToManyRelations(dbModel: DatabaseModel) { - const manyToManyEntities = dbModel.entities.filter( + public FindManyToManyRelations(dbModel: EntityInfo[]) { + const manyToManyEntities = dbModel.filter( entity => entity.Columns.filter(column => { return ( @@ -88,7 +87,7 @@ export abstract class AbstractDriver { .map(v => v.relatedTable) .filter((v, i, s) => s.indexOf(v) === i); if (namesOfRelatedTables.length === 2) { - const relatedTable1 = dbModel.entities.find( + const relatedTable1 = dbModel.find( v => v.tsEntityName === namesOfRelatedTables[0] )!; relatedTable1.Columns = relatedTable1.Columns.filter( @@ -97,7 +96,7 @@ export abstract class AbstractDriver { .toLowerCase() .startsWith(entity.tsEntityName.toLowerCase()) ); - const relatedTable2 = dbModel.entities.find( + const relatedTable2 = dbModel.find( v => v.tsEntityName === namesOfRelatedTables[1] )!; relatedTable2.Columns = relatedTable2.Columns.filter( @@ -106,7 +105,7 @@ export abstract class AbstractDriver { .toLowerCase() .startsWith(entity.tsEntityName.toLowerCase()) ); - dbModel.entities = dbModel.entities.filter(ent => { + dbModel = dbModel.filter(ent => { return ent.tsEntityName !== entity.tsEntityName; }); @@ -137,42 +136,26 @@ export abstract class AbstractDriver { relatedTable2.Columns.push(column2); } }); + return dbModel; } public async GetDataFromServer( - database: string, - server: string, - port: number, - user: string, - password: string, - schema: string, - ssl: boolean, - relationIds: boolean - ): Promise { - this.generateRelationsIds = relationIds; - const dbModel = {} as DatabaseModel; - await this.ConnectToServer(database, server, port, user, password, ssl); - const sqlEscapedSchema = "'" + schema.split(",").join("','") + "'"; - dbModel.entities = await this.GetAllTables(sqlEscapedSchema); - await this.GetCoulmnsFromEntity(dbModel.entities, sqlEscapedSchema); - await this.GetIndexesFromEntity(dbModel.entities, sqlEscapedSchema); - dbModel.entities = await this.GetRelations( - dbModel.entities, - sqlEscapedSchema - ); + connectionOptons: IConnectionOptions + ): Promise { + let dbModel = [] as EntityInfo[]; + await this.ConnectToServer(connectionOptons); + const sqlEscapedSchema = + "'" + connectionOptons.schemaName.split(",").join("','") + "'"; + dbModel = await this.GetAllTables(sqlEscapedSchema); + await this.GetCoulmnsFromEntity(dbModel, sqlEscapedSchema); + await this.GetIndexesFromEntity(dbModel, sqlEscapedSchema); + dbModel = await this.GetRelations(dbModel, sqlEscapedSchema); await this.DisconnectFromServer(); - this.FindManyToManyRelations(dbModel); + dbModel = this.FindManyToManyRelations(dbModel); this.FindPrimaryColumnsFromIndexes(dbModel); return dbModel; } - public abstract async ConnectToServer( - database: string, - server: string, - port: number, - user: string, - password: string, - ssl: boolean - ); + public abstract async ConnectToServer(connectionOptons: IConnectionOptions); public async GetAllTables(schema: string): Promise { const response = await this.GetAllTablesQuery(schema); @@ -276,7 +259,6 @@ export abstract class AbstractDriver { ownerRelation.relationType = isOneToMany ? "ManyToOne" : "OneToOne"; - ownerRelation.relationIdField = this.generateRelationsIds; let columnName = ownerEntity.tsEntityName; if ( @@ -351,8 +333,8 @@ export abstract class AbstractDriver { schema: string ): Promise; - public FindPrimaryColumnsFromIndexes(dbModel: DatabaseModel) { - dbModel.entities.forEach(entity => { + public FindPrimaryColumnsFromIndexes(dbModel: EntityInfo[]) { + dbModel.forEach(entity => { const primaryIndex = entity.Indexes.find(v => v.isPrimaryKey); entity.Columns.filter( col => diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index c1638b7..7ab2a6a 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -1,4 +1,5 @@ import * as MSSQL from "mssql"; +import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; @@ -354,24 +355,17 @@ order by await this.Connection.close(); } } - public async ConnectToServer( - database: string, - server: string, - port: number, - user: string, - password: string, - ssl: boolean - ) { + public async ConnectToServer(connectionOptons: IConnectionOptions) { const config: MSSQL.config = { - database, + database: connectionOptons.databaseName, options: { appName: "typeorm-model-generator", - encrypt: ssl + encrypt: connectionOptons.ssl }, - password, - port, - server, - user + password: connectionOptons.password, + port: connectionOptons.port, + server: connectionOptons.host, + user: connectionOptons.user }; const promise = new Promise((resolve, reject) => { diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 1603644..bccbd65 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -1,4 +1,5 @@ import * as MYSQL from "mysql"; +import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; @@ -339,33 +340,26 @@ export class MysqlDriver extends AbstractDriver { await promise; } } - public async ConnectToServer( - database: string, - server: string, - port: number, - user: string, - password: string, - ssl: boolean - ) { + public async ConnectToServer(connectionOptons: IConnectionOptions) { let config: MYSQL.ConnectionConfig; - if (ssl) { + if (connectionOptons.ssl) { config = { - database, - host: server, - password, - port, + database: connectionOptons.databaseName, + host: connectionOptons.host, + password: connectionOptons.password, + port: connectionOptons.port, ssl: { rejectUnauthorized: false }, - user + user: connectionOptons.user }; } else { config = { - database, - host: server, - password, - port, - user + database: connectionOptons.databaseName, + host: connectionOptons.host, + password: connectionOptons.password, + port: connectionOptons.port, + user: connectionOptons.user }; } diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 0b5ca4e..4ccf0e9 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -1,3 +1,4 @@ +import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; @@ -291,29 +292,26 @@ export class OracleDriver extends AbstractDriver { await this.Connection.close(); } } - public async ConnectToServer( - database: string, - server: string, - port: number, - user: string, - password: string, - ssl: boolean - ) { + public async ConnectToServer(connectionOptons: IConnectionOptions) { let config: any; - if (user === String(process.env.ORACLE_UsernameSys)) { + if (connectionOptons.user === String(process.env.ORACLE_UsernameSys)) { config /*Oracle.IConnectionAttributes*/ = { - connectString: `${server}:${port}/${database}`, - externalAuth: ssl, - password, + connectString: `${connectionOptons.host}:${ + connectionOptons.port + }/${connectionOptons.databaseName}`, + externalAuth: connectionOptons.ssl, + password: connectionOptons.password, privilege: this.Oracle.SYSDBA, - user + user: connectionOptons.user }; } else { config /*Oracle.IConnectionAttributes*/ = { - connectString: `${server}:${port}/${database}`, - externalAuth: ssl, - password, - user + connectString: `${connectionOptons.host}:${ + connectionOptons.port + }/${connectionOptons.databaseName}`, + externalAuth: connectionOptons.ssl, + password: connectionOptons.password, + user: connectionOptons.user }; } const that = this; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 58317ca..ebe741c 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -1,4 +1,5 @@ import * as PG from "pg"; +import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; @@ -531,21 +532,14 @@ export class PostgresDriver extends AbstractDriver { } } - public async ConnectToServer( - database: string, - server: string, - port: number, - user: string, - password: string, - ssl: boolean - ) { + public async ConnectToServer(connectionOptons: IConnectionOptions) { this.Connection = new PG.Client({ - database, - host: server, - password, - port, - ssl, - user + database: connectionOptons.databaseName, + host: connectionOptons.host, + password: connectionOptons.password, + port: connectionOptons.port, + ssl: connectionOptons.ssl, + user: connectionOptons.user }); const promise = new Promise((resolve, reject) => { diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index cdab5b6..b65ba2b 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -1,3 +1,4 @@ +import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; @@ -292,15 +293,8 @@ export class SqliteDriver extends AbstractDriver { this.db.close(); } - public async ConnectToServer( - database: string, - server: string, - port: number, - user: string, - password: string, - ssl: boolean - ) { - await this.UseDB(database); + public async ConnectToServer(connectionOptons: IConnectionOptions) { + await this.UseDB(connectionOptons.databaseName); } public async CreateDB(dbName: string) { diff --git a/src/index.ts b/src/index.ts index 5cc2ab7..9cc4bf0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,12 @@ import path = require("path"); import * as Yargs from "yargs"; import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; -import { Engine, IConnectionOptions, IGenerationOptions } from "./Engine"; +import { + createDriver, + createModelFromDatabase, + IConnectionOptions, + IGenerationOptions +} from "./Engine"; import { NamingStrategy } from "./NamingStrategy"; import * as TomgUtils from "./Utils"; @@ -105,7 +110,7 @@ const argv = Yargs.usage( describe: "Generate constructor allowing partial initialization" }).argv; -const driver = Engine.createDriver(argv.e); +const driver = createDriver(argv.e); const standardPort = driver.standardPort; const standardSchema = driver.standardPort; const standardUser = driver.standardPort; @@ -146,12 +151,10 @@ console.log(TomgUtils.packageVersion()); console.log( `[${new Date().toLocaleTimeString()}] Starting creation of model classes.` ); -Engine.createModelFromDatabase( - driver, - connectionOptions, - generationOptions -).then(() => { - console.info( - `[${new Date().toLocaleTimeString()}] Typeorm model classes created.` - ); -}); +createModelFromDatabase(driver, connectionOptions, generationOptions).then( + () => { + console.info( + `[${new Date().toLocaleTimeString()}] Typeorm model classes created.` + ); + } +); diff --git a/src/models/DatabaseModel.ts b/src/models/DatabaseModel.ts deleted file mode 100644 index 8dd6410..0000000 --- a/src/models/DatabaseModel.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { EntityInfo } from "./EntityInfo"; -export class DatabaseModel { - public entities: EntityInfo[]; -} diff --git a/test/integration/defaultValues.test.ts b/test/integration/defaultValues.test.ts index a840a47..6e4f06c 100644 --- a/test/integration/defaultValues.test.ts +++ b/test/integration/defaultValues.test.ts @@ -7,7 +7,7 @@ import { EntityFileToJson } from "../utils/EntityFileToJson"; import chai = require('chai'); import chaiSubset = require('chai-subset'); import * as ts from "typescript"; -import { Engine } from "../../src/Engine"; +import { createDriver, createModelFromDatabase } from "../../src/Engine"; import * as GTU from "../utils/GeneralTestUtils" chai.use(chaiSubset); @@ -32,11 +32,11 @@ describe("Column default values", async function () { const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) - const driver = Engine.createDriver(dbDriver); + const driver = createDriver(dbDriver); const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); const generationOptions = GTU.getGenerationOptions(resultsPath); - await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) + await createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) diff --git a/test/integration/entityTypes.test.ts b/test/integration/entityTypes.test.ts index d39d831..4bf1134 100644 --- a/test/integration/entityTypes.test.ts +++ b/test/integration/entityTypes.test.ts @@ -7,7 +7,7 @@ import { EntityFileToJson } from "../utils/EntityFileToJson"; import chai = require('chai'); import chaiSubset = require('chai-subset'); import * as ts from "typescript"; -import { Engine } from "../../src/Engine"; +import { createDriver, createModelFromDatabase } from "../../src/Engine"; import * as GTU from "../utils/GeneralTestUtils" chai.use(chaiSubset); @@ -32,11 +32,11 @@ describe("Platform specyfic types", async function () { const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) - const driver = Engine.createDriver(dbDriver); + const driver = createDriver(dbDriver); const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); const generationOptions = GTU.getGenerationOptions(resultsPath); - await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) + await createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts index ddb9b4a..dee14ae 100644 --- a/test/integration/githubIssues.test.ts +++ b/test/integration/githubIssues.test.ts @@ -3,7 +3,7 @@ import { expect } from "chai"; import fs = require('fs-extra'); import path = require('path') import "reflect-metadata"; -import { Engine } from "../../src/Engine"; +import { createModelFromDatabase, createDriver } from "../../src/Engine"; import { EntityFileToJson } from "../utils/EntityFileToJson"; import chai = require('chai'); import chaiSubset = require('chai-subset'); @@ -45,7 +45,7 @@ describe("GitHub issues", async function () { const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) - const driver = Engine.createDriver(dbDriver); + const driver = createDriver(dbDriver); const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); const generationOptions = GTU.getGenerationOptions(resultsPath); @@ -57,7 +57,7 @@ describe("GitHub issues", async function () { break; } - await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) + await createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index edf6401..4710217 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -3,7 +3,7 @@ import { expect } from "chai"; import fs = require('fs-extra'); import path = require('path') import "reflect-metadata"; -import { Engine } from "../../src/Engine"; +import { createModelFromDatabase, createDriver } from "../../src/Engine"; import { EntityFileToJson } from "../utils/EntityFileToJson"; import chai = require('chai'); import chaiSubset = require('chai-subset'); @@ -31,7 +31,7 @@ describe("TypeOrm examples", async function () { const resultsPath = path.resolve(process.cwd(), `output`) fs.removeSync(resultsPath) - const driver=Engine.createDriver(dbDriver); + const driver=createDriver(dbDriver); const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); const generationOptions = GTU.getGenerationOptions(resultsPath); @@ -39,7 +39,7 @@ describe("TypeOrm examples", async function () { generationOptions.lazy = true; } - await Engine.createModelFromDatabase(driver,connectionOptions,generationOptions) + await createModelFromDatabase(driver,connectionOptions,generationOptions) const filesGenPath = path.resolve(resultsPath, 'entities') const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index a710ded..75ebb03 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -32,7 +32,18 @@ export async function createMSSQLModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new PostgresDriver(); - await driver.ConnectToServer(`postgres`, String(process.env.POSTGRES_Host), Number(process.env.POSTGRES_Port), String(process.env.POSTGRES_Username), String(process.env.POSTGRES_Password), yn(process.env.POSTGRES_SSL)); + const connectionOptions: IConnectionOptions = { + host: String(process.env.POSTGRES_Host), + port: Number(process.env.POSTGRES_Port), + databaseName: `postgres`, + user: String(process.env.POSTGRES_Username), + password: String(process.env.POSTGRES_Password), + databaseType: 'postgres', + schemaName: 'public,sch1,sch2', + ssl: yn(process.env.POSTGRES_SSL), + } + await driver.ConnectToServer(connectionOptions); + connectionOptions.databaseName = String(process.env.POSTGRES_Database); if (await driver.CheckIfDBExists(String(process.env.POSTGRES_Database))) { await driver.DropDB(String(process.env.POSTGRES_Database)); @@ -113,24 +124,23 @@ export async function createPostgresModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new SqliteDriver(); - await driver.ConnectToServer(String(process.env.SQLITE_Database), '', 0, '', '', false); + const connectionOptions: IConnectionOptions = { + host: '', + port: 0, + databaseName: String(process.env.SQLITE_Database), + user: '', + password: '', + databaseType: 'sqlite', + schemaName: '', + ssl: false, + } + await driver.ConnectToServer(connectionOptions); if (await driver.CheckIfDBExists(String(process.env.SQLITE_Database))) { await driver.DropDB(String(process.env.SQLITE_Database)); @@ -153,24 +163,23 @@ export async function createSQLiteModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new MysqlDriver(); - await driver.ConnectToServer(String(process.env.MYSQL_Database), String(process.env.MYSQL_Host), Number(process.env.MYSQL_Port), String(process.env.MYSQL_Username), String(process.env.MYSQL_Password), yn(process.env.MYSQL_SSL)); + const connectionOptions: IConnectionOptions = { + host: String(process.env.MYSQL_Host), + port: Number(process.env.MYSQL_Port), + databaseName: String(process.env.MYSQL_Database), + user: String(process.env.MYSQL_Username), + password: String(process.env.MYSQL_Password), + databaseType: 'mysql', + schemaName: 'ignored', + ssl: yn(process.env.MYSQL_SSL), + } + await driver.ConnectToServer(connectionOptions); if (await driver.CheckIfDBExists(String(process.env.MYSQL_Database))) { await driver.DropDB(String(process.env.MYSQL_Database)); @@ -195,23 +204,22 @@ export async function createMysqlModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new MariaDbDriver(); - await driver.ConnectToServer(String(process.env.MARIADB_Database), String(process.env.MARIADB_Host), Number(process.env.MARIADB_Port), String(process.env.MARIADB_Username), String(process.env.MARIADB_Password), yn(process.env.MARIADB_SSL)); + const connectionOptions: IConnectionOptions = { + host: String(process.env.MARIADB_Host), + port: Number(process.env.MARIADB_Port), + databaseName: String(process.env.MARIADB_Database), + user: String(process.env.MARIADB_Username), + password: String(process.env.MARIADB_Password), + databaseType: 'mariadb', + schemaName: 'ignored', + ssl: yn(process.env.MARIADB_SSL), + } + await driver.ConnectToServer(connectionOptions); if (await driver.CheckIfDBExists(String(process.env.MARIADB_Database))) { await driver.DropDB(String(process.env.MARIADB_Database)); @@ -236,24 +244,26 @@ export async function createMariaDBModels(filesOrgPath: string): Promise { let driver: AbstractDriver; driver = new OracleDriver(); - await driver.ConnectToServer(String(process.env.ORACLE_Database), String(process.env.ORACLE_Host), Number(process.env.ORACLE_Port), String(process.env.ORACLE_UsernameSys), String(process.env.ORACLE_PasswordSys), yn(process.env.ORACLE_SSL)); + + const connectionOptions: IConnectionOptions = { + host: String(process.env.ORACLE_Host), + port: Number(process.env.ORACLE_Port), + databaseName: String(process.env.ORACLE_Database), + user: String(process.env.ORACLE_UsernameSys), + password: String(process.env.ORACLE_PasswordSys), + databaseType: 'oracle', + schemaName: String(process.env.ORACLE_Username), + ssl: yn(process.env.ORACLE_SSL), + } + await driver.ConnectToServer(connectionOptions); + connectionOptions.user = String(process.env.ORACLE_Username) + connectionOptions.password = String(process.env.ORACLE_Password) if (await driver.CheckIfDBExists(String(process.env.ORACLE_Username))) { await driver.DropDB(String(process.env.ORACLE_Username)); @@ -278,17 +288,6 @@ export async function createOracleDBModels(filesOrgPath: string): Promise Date: Tue, 22 Jan 2019 17:37:59 +0100 Subject: [PATCH 094/130] updating some dependencies --- package-lock.json | 2842 ++++++++++++++++++++------------------------- package.json | 50 +- src/Engine.ts | 10 +- 3 files changed, 1260 insertions(+), 1642 deletions(-) diff --git a/package-lock.json b/package-lock.json index 061b349..f616693 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,9 +23,9 @@ } }, "@types/chai": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz", - "integrity": "sha512-f5dXGzOJycyzSMdaXVhiBhauL4dYydXwVpavfQ1mVCaGjR56a9QfklXObUxlIY9bGTmCPHEEZ04I16BZ/8w5ww==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz", + "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==", "dev": true }, "@types/chai-as-promised": { @@ -46,40 +46,33 @@ "@types/chai": "*" } }, - "@types/events": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", - "dev": true - }, "@types/fs-extra": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.2.tgz", - "integrity": "sha512-Q3FWsbdmkQd1ib11A4XNWQvRD//5KpPoGawA8aB2DR7pWKoW9XQv3+dGxD/Z1eVFze23Okdo27ZQytVFlweKvQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.4.tgz", + "integrity": "sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==", "dev": true, "requires": { "@types/node": "*" } }, "@types/handlebars": { - "version": "4.0.37", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.37.tgz", - "integrity": "sha512-c/g99PQsJEFYdK3LT1qgPAZ61fu/oFOaEhov/6ZuUNMi1xQFbAOSThlX8fAQLf+QoGXtyv4S39OjIRXf3HkBtw==", + "version": "4.0.40", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.40.tgz", + "integrity": "sha512-sGWNtsjNrLOdKha2RV1UeF8+UbQnPSG7qbe5wwbni0mw4h2gHXyPFUMOC+xwGirIiiydM/HSqjDO4rk6NFB18w==", "dev": true }, "@types/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-YeDiSEzznwZwwp766SJ6QlrTyBYUGPSIwmREHVTmktUYiT/WADdWtpt9iH0KuUSf8lZLdI4lP0X6PBzPo5//JQ==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", + "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", "dev": true }, "@types/mssql": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-4.0.10.tgz", - "integrity": "sha512-7oV5EBn5wh6hVlrwZC+dF+ECAjSLxv9QllFSGCFAsfx0Ms3DvTSIH0b8srkg2qs5Bj3kdbp8Y4VjhW7GJ346QQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-4.0.11.tgz", + "integrity": "sha512-P/eTIYKlltwD00ewHo8Psz1xjkEnr059pfHWUi6kJixukruOTEEM5ROW9S9szCbKgn7+u/VdE5RoyAuaBKyUXQ==", "dev": true, "requires": { - "@types/events": "*", "@types/node": "*" } }, @@ -93,9 +86,9 @@ } }, "@types/node": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.0.1.tgz", - "integrity": "sha512-HKTs07TC1RJRBd9z0Kf/cy37j2HCbUfcVKS6Xm9orZVcLqZ1JXWe/JTDLw6AwxmLOxV45fDpOMPXyqXU3TfOPQ==" + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" }, "@types/oracledb": { "version": "1.11.34", @@ -107,12 +100,11 @@ } }, "@types/pg": { - "version": "7.4.8", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.4.8.tgz", - "integrity": "sha512-naSYLMOIBU+/BddUlQUyQuba9reG5yN0MR7g4EcN/AEt3zll48fGozX8s7xjaXuKmFOS1qqOrr/ZeF6SSOjKCw==", + "version": "7.4.11", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.4.11.tgz", + "integrity": "sha512-Eksj2yOBNHnNqLuU1AqwF1qXgdaYDcWVH1ZQlxS7k1i34+JZd/ZNd15ugIpTVQxmBBMqjliJstmrnusjXy08Tg==", "dev": true, "requires": { - "@types/events": "*", "@types/node": "*", "@types/pg-types": "*" } @@ -143,31 +135,11 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true }, "ansi-cyan": { "version": "0.1.1", @@ -179,9 +151,9 @@ } }, "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, "ansi-red": { @@ -224,9 +196,9 @@ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", + "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=" }, "aproba": { "version": "1.2.0", @@ -315,7 +287,8 @@ "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true }, "asynckit": { "version": "0.4.0", @@ -323,9 +296,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "aws-sign2": { @@ -333,11 +306,6 @@ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" - }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -363,7 +331,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -376,7 +344,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -428,6 +396,35 @@ "requires": { "is-descriptor": "^1.0.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, @@ -451,25 +448,17 @@ "integrity": "sha1-rHMCDApZu3nrF8LOLbd/d9l04BM=" }, "bignumber.js": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.4.tgz", - "integrity": "sha512-LDXpJKVzEx2/OqNbG9mXBNvHuiRL4PzHCGfnANHMJ+fv68Ads3exDVJeGDJws+AoNEuca93bU3q+S0woeUaCdg==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz", + "integrity": "sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==" }, "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "requires": { - "readable-stream": "^2.0.5" - } - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.x.x" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "brace-expansion": { @@ -517,18 +506,18 @@ "dev": true }, "buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz", - "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, "buffer-writer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", - "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" }, "builtin-modules": { "version": "1.1.1", @@ -553,6 +542,30 @@ "unset-value": "^1.0.0" } }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, "camel-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", @@ -563,38 +576,27 @@ } }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "optional": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "dev": true, "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" + "pathval": "^1.1.0", + "type-detect": "^4.0.5" } }, "chai-as-promised": { @@ -623,9 +625,9 @@ } }, "change-case": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", - "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", + "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", "requires": { "camel-case": "^3.0.0", "constant-case": "^2.0.0", @@ -654,14 +656,14 @@ "dev": true }, "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" }, "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "class-utils": { @@ -690,73 +692,16 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "^1.0.1" + "restore-cursor": "^2.0.0" } }, "cli-highlight": { @@ -771,21 +716,6 @@ "yargs": "^10.0.3" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, "yargs": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", @@ -815,35 +745,62 @@ } } }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "optional": true, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" }, "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "optional": true + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "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.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } } } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } }, "code-point-at": { "version": "1.1.0", @@ -851,14 +808,28 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "codecov": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.1.tgz", - "integrity": "sha512-0TjnXrbvcPzAkRPv/Y5D8aZju/M5adkFxShRyMMgDReB8EV9nF4XMERXs6ajgLA1di9LUFW2tgePDQd2JPWy7g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz", + "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==", "dev": true, "requires": { - "argv": "0.0.2", - "request": "^2.81.0", - "urlgrey": "0.4.4" + "argv": "^0.0.2", + "ignore-walk": "^3.0.1", + "js-yaml": "^3.12.0", + "request": "^2.87.0", + "urlgrey": "^0.4.4" + }, + "dependencies": { + "js-yaml": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, "collection-visit": { @@ -884,14 +855,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", @@ -930,9 +893,9 @@ "dev": true }, "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz", + "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==" }, "core-util-is": { "version": "1.0.2", @@ -940,26 +903,15 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.5.tgz", - "integrity": "sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", + "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", "dev": true, "requires": { + "import-fresh": "^2.0.0", "is-directory": "^0.3.1", "js-yaml": "^3.9.0", "parse-json": "^4.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } } }, "cross-spawn": { @@ -972,26 +924,6 @@ "which": "^1.2.9" } }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "5.x.x" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.x.x" - } - } - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1001,9 +933,9 @@ } }, "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, "debug": { @@ -1040,6 +972,11 @@ "type-detect": "^4.0.0" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -1054,6 +991,37 @@ "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "delayed-stream": { @@ -1066,6 +1034,11 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -1086,9 +1059,9 @@ } }, "dotenv": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.0.0.tgz", - "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", "dev": true }, "ecc-jsbn": { @@ -1106,10 +1079,18 @@ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", "dev": true }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -1182,12 +1163,6 @@ "strip-eof": "^1.0.0" } }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -1220,71 +1195,9 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, "extend-shallow": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", @@ -1335,6 +1248,35 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, @@ -1343,11 +1285,6 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" - }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -1360,9 +1297,9 @@ "dev": true }, "figlet": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.2.0.tgz", - "integrity": "sha1-bEZTc3j6tkkUa1phQ92gGbQwtBA=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.2.1.tgz", + "integrity": "sha512-qc8gycfnnfOmfvPl7Fi3JeTbcvdmbZkckyUVGGAM02je7Ookvu+bBfKy1I4FKqTsQHCs3ARJ76ip/k98r+OQuQ==" }, "figures": { "version": "1.7.0", @@ -1422,6 +1359,26 @@ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + } + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -1432,9 +1389,9 @@ } }, "fs-extra": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", - "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -1504,9 +1461,9 @@ } }, "generic-pool": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.4.0.tgz", - "integrity": "sha512-lYsIpjkyNBnRLKrcnJlXTEXB2ISmK9g7N4WqWwXbvr+tVB1+raaFnHoCYecWnuCo/XGHgM935WOWmr5Zx3tJKw==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz", + "integrity": "sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w==" }, "get-caller-file": { "version": "1.0.2", @@ -1520,9 +1477,9 @@ "dev": true }, "get-own-enumerable-property-symbols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz", - "integrity": "sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", + "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", "dev": true }, "get-stdin": { @@ -1564,26 +1521,36 @@ } }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", "requires": { - "async": "^1.4.0", + "async": "^2.5.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "requires": { + "lodash": "^4.17.10" + } + } } }, "har-schema": { @@ -1591,15 +1558,6 @@ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -1646,26 +1604,6 @@ "kind-of": "^4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -1677,18 +1615,6 @@ } } }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" - } - }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -1705,15 +1631,9 @@ } }, "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=" - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==" }, "hosted-git-info": { "version": "2.7.1", @@ -1732,16 +1652,16 @@ } }, "husky": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.0.0.tgz", - "integrity": "sha512-BCJmbzfauxXwfxIZYETNS95zNxnwQgzTbVPs4DL0CbMmSDvuMEAcfEjGDFEb+mmPslvywKlXZroYAdNLRDLayQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", + "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", "dev": true, "requires": { - "cosmiconfig": "^5.0.6", - "execa": "^0.9.0", + "cosmiconfig": "^5.0.7", + "execa": "^1.0.0", "find-up": "^3.0.0", "get-stdin": "^6.0.0", - "is-ci": "^1.2.1", + "is-ci": "^2.0.0", "pkg-dir": "^3.0.0", "please-upgrade-node": "^3.1.1", "read-pkg": "^4.0.1", @@ -1749,25 +1669,27 @@ "slash": "^2.0.0" }, "dependencies": { - "cosmiconfig": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", - "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "execa": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", - "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -1784,6 +1706,15 @@ "locate-path": "^3.0.0" } }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -1795,9 +1726,9 @@ } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -1818,31 +1749,21 @@ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true } } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, "ieee754": { "version": "1.1.12", @@ -1857,15 +1778,22 @@ "minimatch": "^3.0.4" } }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "repeating": "^2.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1891,19 +1819,22 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, @@ -1916,7 +1847,8 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-builtin-module": { "version": "1.0.0", @@ -1928,46 +1860,49 @@ } }, "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "ci-info": "^2.0.0" } }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } @@ -1990,20 +1925,20 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-lower-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", @@ -2019,6 +1954,17 @@ "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-obj": { @@ -2036,23 +1982,6 @@ "symbol-observable": "^1.1.0" } }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2092,6 +2021,12 @@ "upper-case": "^1.1.0" } }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -2184,22 +2119,17 @@ "dev": true }, "jest-validate": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.0.1.tgz", - "integrity": "sha1-zZ8BqJ0mu4hfEqhmdxXpyGWldU8=", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", + "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", "dev": true, "requires": { "chalk": "^2.0.1", "jest-get-type": "^22.1.0", "leven": "^2.1.0", - "pretty-format": "^23.0.1" + "pretty-format": "^23.6.0" } }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" - }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -2233,11 +2163,6 @@ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -2270,18 +2195,10 @@ "dev": true }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "optional": true + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, "lcid": { "version": "1.0.0", @@ -2308,12 +2225,11 @@ } }, "lint-staged": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.2.0.tgz", - "integrity": "sha512-jPoIMbmgtWMUrz/l0rhBVa1j6H71zr0rEoxDWBA333PZcaqBvELdg0Sf4tdGHlwrBM0GXaXMVgTRkLTm2vA7Jg==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.3.0.tgz", + "integrity": "sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw==", "dev": true, "requires": { - "app-root-path": "^2.0.1", "chalk": "^2.3.1", "commander": "^2.14.1", "cosmiconfig": "^5.0.2", @@ -2323,7 +2239,7 @@ "find-parent-dir": "^0.3.0", "is-glob": "^4.0.0", "is-windows": "^1.0.2", - "jest-validate": "^23.0.0", + "jest-validate": "^23.5.0", "listr": "^0.14.1", "lodash": "^4.17.5", "log-symbols": "^2.2.0", @@ -2348,9 +2264,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -2359,12 +2275,12 @@ } }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "execa": { @@ -2388,25 +2304,16 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -2415,112 +2322,26 @@ } }, "listr": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.1.tgz", - "integrity": "sha512-MSMUUVN1f8aRnPi4034RkOqdiUlpYW+FqwFE3aL0uYNPRavkt2S2SsSpDDofn8BDpqv2RNnsdOcCHWsChcq77A==", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", "dev": true, "requires": { "@samverschueren/stream-to-observable": "^0.3.0", - "cli-truncate": "^0.2.1", - "figures": "^1.7.0", - "indent-string": "^2.1.0", "is-observable": "^1.1.0", "is-promise": "^2.1.0", "is-stream": "^1.1.0", "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.4.0", - "listr-verbose-renderer": "^0.4.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "ora": "^0.2.3", - "p-map": "^1.1.1", - "rxjs": "^6.1.0", - "strip-ansi": "^3.0.1" + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^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, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "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.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { + "p-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", + "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", "dev": true } } @@ -2532,9 +2353,9 @@ "dev": true }, "listr-update-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", - "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", "dev": true, "requires": { "chalk": "^1.1.3", @@ -2543,7 +2364,7 @@ "figures": "^1.7.0", "indent-string": "^3.0.0", "log-symbols": "^1.0.2", - "log-update": "^1.0.2", + "log-update": "^2.3.0", "strip-ansi": "^3.0.1" }, "dependencies": { @@ -2572,31 +2393,6 @@ "supports-color": "^2.0.0" } }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "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, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "log-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", @@ -2606,23 +2402,6 @@ "chalk": "^1.0.0" } }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "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.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -2641,56 +2420,60 @@ } }, "listr-verbose-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", - "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-cursor": "^1.0.2", + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", "date-fns": "^1.27.2", - "figures": "^1.7.0" + "figures": "^2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "escape-string-regexp": "^1.0.5" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -2704,10 +2487,9 @@ } }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, "lodash.get": { "version": "4.4.2", @@ -2725,13 +2507,26 @@ } }, "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", "dev": true, "requires": { - "ansi-escapes": "^1.0.0", - "cli-cursor": "^1.0.2" + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } } }, "lolex": { @@ -2740,11 +2535,6 @@ "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg==", "dev": true }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -2767,6 +2557,14 @@ "yallist": "^2.1.2" } }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -2835,24 +2633,6 @@ "requires": { "is-plain-object": "^2.0.4" } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } } } }, @@ -2888,9 +2668,9 @@ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "minipass": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", - "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2902,16 +2682,16 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" } } }, "minizlib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "requires": { "minipass": "^2.2.1" } @@ -2953,30 +2733,24 @@ } }, "mocha": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", - "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { "browser-stdout": "1.3.1", - "commander": "2.11.0", + "commander": "2.15.1", "debug": "3.1.0", "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", - "growl": "1.10.3", + "growl": "1.10.5", "he": "1.1.1", "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" + "supports-color": "5.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 - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -2986,21 +2760,27 @@ "ms": "2.0.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "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==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } }, "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==", + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", "dev": true }, "ms": { @@ -3009,24 +2789,46 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mssql": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.1.0.tgz", - "integrity": "sha512-ekht0eILEV0P1CbpkwpAxhgO+/5goYizUJrt7pgDm3fP6lGKe0+8V9jhTvQZ8DPHkycSd0wYGUoz/YA7VN7kQQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.3.0.tgz", + "integrity": "sha512-MpSwdLMbKfFL3DwjhgbJdFViU+ye9YR+op/t/CdhWwYdA90qWYjPyWbIzso/2xRfm7liYNkN5EZjAS9PWFLLZg==", "requires": { - "debug": "^2.6.3", - "generic-pool": "^3.1.7", - "tedious": "^2.0.0" + "debug": "^3.2.6", + "generic-pool": "^3.4.2", + "tedious": "^2.7.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, "mysql": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.15.0.tgz", - "integrity": "sha512-C7tjzWtbN5nzkLIV+E8Crnl9bFyc7d3XJcBAvHKEVkjrYjogz3llo22q6s/hw+UcsE4/844pDob9ac+3dVjQSA==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.16.0.tgz", + "integrity": "sha512-dPbN2LHonQp7D5ja5DJXNbCLe/HRdu+f3v61aguzNRQIrmZLOeRoymBYyeThrR6ug+FqzDL95Gc9maqZUJS+Gw==", "requires": { - "bignumber.js": "4.0.4", - "readable-stream": "2.3.3", - "safe-buffer": "5.1.1", - "sqlstring": "2.3.0" + "bignumber.js": "4.1.0", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "mz": { @@ -3045,9 +2847,9 @@ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -3055,7 +2857,6 @@ "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", @@ -3070,12 +2871,6 @@ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -3094,31 +2889,29 @@ "requires": { "is-plain-object": "^2.0.4" } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, + "native-duplexpair": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", + "integrity": "sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A=" + }, "needle": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz", - "integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", + "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", "requires": { "debug": "^2.1.2", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, "nise": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", @@ -3141,9 +2934,9 @@ } }, "node-pre-gyp": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", - "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", @@ -3167,9 +2960,9 @@ } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" } } }, @@ -3195,14 +2988,14 @@ } }, "npm-bundled": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", - "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==" }, "npm-packlist": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", - "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", + "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1" @@ -3252,11 +3045,6 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3282,41 +3070,13 @@ "is-descriptor": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-buffer": "^1.1.5" } } } @@ -3348,10 +3108,13 @@ } }, "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } }, "optimist": { "version": "0.6.1", @@ -3384,60 +3147,6 @@ } } }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.1.2", - "object-assign": "^4.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -3467,11 +3176,21 @@ "os-tmpdir": "^1.0.0" } }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -3517,6 +3236,16 @@ "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=" }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, "parse5": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", @@ -3604,16 +3333,15 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.4.1.tgz", - "integrity": "sha512-Pi5qYuXro5PAD9xXx8h7bFtmHgAQEG6/SCNyi7gS3rvb/ZQYDmxKchfB0zYtiSJNWq9iXTsYsHjrM+21eBcN1A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.8.0.tgz", + "integrity": "sha512-yS3C9YD+ft0H7G47uU0eKajgTieggCXdA+Fxhm5G+wionY6kPBa8BEVDwPLMxQvkRkv3/LXiFEqjZm9gfxdW+g==", "requires": { - "buffer-writer": "1.0.1", - "js-string-escape": "1.0.1", + "buffer-writer": "2.0.0", "packet-reader": "0.3.1", "pg-connection-string": "0.1.3", - "pg-pool": "~2.0.3", - "pg-types": "~1.12.1", + "pg-pool": "^2.0.4", + "pg-types": "~2.0.0", "pgpass": "1.x", "semver": "4.3.2" } @@ -3623,17 +3351,23 @@ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, "pg-pool": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.3.tgz", - "integrity": "sha1-wCIDLIlJ8xKk+R+2QJzgQHa+Mlc=" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-hod2zYQxM8Gt482q+qONGTYcg/qVcV32VHVPtktbBJs0us3Dj7xibISw0BAAXVMCzt8A/jhfJvpZaxUlqtqs0g==" }, "pg-types": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.1.tgz", - "integrity": "sha1-1kCH45A7WP+q0nnnWVxSIIoUw9I=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.0.0.tgz", + "integrity": "sha512-THUD7gQll5tys+5eQ8Rvs7DjHiIC3bLqixk3gMN9Hu8UrCBAOjf35FoI39rTGGc3lM2HU/R+Knpxvd11mCwOMA==", "requires": { - "postgres-array": "~1.0.0", + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.0", "postgres-interval": "^1.1.0" @@ -3682,9 +3416,9 @@ } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -3708,9 +3442,9 @@ } }, "please-upgrade-node": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.0.2.tgz", - "integrity": "sha512-bslfSeW+ksUbB/sYZeEdKFyTG4YWU9YKRvqfSRvZKE675khAuBUPqV5RUwJZaGuWmVQLweK45Q+lPHFVnSlSug==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", + "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", "dev": true, "requires": { "semver-compare": "^1.0.0" @@ -3736,9 +3470,9 @@ "dev": true }, "postgres-array": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz", - "integrity": "sha1-jgsy6wO/d6XAp4UeBEHBaaJWojg=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" }, "postgres-bytea": { "version": "1.0.0", @@ -3751,9 +3485,9 @@ "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" }, "postgres-interval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", - "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.2.tgz", + "integrity": "sha512-fC3xNHeTskCxL1dC8KOtxXt7YeFmlbTYtn7ul8MkVERuTmf7pI4DrkAxcw3kh1fQ9uz4wQmd03a1mRiXUZChfQ==", "requires": { "xtend": "^4.0.0" } @@ -3765,15 +3499,15 @@ "dev": true }, "prettier": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", - "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.1.tgz", + "integrity": "sha512-XXUITwIkGb3CPJ2hforHah/zTINRyie5006Jd2HKy2qz7snEJXl0KLfsJZW/wst9g6R2rFvqba3VpNYdu1hDcA==", "dev": true }, "pretty-format": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.0.1.tgz", - "integrity": "sha1-1h0GUmjkx1kIO8y8onoBrXx2AfQ=", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", "dev": true, "requires": { "ansi-regex": "^3.0.0", @@ -3783,23 +3517,33 @@ "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -3811,11 +3555,6 @@ "strip-json-comments": "~2.0.1" }, "dependencies": { - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -3832,38 +3571,33 @@ "normalize-package-data": "^2.3.2", "parse-json": "^4.0.0", "pify": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", + "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", + "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + } } }, "reflect-metadata": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", - "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==" + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "regenerator-runtime": { "version": "0.11.1", @@ -3924,76 +3658,133 @@ } }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", - "dev": true, + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "hawk": "~6.0.2", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "stringstream": "~0.0.5", - "tough-cookie": "~2.3.3", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "uuid": "^3.3.2" }, "dependencies": { - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, + "ajv": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - } + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "requires": { + "mime-db": "~1.37.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" } } }, @@ -4013,6 +3804,12 @@ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -4020,13 +3817,13 @@ "dev": true }, "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -4035,21 +3832,27 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "run-node": { @@ -4059,9 +3862,9 @@ "dev": true }, "rxjs": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz", - "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -4081,6 +3884,11 @@ "ret": "~0.1.10" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "samsam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", @@ -4117,15 +3925,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "dev": true, - "requires": { - "to-object-path": "^0.3.0" - } - }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", @@ -4217,6 +4016,12 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, "snake-case": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", @@ -4226,9 +4031,9 @@ } }, "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { "base": "^0.11.1", @@ -4238,7 +4043,7 @@ "map-cache": "^0.2.2", "source-map": "^0.5.6", "source-map-resolve": "^0.5.0", - "use": "^2.0.0" + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -4259,63 +4064,6 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -4343,6 +4091,35 @@ "requires": { "is-descriptor": "^1.0.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, @@ -4353,32 +4130,31 @@ "dev": true, "requires": { "kind-of": "^3.2.0" - } - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "dev": true, - "requires": { - "hoek": "4.x.x" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "^2.0.0", + "atob": "^2.1.1", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -4392,9 +4168,9 @@ "dev": true }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -4402,9 +4178,9 @@ } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { @@ -4418,9 +4194,9 @@ } }, "spdx-license-ids": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", - "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, "split": { @@ -4461,79 +4237,25 @@ } } }, - "sprintf": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/sprintf/-/sprintf-0.1.5.tgz", - "integrity": "sha1-j4PjmpMXwaUCy324BQ5Rxnn27c8=" - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlite3": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.2.tgz", - "integrity": "sha512-51ferIRwYOhzUEtogqOa/y9supADlAht98bF/gbIi6WkzRJX6Yioldxbzj1MV4yV+LgdKD/kkHwFTeFXOG4htA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.6.tgz", + "integrity": "sha512-EqBXxHdKiwvNMRCgml86VTL5TK1i0IKiumnfxykX0gh6H6jaKijAXvE9O1N7+omfNSawR2fOmIyJZcfe8HYWpw==", "requires": { "nan": "~2.10.0", - "node-pre-gyp": "^0.10.3", + "node-pre-gyp": "^0.11.0", "request": "^2.87.0" - }, - "dependencies": { - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - } - } - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - } } }, "sqlstring": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.0.tgz", - "integrity": "sha1-UluKT9Jtb3GqYegipsr5dtMa0qg=" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" }, "sshpk": { "version": "1.14.1", @@ -4574,63 +4296,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -4650,30 +4315,24 @@ } }, "string_decoder": { - "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==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "stringify-object": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.2.tgz", - "integrity": "sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, "requires": { - "get-own-enumerable-property-symbols": "^2.0.1", + "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" } }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -4716,14 +4375,14 @@ "dev": true }, "tar": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz", - "integrity": "sha512-mq9ixIYfNF9SK0IS/h2HKMu8Q2iaCuhDDsZhdEag/FHv8fOaYld4vN7ouMgcSSt5WKZzPs8atclTcJm36OTh4w==", + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "requires": { - "chownr": "^1.0.1", + "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.3", - "minizlib": "^1.1.0", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", "yallist": "^3.0.2" @@ -4735,23 +4394,38 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" } } }, "tedious": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.1.5.tgz", - "integrity": "sha1-hVdNIs3hdp3+TMSg1pcXWxPl0xg=", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.7.1.tgz", + "integrity": "sha512-u3ciATGm5byim91b3+c3MVTvY1zKjDmhUhnBQZXKymT2Vb9w322dziPQY6MhBNyBEcNONPsAMR+7/Uub7NYABQ==", "requires": { "babel-runtime": "^6.26.0", "big-number": "0.3.1", - "bl": "^1.2.0", - "iconv-lite": "^0.4.11", - "readable-stream": "^2.2.6", - "sprintf": "0.1.5" + "bl": "^1.2.2", + "depd": "^1.1.2", + "iconv-lite": "^0.4.23", + "native-duplexpair": "^1.0.0", + "punycode": "^2.1.0", + "readable-stream": "^2.3.6", + "sprintf-js": "^1.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + } } }, "text-encoding": { @@ -4829,93 +4503,49 @@ "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "regex-not": "^1.0.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-plain-object": "^2.0.4" } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -4927,37 +4557,17 @@ "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "requires": { - "punycode": "^1.4.1" } }, "tslib": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", - "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==", - "dev": true + "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==" }, "tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", + "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -4975,12 +4585,12 @@ }, "dependencies": { "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "semver": { @@ -5030,15 +4640,15 @@ } }, "type-detect": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.6.tgz", - "integrity": "sha512-qZ3bAurt2IXGPR3c57PyaSYEnQiLRwPeS60G9TahElBZsdOABo+iKYch/PhRjSTZJ5/DF08x43XMt9qec2g3ig==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "typeorm": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.7.tgz", - "integrity": "sha512-D7JxOBSqBiLAPu/M/4v15J++3klAWcv5WvYgrfl0iaaGObZJ/8UXm3oTpOtQUHfwJO9Cja8JMiwT9G7dyvwrxg==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.12.tgz", + "integrity": "sha512-y9RWUfzE1rZ4WZM8B2Bj0l/V+EhA1yAyEVzHGD2zCM7YjVpqVg/L7HdSRO16VRaPvlz4rHH4Xt0yWfE+NXZLww==", "requires": { "app-root-path": "^2.0.1", "buffer": "^5.1.0", @@ -5050,9 +4660,10 @@ "js-yaml": "^3.11.0", "mkdirp": "^0.5.1", "reflect-metadata": "^0.1.12", + "tslib": "^1.9.0", "xml2js": "^0.4.17", "yargonaut": "^1.1.2", - "yargs": "^11.1.0" + "yargs": "^12.0.5" }, "dependencies": { "ansi-styles": { @@ -5064,36 +4675,38 @@ } }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "dotenv": { @@ -5101,20 +4714,123 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -5124,30 +4840,31 @@ } }, "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "requires": { "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "os-locale": "^3.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": "^9.0.2" + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" } }, "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -5158,42 +4875,23 @@ "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==" }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -5294,6 +4992,21 @@ "upper-case": "^1.1.1" } }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -5307,103 +5020,16 @@ "dev": true }, "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "lazy-cache": "^2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "^0.1.0" - } - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -5445,12 +5071,6 @@ "string-width": "^1.0.2 || 2" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "optional": true - }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", @@ -5538,9 +5158,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargonaut": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.3.tgz", - "integrity": "sha512-+FKokBOLV7DYnHjJpXniUnn1Zng2XBqX2k8d4E4eha19rvEbnctu1TsH98yixJmge7pDSQGS2Av/R30ya+ukrw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", + "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==", "requires": { "chalk": "^1.1.1", "figlet": "^1.1.1", diff --git a/package.json b/package.json index facb717..a1b21a2 100644 --- a/package.json +++ b/package.json @@ -25,48 +25,48 @@ }, "homepage": "https://github.com/Kononnable/typeorm-model-generator#readme", "dependencies": { - "change-case": "^3.0.2", - "handlebars": "^4.0.11", - "mssql": "^4.0.4", - "mysql": "^2.15.0", - "pg": "^7.4.0", - "reflect-metadata": "^0.1.10", - "sqlite3": "^4.0.2", - "typeorm": "^0.2.7", + "change-case": "^3.1.0", + "handlebars": "^4.0.12", + "mssql": "^4.3.0", + "mysql": "^2.16.0", + "pg": "^7.8.0", + "reflect-metadata": "^0.1.13", + "sqlite3": "^4.0.6", + "typeorm": "^0.2.12", "typescript": "^2.8.3", "yargs": "^12.0.1", "yn": "^2.0.0" }, "devDependencies": { - "@types/chai": "^4.1.3", + "@types/chai": "^4.1.7", "@types/chai-as-promised": "7.1.0", "@types/chai-subset": "^1.3.1", - "@types/fs-extra": "^5.0.2", - "@types/handlebars": "^4.0.37", - "@types/mocha": "^5.2.0", - "@types/mssql": "^4.0.10", + "@types/fs-extra": "^5.0.4", + "@types/handlebars": "^4.0.40", + "@types/mocha": "^5.2.5", + "@types/mssql": "^4.0.11", "@types/mysql": "2.15.5", - "@types/node": "^10.0.1", + "@types/node": "^10.12.18", "@types/oracledb": "^1.11.34", - "@types/pg": "^7.4.8", + "@types/pg": "^7.4.11", "@types/sinon": "^5.0.0", "@types/yargs": "^12.0.1", - "chai": "^4.1.2", + "chai": "^4.2.0", "chai-as-promised": "^7.1.1", "chai-subset": "^1.6.0", - "codecov": "^3.0.1", - "dotenv": "^6.0.0", - "fs-extra": "^7.0.0", - "husky": "^1.0.0", + "codecov": "^3.1.0", + "dotenv": "^6.2.0", + "fs-extra": "^7.0.1", + "husky": "^1.3.1", "istanbul": "^0.4.5", - "lint-staged": "^7.2.0", - "mocha": "^5.1.1", - "prettier": "^1.12.1", + "lint-staged": "^7.3.0", + "mocha": "^5.2.0", + "prettier": "^1.16.1", "remap-istanbul": "^0.12.0", - "rimraf": "^2.6.2", + "rimraf": "^2.6.3", "sinon": "^6.0.0", "sinon-chai": "^3.0.0", - "tslint": "^5.11.0", + "tslint": "^5.12.1", "tslint-config-prettier": "^1.17.0" } } diff --git a/src/Engine.ts b/src/Engine.ts index 379a5f2..8c7c879 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -164,12 +164,10 @@ function createHandlebarsHelpers(generationOptions: IGenerationOptions) { } return retStr; }); - Handlebars.registerHelper( - "printPropertyVisibility", - () => - generationOptions.propertyVisibility !== "none" - ? generationOptions.propertyVisibility + " " - : "" + Handlebars.registerHelper("printPropertyVisibility", () => + generationOptions.propertyVisibility !== "none" + ? generationOptions.propertyVisibility + " " + : "" ); Handlebars.registerHelper("toPropertyName", str => { let retStr = ""; From 99f3bfe3a32616c168f01d3d7df329f854ae7015 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 22 Jan 2019 22:35:51 +0100 Subject: [PATCH 095/130] tests optimization --- src/Engine.ts | 91 +++++++----- test/integration/defaultValues.test.ts | 68 --------- test/integration/entityTypes.test.ts | 68 --------- test/integration/githubIssues.test.ts | 90 ------------ test/integration/integration.test.ts | 72 ---------- test/integration/runTestsFromPath.test.ts | 165 ++++++++++++++++++++++ test/utils/GeneralTestUtils.ts | 6 + 7 files changed, 230 insertions(+), 330 deletions(-) delete mode 100644 test/integration/defaultValues.test.ts delete mode 100644 test/integration/entityTypes.test.ts delete mode 100644 test/integration/githubIssues.test.ts delete mode 100644 test/integration/integration.test.ts create mode 100644 test/integration/runTestsFromPath.test.ts diff --git a/src/Engine.ts b/src/Engine.ts index 8c7c879..3bf307a 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -39,20 +39,7 @@ export async function createModelFromDatabase( connectionOptions: IConnectionOptions, generationOptions: IGenerationOptions ) { - function setRelationId(model: EntityInfo[]) { - if (generationOptions.relationIds) { - model.forEach(ent => { - ent.Columns.forEach(col => { - col.relations.map(rel => { - rel.relationIdField = rel.isOwner; - }); - }); - }); - } - return model; - } - - let dbModel = await driver.GetDataFromServer(connectionOptions); + let dbModel = await dataCollectionPhase(driver, connectionOptions); if (dbModel.length === 0) { TomgUtils.LogError( "Tables not found in selected database. Skipping creation of typeorm model.", @@ -60,11 +47,64 @@ export async function createModelFromDatabase( ); return; } - dbModel = setRelationId(dbModel); - dbModel = ApplyNamingStrategy(generationOptions.namingStrategy, dbModel); - createModelFromMetadata(connectionOptions, generationOptions, dbModel); + dbModel = modelCustomizationPhase(dbModel, generationOptions); + modelGenerationPhase(connectionOptions, generationOptions, dbModel); } -function createModelFromMetadata( +export async function dataCollectionPhase( + driver: AbstractDriver, + connectionOptions: IConnectionOptions +) { + return await driver.GetDataFromServer(connectionOptions); +} + +export function modelCustomizationPhase( + dbModel: EntityInfo[], + generationOptions: IGenerationOptions +) { + dbModel = setRelationId(generationOptions, dbModel); + dbModel = applyNamingStrategy(generationOptions.namingStrategy, dbModel); + dbModel = addImportsAndGenerationOptions(dbModel, generationOptions); + return dbModel; +} + +function addImportsAndGenerationOptions( + dbModel: EntityInfo[], + generationOptions: IGenerationOptions +) { + dbModel.forEach(element => { + element.Imports = []; + element.Columns.forEach(column => { + column.relations.forEach(relation => { + if (element.tsEntityName !== relation.relatedTable) { + element.Imports.push(relation.relatedTable); + } + }); + }); + element.GenerateConstructor = generationOptions.constructor; + element.IsActiveRecord = generationOptions.activeRecord; + element.Imports.filter((elem, index, self) => { + return index === self.indexOf(elem); + }); + }); + return dbModel; +} + +function setRelationId( + generationOptions: IGenerationOptions, + model: EntityInfo[] +) { + if (generationOptions.relationIds) { + model.forEach(ent => { + ent.Columns.forEach(col => { + col.relations.map(rel => { + rel.relationIdField = rel.isOwner; + }); + }); + }); + } + return model; +} +export function modelGenerationPhase( connectionOptions: IConnectionOptions, generationOptions: IGenerationOptions, databaseModel: EntityInfo[] @@ -89,19 +129,6 @@ function createModelFromMetadata( noEscape: true }); databaseModel.forEach(element => { - element.Imports = []; - element.Columns.forEach(column => { - column.relations.forEach(relation => { - if (element.tsEntityName !== relation.relatedTable) { - element.Imports.push(relation.relatedTable); - } - }); - }); - element.GenerateConstructor = generationOptions.constructor; - element.IsActiveRecord = generationOptions.activeRecord; - element.Imports.filter((elem, index, self) => { - return index === self.indexOf(elem); - }); let casedFileName = ""; switch (generationOptions.convertCaseFile) { case "camel": @@ -267,7 +294,7 @@ function createTypeOrmConfig( ); } } -function ApplyNamingStrategy( +function applyNamingStrategy( namingStrategy: NamingStrategy, dbModel: EntityInfo[] ) { diff --git a/test/integration/defaultValues.test.ts b/test/integration/defaultValues.test.ts deleted file mode 100644 index 6e4f06c..0000000 --- a/test/integration/defaultValues.test.ts +++ /dev/null @@ -1,68 +0,0 @@ -require('dotenv').config() -import { expect } from "chai"; -import fs = require('fs-extra'); -import path = require('path') -import "reflect-metadata"; -import { EntityFileToJson } from "../utils/EntityFileToJson"; -import chai = require('chai'); -import chaiSubset = require('chai-subset'); -import * as ts from "typescript"; -import { createDriver, createModelFromDatabase } from "../../src/Engine"; -import * as GTU from "../utils/GeneralTestUtils" - -chai.use(chaiSubset); - -describe("Column default values", async function () { - this.timeout(30000) - this.slow(5000)// compiling created models takes time - - const dbDrivers: string[] = GTU.getEnabledDbDrivers(); - - const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/defaultValues') - const examplesPathTS = path.resolve(process.cwd(), 'test/integration/defaultValues') - const files = fs.readdirSync(examplesPathTS) - - for (const dbDriver of dbDrivers) { - for (const folder of files) { - if (dbDriver == folder) { - it(dbDriver, async function () { - - const filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') - const filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') - const resultsPath = path.resolve(process.cwd(), `output`) - fs.removeSync(resultsPath) - - const driver = createDriver(dbDriver); - const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); - const generationOptions = GTU.getGenerationOptions(resultsPath); - - await createModelFromDatabase(driver,connectionOptions,generationOptions) - const filesGenPath = path.resolve(resultsPath, 'entities') - - const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) - const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) - - expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) - - for (const file of filesOrg) { - const entftj = new EntityFileToJson(); - const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) - const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) - expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) - } - const currentDirectoryFiles = fs.readdirSync(filesGenPath). - filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) - const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { - experimentalDecorators: true, - sourceMap: false, - emitDecoratorMetadata: true, - target: ts.ScriptTarget.ES2016, - moduleResolution: ts.ModuleResolutionKind.NodeJs, - module: ts.ModuleKind.CommonJS - }); - expect(compileErrors, 'Errors detected while compiling generated model').to.be.false; - }); - } - } - } -}) diff --git a/test/integration/entityTypes.test.ts b/test/integration/entityTypes.test.ts deleted file mode 100644 index 4bf1134..0000000 --- a/test/integration/entityTypes.test.ts +++ /dev/null @@ -1,68 +0,0 @@ -require('dotenv').config() -import { expect } from "chai"; -import fs = require('fs-extra'); -import path = require('path') -import "reflect-metadata"; -import { EntityFileToJson } from "../utils/EntityFileToJson"; -import chai = require('chai'); -import chaiSubset = require('chai-subset'); -import * as ts from "typescript"; -import { createDriver, createModelFromDatabase } from "../../src/Engine"; -import * as GTU from "../utils/GeneralTestUtils" - -chai.use(chaiSubset); - -describe("Platform specyfic types", async function () { - this.timeout(30000) - this.slow(5000)// compiling created models takes time - - const dbDrivers: string[] = GTU.getEnabledDbDrivers(); - - const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/entityTypes') - const examplesPathTS = path.resolve(process.cwd(), 'test/integration/entityTypes') - const files = fs.readdirSync(examplesPathTS) - - for (const dbDriver of dbDrivers) { - for (const folder of files) { - if (dbDriver == folder) { - it(dbDriver, async function () { - - const filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') - const filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') - const resultsPath = path.resolve(process.cwd(), `output`) - fs.removeSync(resultsPath) - - const driver = createDriver(dbDriver); - const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); - const generationOptions = GTU.getGenerationOptions(resultsPath); - - await createModelFromDatabase(driver,connectionOptions,generationOptions) - const filesGenPath = path.resolve(resultsPath, 'entities') - - const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) - const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) - - expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) - - for (const file of filesOrg) { - const entftj = new EntityFileToJson(); - const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) - const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) - expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) - } - const currentDirectoryFiles = fs.readdirSync(filesGenPath). - filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) - const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { - experimentalDecorators: true, - sourceMap: false, - emitDecoratorMetadata: true, - target: ts.ScriptTarget.ES2016, - moduleResolution: ts.ModuleResolutionKind.NodeJs, - module: ts.ModuleKind.CommonJS - }); - expect(compileErrors, 'Errors detected while compiling generated model').to.be.false; - }); - } - } - } -}) diff --git a/test/integration/githubIssues.test.ts b/test/integration/githubIssues.test.ts deleted file mode 100644 index dee14ae..0000000 --- a/test/integration/githubIssues.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -require('dotenv').config() -import { expect } from "chai"; -import fs = require('fs-extra'); -import path = require('path') -import "reflect-metadata"; -import { createModelFromDatabase, createDriver } from "../../src/Engine"; -import { EntityFileToJson } from "../utils/EntityFileToJson"; -import chai = require('chai'); -import chaiSubset = require('chai-subset'); -import * as ts from "typescript"; -import * as GTU from "../utils/GeneralTestUtils" - -chai.use(chaiSubset); - - -describe("GitHub issues", async function () { - this.timeout(30000) - this.slow(5000)// compiling created models takes time - - const dbDrivers: string[] = GTU.getEnabledDbDrivers(); - - const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/github-issues') - const examplesPathTS = path.resolve(process.cwd(), 'test/integration/github-issues') - const files = fs.readdirSync(examplesPathTS) - - for (const folder of files) { - - describe(`#${folder}`, async function () { - for (const dbDriver of dbDrivers) { - - switch (folder) { - case '39': - if (dbDriver == 'mysql' || dbDriver == 'mariadb' || dbDriver == 'oracle' || dbDriver == 'sqlite') { - continue; - } - break; - default: - break; - } - - it(dbDriver, async function () { - - const filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') - const filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') - const resultsPath = path.resolve(process.cwd(), `output`) - fs.removeSync(resultsPath) - - const driver = createDriver(dbDriver); - const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); - const generationOptions = GTU.getGenerationOptions(resultsPath); - - switch (folder) { - case '65': - generationOptions.relationIds = true; - break; - default: - break; - } - - await createModelFromDatabase(driver,connectionOptions,generationOptions) - const filesGenPath = path.resolve(resultsPath, 'entities') - - const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) - const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) - - expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) - - for (const file of filesOrg) { - const entftj = new EntityFileToJson(); - const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) - const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) - expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) - } - const currentDirectoryFiles = fs.readdirSync(filesGenPath). - filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) - const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { - experimentalDecorators: true, - sourceMap: false, - emitDecoratorMetadata: true, - target: ts.ScriptTarget.ES2016, - moduleResolution: ts.ModuleResolutionKind.NodeJs, - module: ts.ModuleKind.CommonJS - }); - expect(compileErrors, 'Errors detected while compiling generated model').to.be.false; - }); - - } - }) - } -}) diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts deleted file mode 100644 index 4710217..0000000 --- a/test/integration/integration.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -require('dotenv').config() -import { expect } from "chai"; -import fs = require('fs-extra'); -import path = require('path') -import "reflect-metadata"; -import { createModelFromDatabase, createDriver } from "../../src/Engine"; -import { EntityFileToJson } from "../utils/EntityFileToJson"; -import chai = require('chai'); -import chaiSubset = require('chai-subset'); -import * as ts from "typescript"; -import * as GTU from "../utils/GeneralTestUtils" - -chai.use(chaiSubset); - -describe("TypeOrm examples", async function () { - this.timeout(30000) - this.slow(5000)// compiling created models takes time - - const dbDrivers: string[] = GTU.getEnabledDbDrivers(); - - const examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/examples') - const examplesPathTS = path.resolve(process.cwd(), 'test/integration/examples') - const files = fs.readdirSync(examplesPathTS) - - for (const folder of files) { - describe(folder, async function () { - for (const dbDriver of dbDrivers) { - it(dbDriver, async function () { - const filesOrgPathJS = path.resolve(examplesPathJS, folder, 'entity') - const filesOrgPathTS = path.resolve(examplesPathTS, folder, 'entity') - const resultsPath = path.resolve(process.cwd(), `output`) - fs.removeSync(resultsPath) - - const driver=createDriver(dbDriver); - const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); - const generationOptions = GTU.getGenerationOptions(resultsPath); - - if (folder == 'sample18-lazy-relations') { - generationOptions.lazy = true; - } - - await createModelFromDatabase(driver,connectionOptions,generationOptions) - const filesGenPath = path.resolve(resultsPath, 'entities') - - const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')) - const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')) - - expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen) - - for (const file of filesOrg) { - const entftj = new EntityFileToJson(); - const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))) - const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))) - expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg) - } - const currentDirectoryFiles = fs.readdirSync(filesGenPath). - filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)) - const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { - experimentalDecorators: true, - sourceMap: false, - emitDecoratorMetadata: true, - target: ts.ScriptTarget.ES2016, - moduleResolution: ts.ModuleResolutionKind.NodeJs, - module: ts.ModuleKind.CommonJS - }); - expect(compileErrors, 'Errors detected while compiling generated model').to.be.false; - }); - - } - }) - } -}) diff --git a/test/integration/runTestsFromPath.test.ts b/test/integration/runTestsFromPath.test.ts new file mode 100644 index 0000000..b3ae9d0 --- /dev/null +++ b/test/integration/runTestsFromPath.test.ts @@ -0,0 +1,165 @@ +require('dotenv').config() +import "reflect-metadata"; +import { expect } from "chai"; +import fs = require('fs-extra'); +import path = require('path'); +import { EntityFileToJson } from "../utils/EntityFileToJson"; +import { createDriver, createModelFromDatabase, dataCollectionPhase, modelCustomizationPhase, modelGenerationPhase } from "../../src/Engine"; +import * as ts from "typescript"; +import * as GTU from "../utils/GeneralTestUtils" +import chaiSubset = require('chai-subset'); +import chai = require('chai'); + +chai.use(chaiSubset); + +describe("Column default values", async function () { + const testPartialPath = 'test/integration/defaultValues' + this.timeout(30000) + this.slow(5000)// compiling created models takes time + runTestsFromPath(testPartialPath, true); +}) +describe("Platform specyfic types", async function () { + this.timeout(30000) + this.slow(5000)// compiling created models takes time + const testPartialPath = 'test/integration/entityTypes' + runTestsFromPath(testPartialPath, true); +}) +describe("GitHub issues", async function () { + this.timeout(30000) + this.slow(5000)// compiling created models takes time + const testPartialPath = 'test/integration/github-issues' + runTestsFromPath(testPartialPath, false); +}) +describe("TypeOrm examples", async function () { + this.timeout(30000) + this.slow(5000)// compiling created models takes time + const testPartialPath = 'test/integration/examples' + runTestsFromPath(testPartialPath, false); +}) + +export function runTestsFromPath(testPartialPath: string, isDbSpecific: boolean) { + const resultsPath = path.resolve(process.cwd(), `output`) + if (!fs.existsSync(resultsPath)) { + fs.mkdirSync(resultsPath); + } + const dbDrivers: string[] = GTU.getEnabledDbDrivers(); + for (const dbDriver of dbDrivers) { + const newDirPath = path.resolve(resultsPath, dbDriver) + if (!fs.existsSync(newDirPath)) { + fs.mkdirSync(newDirPath); + } + } + const files = fs.readdirSync(path.resolve(process.cwd(), testPartialPath)); + if (isDbSpecific) { + for (const dbDriver of dbDrivers) { + for (const folder of files) { + if (dbDriver == folder) { + runTest(dbDriver, testPartialPath, folder); + } + } + } + } else { + for (const folder of files) { + runTestForMultipleDrivers(folder, dbDrivers, testPartialPath); + } + } +} +function runTestForMultipleDrivers(testName: string, dbDrivers: string[], testPartialPath: string) { + it(testName, async function () { + const driversToRun = selectDriversForSpecyficTest(); + const modelGenerationPromises = driversToRun.map(async (dbDriver) => { + const { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS } = await prepareTestRuns(testPartialPath, testName, dbDriver); + let dbModel = await dataCollectionPhase(driver, connectionOptions); + dbModel = modelCustomizationPhase(dbModel, generationOptions); + const filesGenPath = path.resolve(resultsPath, 'entities'); + modelGenerationPhase(connectionOptions, generationOptions, dbModel); + compareGeneratedFiles(filesOrgPathTS, filesGenPath); + compileGeneratedModel(filesGenPath); + return { dbModel, generationOptions, connectionOptions, resultsPath, filesOrgPathTS, dbDriver }; + }) + ///TODO: Find first generated result and compile, compare only it + // Then when all db drivers finished compare only generated dbModels to the first one + + + //const firstResult = await Promise.race(modelGenerationPromises); + const generatedData = await Promise.all(modelGenerationPromises) + // for (const iterator of generatedData) { + + // const filesGenPath = path.resolve(iterator.resultsPath, 'entities'); + // modelGenerationPhase(iterator.connectionOptions, iterator.generationOptions, iterator.dbModel); + // // compareGeneratedFiles(iterator.filesOrgPathTS, filesGenPath); + // // compileGeneratedModel(filesGenPath); + // } + // //expect(generatedData[1].dbModel).to.be.deep.eq(generatedData[2].dbModel, `Gennerated models differ for ${generatedData[1].dbDriver} and ${generatedData[2].dbDriver} `) + // for (const driverResult of generatedData) { + // expect(firstResult.dbModel).to.be.deep.eq(driverResult.dbModel, `Gennerated models differ for ${firstResult.dbDriver} and ${driverResult.dbDriver} `) + // } + }); + + function selectDriversForSpecyficTest() { + switch (testName) { + case '39': + return dbDrivers.filter(dbDriver => !['mysql', 'mariadb', 'oracle', 'sqlite'].includes(dbDriver)) + default: + return dbDrivers; + } + } +} + +function runTest(dbDriver: string, testPartialPath: string, testName: string) { + it(dbDriver, async function () { + const { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS } = await prepareTestRuns(testPartialPath, testName, dbDriver); + await createModelFromDatabase(driver, connectionOptions, generationOptions); + const filesGenPath = path.resolve(resultsPath, 'entities'); + compareGeneratedFiles(filesOrgPathTS, filesGenPath); + compileGeneratedModel(filesGenPath); + }); +} + +function compareGeneratedFiles(filesOrgPathTS: string, filesGenPath: string) { + const filesOrg = fs.readdirSync(filesOrgPathTS).filter((val) => val.toString().endsWith('.ts')); + const filesGen = fs.readdirSync(filesGenPath).filter((val) => val.toString().endsWith('.ts')); + expect(filesOrg, 'Errors detected in model comparision').to.be.deep.equal(filesGen); + for (const file of filesOrg) { + const entftj = new EntityFileToJson(); + const jsonEntityOrg = entftj.convert(fs.readFileSync(path.resolve(filesOrgPathTS, file))); + const jsonEntityGen = entftj.convert(fs.readFileSync(path.resolve(filesGenPath, file))); + expect(jsonEntityGen, `Error in file ${file}`).to.containSubset(jsonEntityOrg); + } +} + +function compileGeneratedModel(filesGenPath: string) { + const currentDirectoryFiles = fs.readdirSync(filesGenPath). + filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)); + const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { + experimentalDecorators: true, + sourceMap: false, + emitDecoratorMetadata: true, + target: ts.ScriptTarget.ES2016, + moduleResolution: ts.ModuleResolutionKind.NodeJs, + module: ts.ModuleKind.CommonJS + }); + expect(compileErrors, 'Errors detected while compiling generated model').to.be.false; +} + +async function prepareTestRuns(testPartialPath: string, testName: string, dbDriver: string) { + const filesOrgPathJS = path.resolve(process.cwd(), 'dist', testPartialPath, testName, 'entity'); + const filesOrgPathTS = path.resolve(process.cwd(), testPartialPath, testName, 'entity'); + const resultsPath = path.resolve(process.cwd(), `output`, dbDriver); + fs.removeSync(resultsPath); + const driver = createDriver(dbDriver); + const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); + const generationOptions = GTU.getGenerationOptions(resultsPath); + switch (testName) { + case '65': + generationOptions.relationIds = true; + break; + case 'sample18-lazy-relations': + generationOptions.lazy = true; + break; + default: + break; + } + return { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS }; +} + diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index 75ebb03..491add2 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -61,6 +61,7 @@ export async function createMSSQLModels(filesOrgPath: string): Promise Date: Wed, 23 Jan 2019 01:48:45 +0100 Subject: [PATCH 096/130] changes in columnInfo model --- src/drivers/AbstractDriver.ts | 4 +-- src/drivers/MssqlDriver.ts | 26 ++++++++-------- src/drivers/MysqlDriver.ts | 36 ++++++++++----------- src/drivers/OracleDriver.ts | 26 ++++++++-------- src/drivers/PostgresDriver.ts | 36 ++++++++++----------- src/drivers/SqliteDriver.ts | 38 +++++++++++------------ src/entity.mst | 32 +++++++++---------- src/models/ColumnInfo.ts | 20 ++---------- test/drivers/MssqlDriver.test.ts | 21 +++++-------- test/integration/runTestsFromPath.test.ts | 8 ++--- test/utils/EntityFileToJson.ts | 1 - 11 files changed, 114 insertions(+), 134 deletions(-) diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 882447b..d1eabad 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -342,10 +342,10 @@ export abstract class AbstractDriver { primaryIndex.columns.some( cIndex => cIndex.name === col.tsName ) - ).forEach(col => (col.isPrimary = true)); + ).forEach(col => (col.options.primary = true)); if ( !entity.Columns.some(v => { - return v.isPrimary; + return !!v.options.primary; }) ) { TomgUtils.LogError( diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 7ab2a6a..de5eeb9 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -60,14 +60,14 @@ export class MssqlDriver extends AbstractDriver { .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; - colInfo.sqlName = resp.COLUMN_NAME; - colInfo.isNullable = resp.IS_NULLABLE === "YES"; - colInfo.isGenerated = resp.IsIdentity === 1; - colInfo.isUnique = resp.IsUnique === 1; - colInfo.default = this.ReturnDefaultValueFunction( + colInfo.options.name = resp.COLUMN_NAME; + colInfo.options.nullable = resp.IS_NULLABLE === "YES"; + colInfo.options.generated = resp.IsIdentity === 1; + colInfo.options.unique = resp.IsUnique === 1; + colInfo.options.default = this.ReturnDefaultValueFunction( resp.COLUMN_DEFAULT ); - colInfo.sqlType = resp.DATA_TYPE; + colInfo.options.type = resp.DATA_TYPE as any; switch (resp.DATA_TYPE) { case "bigint": colInfo.tsType = "string"; @@ -181,24 +181,24 @@ export class MssqlDriver extends AbstractDriver { if ( this.ColumnTypesWithPrecision.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.numericPrecision = resp.NUMERIC_PRECISION; - colInfo.numericScale = resp.NUMERIC_SCALE; + colInfo.options.precision = resp.NUMERIC_PRECISION; + colInfo.options.scale = resp.NUMERIC_SCALE; } if ( this.ColumnTypesWithLength.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.lenght = + colInfo.options.length = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH - : null; + : undefined; } - if (colInfo.sqlType) { + if (colInfo.options.type) { ent.Columns.push(colInfo); } }); diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index bccbd65..566739a 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -50,21 +50,21 @@ export class MysqlDriver extends AbstractDriver { .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; - colInfo.sqlName = resp.COLUMN_NAME; - colInfo.isNullable = resp.IS_NULLABLE === "YES"; - colInfo.isGenerated = resp.IsIdentity === 1; - colInfo.isUnique = resp.column_key === "UNI"; - colInfo.default = this.ReturnDefaultValueFunction( + colInfo.options.name = resp.COLUMN_NAME; + colInfo.options.nullable = resp.IS_NULLABLE === "YES"; + colInfo.options.generated = resp.IsIdentity === 1; + colInfo.options.unique = resp.column_key === "UNI"; + colInfo.options.default = this.ReturnDefaultValueFunction( resp.COLUMN_DEFAULT ); - colInfo.sqlType = resp.DATA_TYPE; + colInfo.options.type = resp.DATA_TYPE as any; switch (resp.DATA_TYPE) { case "int": colInfo.tsType = "number"; break; case "tinyint": if (resp.column_type === "tinyint(1)") { - colInfo.width = 1; + colInfo.options.width = 1; colInfo.tsType = "boolean"; } else { colInfo.tsType = "number"; @@ -135,7 +135,7 @@ export class MysqlDriver extends AbstractDriver { break; case "enum": colInfo.tsType = "string"; - colInfo.enumOptions = resp.column_type + colInfo.options.enum = resp.column_type .substring(5, resp.column_type.length - 1) .replace(/\'/gi, '"'); break; @@ -184,36 +184,36 @@ export class MysqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithPrecision.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.numericPrecision = resp.NUMERIC_PRECISION; - colInfo.numericScale = resp.NUMERIC_SCALE; + colInfo.options.precision = resp.NUMERIC_PRECISION; + colInfo.options.scale = resp.NUMERIC_SCALE; } if ( this.ColumnTypesWithLength.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.lenght = + colInfo.options.length = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH - : null; + : undefined; } if ( this.ColumnTypesWithWidth.some( v => - v === colInfo.sqlType && + v === colInfo.options.type && colInfo.tsType !== "boolean" ) ) { - colInfo.width = + colInfo.options.width = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH - : null; + : undefined; } - if (colInfo.sqlType) { + if (colInfo.options.type) { ent.Columns.push(colInfo); } }); diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 4ccf0e9..fa973f6 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -62,18 +62,18 @@ export class OracleDriver extends AbstractDriver { .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.COLUMN_NAME; - colInfo.sqlName = resp.COLUMN_NAME; - colInfo.isNullable = resp.NULLABLE === "Y"; - colInfo.isGenerated = resp.IDENTITY_COLUMN === "YES"; - colInfo.default = + colInfo.options.name = resp.COLUMN_NAME; + colInfo.options.nullable = resp.NULLABLE === "Y"; + colInfo.options.generated = resp.IDENTITY_COLUMN === "YES"; + colInfo.options.default = !resp.DATA_DEFAULT || resp.DATA_DEFAULT.includes('"') ? null : this.ReturnDefaultValueFunction( resp.DATA_DEFAULT ); - colInfo.isUnique = resp.IS_UNIQUE > 0; + colInfo.options.unique = resp.IS_UNIQUE > 0; resp.DATA_TYPE = resp.DATA_TYPE.replace(/\([0-9]+\)/g, ""); - colInfo.sqlType = resp.DATA_TYPE.toLowerCase(); + colInfo.options.type = resp.DATA_TYPE.toLowerCase() as any; switch (resp.DATA_TYPE.toLowerCase()) { case "char": colInfo.tsType = "string"; @@ -170,22 +170,22 @@ export class OracleDriver extends AbstractDriver { } if ( this.ColumnTypesWithPrecision.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.numericPrecision = resp.DATA_PRECISION; - colInfo.numericScale = resp.DATA_SCALE; + colInfo.options.precision = resp.DATA_PRECISION; + colInfo.options.scale = resp.DATA_SCALE; } if ( this.ColumnTypesWithLength.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.lenght = - resp.DATA_LENGTH > 0 ? resp.DATA_LENGTH : null; + colInfo.options.length = + resp.DATA_LENGTH > 0 ? resp.DATA_LENGTH : undefined; } - if (colInfo.sqlType) { + if (colInfo.options.type) { ent.Columns.push(colInfo); } }); diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index ebe741c..2890166 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -59,11 +59,11 @@ export class PostgresDriver extends AbstractDriver { .forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.column_name; - colInfo.sqlName = resp.column_name; - colInfo.isNullable = resp.is_nullable === "YES"; - colInfo.isGenerated = resp.isidentity === "YES"; - colInfo.isUnique = resp.isunique === "1"; - colInfo.default = colInfo.isGenerated + colInfo.options.name = resp.column_name; + colInfo.options.nullable = resp.is_nullable === "YES"; + colInfo.options.generated = resp.isidentity === "YES"; + colInfo.options.unique = resp.isunique === "1"; + colInfo.options.default = colInfo.options.generated ? null : this.ReturnDefaultValueFunction(resp.column_default); @@ -94,10 +94,10 @@ export class PostgresDriver extends AbstractDriver { } return; } - colInfo.sqlType = columnTypes.sql_type; + colInfo.options.type = columnTypes.sql_type as any; colInfo.tsType = columnTypes.ts_type; - colInfo.isArray = columnTypes.is_array; - if (colInfo.isArray) { + colInfo.options.array = columnTypes.is_array; + if (colInfo.options.array) { colInfo.tsType = colInfo.tsType .split("|") .map(x => x.replace("|", "").trim() + "[]") @@ -106,33 +106,33 @@ export class PostgresDriver extends AbstractDriver { if ( this.ColumnTypesWithPrecision.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.numericPrecision = resp.numeric_precision; - colInfo.numericScale = resp.numeric_scale; + colInfo.options.precision = resp.numeric_precision; + colInfo.options.scale = resp.numeric_scale; } if ( this.ColumnTypesWithLength.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.lenght = + colInfo.options.length = resp.character_maximum_length > 0 ? resp.character_maximum_length - : null; + : undefined; } if ( this.ColumnTypesWithWidth.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) ) { - colInfo.width = + colInfo.options.width = resp.character_maximum_length > 0 ? resp.character_maximum_length - : null; + : undefined; } - if (colInfo.sqlType && colInfo.tsType) { + if (colInfo.options.type && colInfo.tsType) { ent.Columns.push(colInfo); } }); diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index b65ba2b..4b548aa 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -47,22 +47,22 @@ export class SqliteDriver extends AbstractDriver { response.forEach(resp => { const colInfo: ColumnInfo = new ColumnInfo(); colInfo.tsName = resp.name; - colInfo.sqlName = resp.name; - colInfo.isNullable = resp.notnull === 0; - colInfo.isPrimary = resp.pk > 0; - colInfo.default = this.ReturnDefaultValueFunction( + colInfo.options.name = resp.name; + colInfo.options.nullable = resp.notnull === 0; + colInfo.options.primary = resp.pk > 0; + colInfo.options.default = this.ReturnDefaultValueFunction( resp.dflt_value ); - colInfo.sqlType = resp.type + colInfo.options.type = resp.type .replace(/\([0-9 ,]+\)/g, "") .toLowerCase() - .trim(); - colInfo.isGenerated = - colInfo.isPrimary && + .trim() as any; + colInfo.options.generated = + colInfo.options.primary && this.tablesWithGeneratedPrimaryKey.includes( ent.tsEntityName ); - switch (colInfo.sqlType) { + switch (colInfo.options.type) { case "int": colInfo.tsType = "number"; break; @@ -147,7 +147,7 @@ export class SqliteDriver extends AbstractDriver { default: TomgUtils.LogError( `Unknown column type: ${ - colInfo.sqlType + colInfo.options.type } table name: ${ent.tsEntityName} column name: ${ resp.name }` @@ -157,24 +157,24 @@ export class SqliteDriver extends AbstractDriver { const options = resp.type.match(/\([0-9 ,]+\)/g); if ( this.ColumnTypesWithPrecision.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) && options ) { - colInfo.numericPrecision = options[0] + colInfo.options.precision = options[0] .substring(1, options[0].length - 1) .split(",")[0] as any; - colInfo.numericScale = options[0] + colInfo.options.scale = options[0] .substring(1, options[0].length - 1) .split(",")[1] as any; } if ( this.ColumnTypesWithLength.some( - v => v === colInfo.sqlType + v => v === colInfo.options.type ) && options ) { - colInfo.lenght = options[0].substring( + colInfo.options.length = options[0].substring( 1, options[0].length - 1 ) as any; @@ -182,18 +182,18 @@ export class SqliteDriver extends AbstractDriver { if ( this.ColumnTypesWithWidth.some( v => - v === colInfo.sqlType && + v === colInfo.options.type && colInfo.tsType !== "boolean" ) && options ) { - colInfo.width = options[0].substring( + colInfo.options.width = options[0].substring( 1, options[0].length - 1 ) as any; } - if (colInfo.sqlType) { + if (colInfo.options.type) { ent.Columns.push(colInfo); } }); @@ -243,7 +243,7 @@ export class SqliteDriver extends AbstractDriver { ) { ent.Columns.filter( v => v.tsName === indexColumnInfo.name - ).map(v => (v.isUnique = true)); + ).map(v => (v.options.unique = true)); } indexInfo.columns.push(indexColumnInfo); }); diff --git a/src/entity.mst b/src/entity.mst index eb6846f..99c3ae5 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -8,24 +8,24 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne {{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName tsEntityName}}{{#IsActiveRecord}} extends BaseEntity{{/IsActiveRecord}} { {{#Columns}} - {{^relations}}{{#isGenerated}} @PrimaryGeneratedColumn({ - type:"{{sqlType}}", {{/isGenerated}}{{^isGenerated}} @Column("{{sqlType}}",{ {{#isNullable}} - nullable:true,{{/isNullable}}{{^isNullable}} - nullable:false,{{/isNullable}}{{#isPrimary}} - primary:{{isPrimary}},{{/isPrimary}}{{/isGenerated}}{{#isUnique}} - unique: true,{{/isUnique}}{{#lenght}} - length:{{.}},{{/lenght}}{{#width}} + {{^relations}}{{#options}}{{#generated}} @PrimaryGeneratedColumn({ + type:"{{type}}", {{/generated}}{{^generated}} @Column("{{type}}",{ {{#nullable}} + nullable:true,{{/nullable}}{{^nullable}} + nullable:false,{{/nullable}}{{#primary}} + primary:{{primary}},{{/primary}}{{/generated}}{{#unique}} + unique: true,{{/unique}}{{#length}} + length:{{.}},{{/length}}{{#width}} width:{{.}},{{/width}}{{#default}} - default: {{.}},{{/default}}{{#numericPrecision}} - precision:{{.}},{{/numericPrecision}}{{#numericScale}} - scale:{{.}},{{/numericScale}}{{#enumOptions}} - enum:[{{.}}],{{/enumOptions}}{{#isArray}} - array:{{isArray}},{{/isArray}} - name:"{{sqlName}}" - }) - {{printPropertyVisibility}}{{toPropertyName tsName}}:{{tsType}}{{#isNullable}} | null{{/isNullable}}; + default: {{.}},{{/default}}{{#precision}} + precision:{{.}},{{/precision}}{{#scale}} + scale:{{.}},{{/scale}}{{#enum}} + enum:[{{.}}],{{/enum}}{{#array}} + array:{{array}},{{/array}} + name:"{{name}}" + }){{/options}} + {{printPropertyVisibility}}{{toPropertyName tsName}}:{{tsType}}{{#options/nullable}} | null{{/options/nullable}}; {{/relations}}{{#relations}} - @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../isPrimary}}primary:true,{{/../isPrimary}}{{^../isNullable}} nullable:false,{{/../isNullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} + @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../options/primary}}primary:true,{{/../options/primary}}{{^../options/nullable}} nullable:false,{{/../options/nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; {{else}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index 8cdaea3..24307c6 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -1,11 +1,9 @@ +import { ColumnOptions } from "typeorm"; import { RelationInfo } from "./RelationInfo"; export class ColumnInfo { + public options: ColumnOptions = {}; public tsName: string = ""; - public sqlName: string = ""; - public default: string | null = null; - public isNullable: boolean = false; - public isUnique: boolean = false; public tsType: | "number" | "string" @@ -16,17 +14,5 @@ export class ColumnInfo { | "string | Object" | "string | string[]" | "any"; - public sqlType: string; - public lenght: number | null = null; - public width: number | null = null; - public isPrimary: boolean = false; - public isGenerated: boolean = false; - public isArray: boolean = false; - public numericPrecision: number | null = null; - public numericScale: number | null = null; - public enumOptions: string | null = null; - public relations: RelationInfo[]; - constructor() { - this.relations = []; - } + public relations: RelationInfo[] = []; } diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 50dfe69..c2cc4a2 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -81,21 +81,16 @@ describe('MssqlDriver', function () { entities.push(y) const expected: EntityInfo[] = JSON.parse(JSON.stringify(entities)); expected[0].Columns.push({ - lenght: null, - default: `() => "'a'"`, - isNullable: true, - isPrimary: false, - isGenerated: true, + options: { + default: `() => "'a'"`, + nullable: true, + generated: true, + name: 'name', + unique:false, + type: 'int', + }, tsName: 'name', - sqlName: 'name', - numericPrecision: null, - numericScale: null, - width: null, - sqlType: 'int', tsType: 'number', - enumOptions: null, - isUnique:false, - isArray:false, relations: [] as RelationInfo[], }) const result = await driver.GetCoulmnsFromEntity(entities, 'schema'); diff --git a/test/integration/runTestsFromPath.test.ts b/test/integration/runTestsFromPath.test.ts index b3ae9d0..c27c66e 100644 --- a/test/integration/runTestsFromPath.test.ts +++ b/test/integration/runTestsFromPath.test.ts @@ -25,14 +25,14 @@ describe("Platform specyfic types", async function () { runTestsFromPath(testPartialPath, true); }) describe("GitHub issues", async function () { - this.timeout(30000) - this.slow(5000)// compiling created models takes time + this.timeout(60000) + this.slow(30000)// compiling created models takes time const testPartialPath = 'test/integration/github-issues' runTestsFromPath(testPartialPath, false); }) describe("TypeOrm examples", async function () { - this.timeout(30000) - this.slow(5000)// compiling created models takes time + this.timeout(60000) + this.slow(30000)// compiling created models takes time const testPartialPath = 'test/integration/examples' runTestsFromPath(testPartialPath, false); }) diff --git a/test/utils/EntityFileToJson.ts b/test/utils/EntityFileToJson.ts index 300e56c..237ec8f 100644 --- a/test/utils/EntityFileToJson.ts +++ b/test/utils/EntityFileToJson.ts @@ -1,4 +1,3 @@ - export class EntityFileToJson { public getEntityOptions(trimmedLine: string, ent: EntityJson) { const decoratorParameters = trimmedLine.slice(trimmedLine.indexOf('(') + 1, trimmedLine.lastIndexOf(')')) From bbcd7fb8753de2f33c8ef67c8e75d738c3d19c11 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 13:05:13 +0100 Subject: [PATCH 097/130] removing column options with default values from generated model --- src/Engine.ts | 60 +++++++++++++++++++++-- src/drivers/AbstractDriver.ts | 2 + src/drivers/MssqlDriver.ts | 6 +++ src/drivers/MysqlDriver.ts | 6 +++ src/drivers/OracleDriver.ts | 5 ++ src/drivers/PostgresDriver.ts | 6 +++ src/drivers/SqliteDriver.ts | 6 +++ test/integration/runTestsFromPath.test.ts | 2 +- 8 files changed, 89 insertions(+), 4 deletions(-) diff --git a/src/Engine.ts b/src/Engine.ts index 3bf307a..d8210ad 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -2,6 +2,7 @@ import changeCase = require("change-case"); import fs = require("fs"); import * as Handlebars from "handlebars"; import path = require("path"); +import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { AbstractDriver } from "./drivers/AbstractDriver"; import { MariaDbDriver } from "./drivers/MariaDbDriver"; @@ -47,7 +48,11 @@ export async function createModelFromDatabase( ); return; } - dbModel = modelCustomizationPhase(dbModel, generationOptions); + dbModel = modelCustomizationPhase( + dbModel, + generationOptions, + driver.defaultValues + ); modelGenerationPhase(connectionOptions, generationOptions, dbModel); } export async function dataCollectionPhase( @@ -59,14 +64,63 @@ export async function dataCollectionPhase( export function modelCustomizationPhase( dbModel: EntityInfo[], - generationOptions: IGenerationOptions + generationOptions: IGenerationOptions, + defaultValues: DataTypeDefaults ) { dbModel = setRelationId(generationOptions, dbModel); dbModel = applyNamingStrategy(generationOptions.namingStrategy, dbModel); dbModel = addImportsAndGenerationOptions(dbModel, generationOptions); + dbModel = removeColumnDefaultProperties(dbModel, defaultValues); + return dbModel; +} +function removeColumnDefaultProperties( + dbModel: EntityInfo[], + defaultValues: DataTypeDefaults +) { + if (!defaultValues) { + return dbModel; + } + dbModel.forEach(entity => { + entity.Columns.forEach(column => { + const defVal = defaultValues[column.options.type as any]; + if (defVal) { + if ( + column.options.length && + defVal.length && + column.options.length === defVal.length + ) { + column.options.length = undefined; + // console.log(`Default length for ${column.options.type}`) + } + if ( + column.options.precision && + defVal.precision && + column.options.precision === defVal.precision + ) { + column.options.precision = undefined; + // console.log(`Default precision for ${column.options.type}`) + } + if ( + column.options.scale && + defVal.scale && + column.options.scale === defVal.scale + ) { + column.options.scale = undefined; + // console.log(`Default scale for ${column.options.type}`) + } + if ( + column.options.width && + defVal.width && + column.options.width === defVal.width + ) { + column.options.width = undefined; + // console.log(`Default width for ${column.options.type}`) + } + } + }); + }); return dbModel; } - function addImportsAndGenerationOptions( dbModel: EntityInfo[], generationOptions: IGenerationOptions diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index d1eabad..b1eb066 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -3,6 +3,7 @@ import { WithPrecisionColumnType, WithWidthColumnType } from "typeorm/driver/types/ColumnTypes"; +import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; @@ -13,6 +14,7 @@ export abstract class AbstractDriver { public abstract standardPort: number; public abstract standardSchema: string; public abstract standardUser: string; + public abstract defaultValues: DataTypeDefaults; public ColumnTypesWithWidth: WithWidthColumnType[] = [ "tinyint", diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index de5eeb9..67077d0 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -1,4 +1,7 @@ import * as MSSQL from "mssql"; +import { ConnectionOptions } from "typeorm"; +import * as TypeormDriver from "typeorm/driver/sqlserver/SqlServerDriver"; +import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; @@ -6,6 +9,9 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class MssqlDriver extends AbstractDriver { + public defaultValues: DataTypeDefaults = new TypeormDriver.SqlServerDriver({ + options: { replication: undefined } as ConnectionOptions + } as any).dataTypeDefaults; public readonly standardPort = 1433; public readonly standardSchema = "dbo"; public readonly standardUser = "sa"; diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 566739a..34cf412 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -1,4 +1,7 @@ import * as MYSQL from "mysql"; +import { ConnectionOptions } from "typeorm"; +import * as TypeormDriver from "typeorm/driver/mysql/MysqlDriver"; +import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; @@ -6,6 +9,9 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class MysqlDriver extends AbstractDriver { + public defaultValues: DataTypeDefaults = new TypeormDriver.MysqlDriver({ + options: { replication: undefined } as ConnectionOptions + } as any).dataTypeDefaults; public readonly EngineName: string = "MySQL"; public readonly standardPort = 3306; public readonly standardUser = "root"; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index fa973f6..4eafdec 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -1,3 +1,5 @@ +import * as TypeormDriver from "typeorm/driver/oracle/OracleDriver"; +import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; @@ -5,6 +7,9 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class OracleDriver extends AbstractDriver { + public defaultValues: DataTypeDefaults = new TypeormDriver.OracleDriver({ + options: undefined + } as any).dataTypeDefaults; public readonly standardPort = 1521; public readonly standardUser = "SYS"; public readonly standardSchema = ""; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 2890166..e1911a1 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -1,4 +1,7 @@ import * as PG from "pg"; +import { ConnectionOptions } from "typeorm"; +import * as TypeormDriver from "typeorm/driver/postgres/PostgresDriver"; +import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; @@ -6,6 +9,9 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class PostgresDriver extends AbstractDriver { + public defaultValues: DataTypeDefaults = new TypeormDriver.PostgresDriver({ + options: { replication: undefined } as ConnectionOptions + } as any).dataTypeDefaults; public readonly standardPort = 5432; public readonly standardUser = "postgres"; public readonly standardSchema = "public"; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 4b548aa..9f492f6 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -1,3 +1,6 @@ +import { ConnectionOptions } from "typeorm"; +import * as TypeormDriver from "typeorm/driver/sqlite/SqliteDriver"; +import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import { IConnectionOptions } from "../Engine"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; @@ -5,6 +8,9 @@ import * as TomgUtils from "../Utils"; import { AbstractDriver } from "./AbstractDriver"; export class SqliteDriver extends AbstractDriver { + public defaultValues: DataTypeDefaults = new TypeormDriver.SqliteDriver({ + options: { database: "true" } as ConnectionOptions + } as any).dataTypeDefaults; public readonly standardPort = 0; public readonly standardUser = ""; public readonly standardSchema = ""; diff --git a/test/integration/runTestsFromPath.test.ts b/test/integration/runTestsFromPath.test.ts index c27c66e..ade1506 100644 --- a/test/integration/runTestsFromPath.test.ts +++ b/test/integration/runTestsFromPath.test.ts @@ -70,7 +70,7 @@ function runTestForMultipleDrivers(testName: string, dbDrivers: string[], testPa const modelGenerationPromises = driversToRun.map(async (dbDriver) => { const { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS } = await prepareTestRuns(testPartialPath, testName, dbDriver); let dbModel = await dataCollectionPhase(driver, connectionOptions); - dbModel = modelCustomizationPhase(dbModel, generationOptions); + dbModel = modelCustomizationPhase(dbModel, generationOptions, driver.defaultValues); const filesGenPath = path.resolve(resultsPath, 'entities'); modelGenerationPhase(connectionOptions, generationOptions, dbModel); compareGeneratedFiles(filesOrgPathTS, filesGenPath); From 6e29e91872f9d70cbf1a54ec234448500141d1dc Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 17:19:38 +0100 Subject: [PATCH 098/130] speeding up test execution --- package.json | 2 +- test/integration/runTestsFromPath.test.ts | 83 ++++++++++------------- 2 files changed, 36 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index a1b21a2..dbf4e89 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "start": " node ./dist/src/index.js", "compile": "npm run clean && tsc", "precommit": "npm run prettier && git update-index --again", - "test": "istanbul cover ./node_modules/mocha/bin/_mocha dist/test/**/*.test.js -- -R spec", + "test": "istanbul cover ./node_modules/mocha/bin/_mocha dist/test/**/*.test.js -- -R spec --bail", "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/lcov.info -t lcovonly && remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage.json && codecov --file=./coverage/coverage.json ", "clean": "rimraf dist coverage output", "prettier": "prettier --write ./src/*.ts ./src/**/*.ts", diff --git a/test/integration/runTestsFromPath.test.ts b/test/integration/runTestsFromPath.test.ts index ade1506..c384725 100644 --- a/test/integration/runTestsFromPath.test.ts +++ b/test/integration/runTestsFromPath.test.ts @@ -12,32 +12,32 @@ import chai = require('chai'); chai.use(chaiSubset); -describe("Column default values", async function () { +it("Column default values", async function () { const testPartialPath = 'test/integration/defaultValues' - this.timeout(30000) - this.slow(5000)// compiling created models takes time - runTestsFromPath(testPartialPath, true); + this.timeout(60000) + this.slow(10000)// compiling created models takes time + await runTestsFromPath(testPartialPath, true); }) -describe("Platform specyfic types", async function () { - this.timeout(30000) - this.slow(5000)// compiling created models takes time +it("Platform specyfic types", async function () { + this.timeout(60000) + this.slow(10000)// compiling created models takes time const testPartialPath = 'test/integration/entityTypes' - runTestsFromPath(testPartialPath, true); + await runTestsFromPath(testPartialPath, true); }) describe("GitHub issues", async function () { this.timeout(60000) - this.slow(30000)// compiling created models takes time + this.slow(10000)// compiling created models takes time const testPartialPath = 'test/integration/github-issues' runTestsFromPath(testPartialPath, false); }) describe("TypeOrm examples", async function () { this.timeout(60000) - this.slow(30000)// compiling created models takes time + this.slow(10000)// compiling created models takes time const testPartialPath = 'test/integration/examples' runTestsFromPath(testPartialPath, false); }) -export function runTestsFromPath(testPartialPath: string, isDbSpecific: boolean) { +export async function runTestsFromPath(testPartialPath: string, isDbSpecific: boolean) { const resultsPath = path.resolve(process.cwd(), `output`) if (!fs.existsSync(resultsPath)) { fs.mkdirSync(resultsPath); @@ -51,13 +51,7 @@ export function runTestsFromPath(testPartialPath: string, isDbSpecific: boolean) } const files = fs.readdirSync(path.resolve(process.cwd(), testPartialPath)); if (isDbSpecific) { - for (const dbDriver of dbDrivers) { - for (const folder of files) { - if (dbDriver == folder) { - runTest(dbDriver, testPartialPath, folder); - } - } - } + await runTest(dbDrivers, testPartialPath, files); } else { for (const folder of files) { runTestForMultipleDrivers(folder, dbDrivers, testPartialPath); @@ -71,29 +65,13 @@ function runTestForMultipleDrivers(testName: string, dbDrivers: string[], testPa const { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS } = await prepareTestRuns(testPartialPath, testName, dbDriver); let dbModel = await dataCollectionPhase(driver, connectionOptions); dbModel = modelCustomizationPhase(dbModel, generationOptions, driver.defaultValues); - const filesGenPath = path.resolve(resultsPath, 'entities'); modelGenerationPhase(connectionOptions, generationOptions, dbModel); + const filesGenPath = path.resolve(resultsPath, 'entities'); compareGeneratedFiles(filesOrgPathTS, filesGenPath); - compileGeneratedModel(filesGenPath); return { dbModel, generationOptions, connectionOptions, resultsPath, filesOrgPathTS, dbDriver }; }) - ///TODO: Find first generated result and compile, compare only it - // Then when all db drivers finished compare only generated dbModels to the first one - - - //const firstResult = await Promise.race(modelGenerationPromises); - const generatedData = await Promise.all(modelGenerationPromises) - // for (const iterator of generatedData) { - - // const filesGenPath = path.resolve(iterator.resultsPath, 'entities'); - // modelGenerationPhase(iterator.connectionOptions, iterator.generationOptions, iterator.dbModel); - // // compareGeneratedFiles(iterator.filesOrgPathTS, filesGenPath); - // // compileGeneratedModel(filesGenPath); - // } - // //expect(generatedData[1].dbModel).to.be.deep.eq(generatedData[2].dbModel, `Gennerated models differ for ${generatedData[1].dbDriver} and ${generatedData[2].dbDriver} `) - // for (const driverResult of generatedData) { - // expect(firstResult.dbModel).to.be.deep.eq(driverResult.dbModel, `Gennerated models differ for ${firstResult.dbDriver} and ${driverResult.dbDriver} `) - // } + await Promise.all(modelGenerationPromises) + compileGeneratedModel(path.resolve(process.cwd(), `output`), dbDrivers); }); function selectDriversForSpecyficTest() { @@ -106,14 +84,20 @@ function runTestForMultipleDrivers(testName: string, dbDrivers: string[], testPa } } -function runTest(dbDriver: string, testPartialPath: string, testName: string) { - it(dbDriver, async function () { - const { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS } = await prepareTestRuns(testPartialPath, testName, dbDriver); - await createModelFromDatabase(driver, connectionOptions, generationOptions); - const filesGenPath = path.resolve(resultsPath, 'entities'); - compareGeneratedFiles(filesOrgPathTS, filesGenPath); - compileGeneratedModel(filesGenPath); - }); +async function runTest(dbDrivers: string[], testPartialPath: string, files: string[]) { + + const modelGenerationPromises = dbDrivers.filter(driver => files.includes(driver)) + .map(async dbDriver => { + const { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS } = await prepareTestRuns(testPartialPath, dbDriver, dbDriver); + let dbModel = await dataCollectionPhase(driver, connectionOptions); + dbModel = modelCustomizationPhase(dbModel, generationOptions, driver.defaultValues); + modelGenerationPhase(connectionOptions, generationOptions, dbModel); + const filesGenPath = path.resolve(resultsPath, 'entities'); + compareGeneratedFiles(filesOrgPathTS, filesGenPath); + return { dbModel, generationOptions, connectionOptions, resultsPath, filesOrgPathTS, dbDriver }; + }) + await Promise.all(modelGenerationPromises) + compileGeneratedModel(path.resolve(process.cwd(), `output`), dbDrivers); } function compareGeneratedFiles(filesOrgPathTS: string, filesGenPath: string) { @@ -128,9 +112,12 @@ function compareGeneratedFiles(filesOrgPathTS: string, filesGenPath: string) { } } -function compileGeneratedModel(filesGenPath: string) { - const currentDirectoryFiles = fs.readdirSync(filesGenPath). - filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, v)); +function compileGeneratedModel(filesGenPath: string, drivers: string[]) { + let currentDirectoryFiles: string[] = []; + drivers.forEach(driver => { + currentDirectoryFiles.push(...fs.readdirSync(path.resolve(filesGenPath, driver, "entities")). + filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, driver, "entities", v))); + }); const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { experimentalDecorators: true, sourceMap: false, From 984506abd374edb3d152eabd338a9e1d142d98da Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 20:31:49 +0100 Subject: [PATCH 099/130] setting longer delay period for travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b50cec9..a68a2e3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,7 +41,7 @@ before_script: - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH - npm link typescript - tsc -- sleep 180 +- sleep 240 dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From d213e122ed47bf2a78da848e2151b6697e1db88f Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 20:34:00 +0100 Subject: [PATCH 100/130] tryiing to setup oracle while downloading others images --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a68a2e3..56aac56 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,11 +28,13 @@ env: SQLITE_Skip=0 SQLITE_Database=/tmp/sqlitedb.db before_install: -- images=(mysql mariadb postgres mssql) - sudo service mysql stop - sudo service postgresql stop - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else images=(${images[@]} oracle oracle_client); fi +- docker-compose pull --parallel --ignore-pull-failures ${images[@]} +- docker-compose up -d ${images[@]} +- images=(mysql mariadb postgres mssql) - echo ${images[@]} - docker-compose pull --parallel --ignore-pull-failures ${images[@]} - docker-compose up -d ${images[@]} @@ -41,7 +43,7 @@ before_script: - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH - npm link typescript - tsc -- sleep 240 +- sleep 120 dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From 3208c2b0163b8e2a6785c4bf05988e857f570025 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 20:58:01 +0100 Subject: [PATCH 101/130] lowering CI wait time --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 56aac56..a71243b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,7 @@ before_script: - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH - npm link typescript - tsc -- sleep 120 +- sleep 60 dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From ec19745af75da6fe4e52d033785cdcc47e974d89 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 21:11:59 +0100 Subject: [PATCH 102/130] CI - removing sleep, moving first docker-compose to maintainer build --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index a71243b..d8f5e03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,8 +32,7 @@ before_install: - sudo service postgresql stop - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else images=(${images[@]} oracle oracle_client); fi -- docker-compose pull --parallel --ignore-pull-failures ${images[@]} -- docker-compose up -d ${images[@]} +- if [ -n "$DOCKER_USERNAME" ]; docker-compose up -d ${images[@]}; fi - images=(mysql mariadb postgres mssql) - echo ${images[@]} - docker-compose pull --parallel --ignore-pull-failures ${images[@]} @@ -43,7 +42,6 @@ before_script: - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH - npm link typescript - tsc -- sleep 60 dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From 56fa71eeefa2e77ab17e6b7507195ebc684553cd Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 21:16:55 +0100 Subject: [PATCH 103/130] fixing CI script --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d8f5e03..79f29d1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ before_install: - sudo service postgresql stop - if [ -z "$DOCKER_USERNAME" ]; then echo "DOCKER_USERNAME is unset"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi - if [ -z "$DOCKER_USERNAME" ]; then export ORACLE_Skip=1; else images=(${images[@]} oracle oracle_client); fi -- if [ -n "$DOCKER_USERNAME" ]; docker-compose up -d ${images[@]}; fi +- if [ -n "$DOCKER_USERNAME" ]; then docker-compose up -d ${images[@]}; fi - images=(mysql mariadb postgres mssql) - echo ${images[@]} - docker-compose pull --parallel --ignore-pull-failures ${images[@]} From f99a711ed78532e2f76676b9eb907e743cf600aa Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 21:28:27 +0100 Subject: [PATCH 104/130] CI - adding 30 sec delay --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 79f29d1..62f2db7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,6 +42,7 @@ before_script: - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH - npm link typescript - tsc +- sleep 30 dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From 035a4972a9d60ca6bcd8c984797e33883bdb489c Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 24 Jan 2019 21:40:46 +0100 Subject: [PATCH 105/130] CI - setting startup delay to 60 seconds --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 62f2db7..173c328 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,7 +42,7 @@ before_script: - export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH - npm link typescript - tsc -- sleep 30 +- sleep 60 dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From a4fda55e2d91e8cc6f73826613a3b0bddb72c4a7 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 26 Jan 2019 11:08:46 +0100 Subject: [PATCH 106/130] added wizard mode --- package-lock.json | 239 +++++++++++++- package.json | 2 + src/Engine.ts | 29 +- src/IConnectionOptions.ts | 10 + src/IGenerationOptions.ts | 16 + src/drivers/AbstractDriver.ts | 2 +- src/drivers/MssqlDriver.ts | 2 +- src/drivers/MysqlDriver.ts | 2 +- src/drivers/OracleDriver.ts | 2 +- src/drivers/PostgresDriver.ts | 2 +- src/drivers/SqliteDriver.ts | 2 +- src/index.ts | 552 ++++++++++++++++++++++++--------- test/utils/GeneralTestUtils.ts | 5 +- 13 files changed, 671 insertions(+), 194 deletions(-) create mode 100644 src/IConnectionOptions.ts create mode 100644 src/IGenerationOptions.ts diff --git a/package-lock.json b/package-lock.json index f616693..bf07327 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,6 +61,16 @@ "integrity": "sha512-sGWNtsjNrLOdKha2RV1UeF8+UbQnPSG7qbe5wwbni0mw4h2gHXyPFUMOC+xwGirIiiydM/HSqjDO4rk6NFB18w==", "dev": true }, + "@types/inquirer": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-0.0.43.tgz", + "integrity": "sha512-xgyfKZVMFqE8aIKy1xfFVsX2MxyXUNgjgmbF6dRbR3sL+ZM5K4ka/9L4mmTwX8eTeVYtduyXu0gUVwVJa1HbNw==", + "dev": true, + "requires": { + "@types/rx": "*", + "@types/through": "*" + } + }, "@types/mocha": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", @@ -118,12 +128,147 @@ "moment": ">=2.14.0" } }, + "@types/rx": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/rx/-/rx-4.1.1.tgz", + "integrity": "sha1-WY/JSla67ZdfGUV04PVy/Y5iekg=", + "dev": true, + "requires": { + "@types/rx-core": "*", + "@types/rx-core-binding": "*", + "@types/rx-lite": "*", + "@types/rx-lite-aggregates": "*", + "@types/rx-lite-async": "*", + "@types/rx-lite-backpressure": "*", + "@types/rx-lite-coincidence": "*", + "@types/rx-lite-experimental": "*", + "@types/rx-lite-joinpatterns": "*", + "@types/rx-lite-testing": "*", + "@types/rx-lite-time": "*", + "@types/rx-lite-virtualtime": "*" + } + }, + "@types/rx-core": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-core/-/rx-core-4.0.3.tgz", + "integrity": "sha1-CzNUsSOM7b4rdPYybxOdvHpZHWA=", + "dev": true + }, + "@types/rx-core-binding": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/rx-core-binding/-/rx-core-binding-4.0.4.tgz", + "integrity": "sha512-5pkfxnC4w810LqBPUwP5bg7SFR/USwhMSaAeZQQbEHeBp57pjKXRlXmqpMrLJB4y1oglR/c2502853uN0I+DAQ==", + "dev": true, + "requires": { + "@types/rx-core": "*" + } + }, + "@types/rx-lite": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/rx-lite/-/rx-lite-4.0.6.tgz", + "integrity": "sha512-oYiDrFIcor9zDm0VDUca1UbROiMYBxMLMaM6qzz4ADAfOmA9r1dYEcAFH+2fsPI5BCCjPvV9pWC3X3flbrvs7w==", + "dev": true, + "requires": { + "@types/rx-core": "*", + "@types/rx-core-binding": "*" + } + }, + "@types/rx-lite-aggregates": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-aggregates/-/rx-lite-aggregates-4.0.3.tgz", + "integrity": "sha512-MAGDAHy8cRatm94FDduhJF+iNS5//jrZ/PIfm+QYw9OCeDgbymFHChM8YVIvN2zArwsRftKgE33QfRWvQk4DPg==", + "dev": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-async": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/rx-lite-async/-/rx-lite-async-4.0.2.tgz", + "integrity": "sha512-vTEv5o8l6702ZwfAM5aOeVDfUwBSDOs+ARoGmWAKQ6LOInQ8J4/zjM7ov12fuTpktUKdMQjkeCp07Vd73mPkxw==", + "dev": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-backpressure": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-backpressure/-/rx-lite-backpressure-4.0.3.tgz", + "integrity": "sha512-Y6aIeQCtNban5XSAF4B8dffhIKu6aAy/TXFlScHzSxh6ivfQBQw6UjxyEJxIOt3IT49YkS+siuayM2H/Q0cmgA==", + "dev": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-coincidence": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-coincidence/-/rx-lite-coincidence-4.0.3.tgz", + "integrity": "sha512-1VNJqzE9gALUyMGypDXZZXzR0Tt7LC9DdAZQ3Ou/Q0MubNU35agVUNXKGHKpNTba+fr8GdIdkC26bRDqtCQBeQ==", + "dev": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-experimental": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-experimental/-/rx-lite-experimental-4.0.1.tgz", + "integrity": "sha1-xTL1y98/LBXaFt7Ykw0bKYQCPL0=", + "dev": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-joinpatterns": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-joinpatterns/-/rx-lite-joinpatterns-4.0.1.tgz", + "integrity": "sha1-9w/jcFGKhDLykVjMkv+1a05K/D4=", + "dev": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-testing": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-testing/-/rx-lite-testing-4.0.1.tgz", + "integrity": "sha1-IbGdEfTf1v/vWp0WSOnIh5v+Iek=", + "dev": true, + "requires": { + "@types/rx-lite-virtualtime": "*" + } + }, + "@types/rx-lite-time": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-time/-/rx-lite-time-4.0.3.tgz", + "integrity": "sha512-ukO5sPKDRwCGWRZRqPlaAU0SKVxmWwSjiOrLhoQDoWxZWg6vyB9XLEZViKOzIO6LnTIQBlk4UylYV0rnhJLxQw==", + "dev": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-virtualtime": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-virtualtime/-/rx-lite-virtualtime-4.0.3.tgz", + "integrity": "sha512-3uC6sGmjpOKatZSVHI2xB1+dedgml669ZRvqxy+WqmGJDVusOdyxcKfyzjW0P3/GrCiN4nmRkLVMhPwHCc5QLg==", + "dev": true, + "requires": { + "@types/rx-lite": "*" + } + }, "@types/sinon": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-5.0.0.tgz", "integrity": "sha512-RsisuFAkhtCB3DKwQrBZYdkqtOyck7y5GkMZ7KeYVjLNBoV9ZMI0Kxj304Myp+B5Jj4LeEdPMTPlXNylG9x94A==", "dev": true }, + "@types/through": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.29.tgz", + "integrity": "sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/yargs": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.1.tgz", @@ -153,8 +298,7 @@ "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" }, "ansi-red": { "version": "0.1.1", @@ -649,6 +793,11 @@ "upper-case-first": "^1.1.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -699,7 +848,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, "requires": { "restore-cursor": "^2.0.0" } @@ -792,6 +940,11 @@ } } }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -1215,6 +1368,16 @@ } } }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -1813,6 +1976,49 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "requires": { + "ansi-regex": "^4.0.0" + } + } + } + }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -1994,8 +2200,7 @@ "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regexp": { "version": "1.0.0", @@ -2813,6 +3018,11 @@ } } }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, "mysql": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.16.0.tgz", @@ -3111,7 +3321,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, "requires": { "mimic-fn": "^1.0.0" } @@ -3820,7 +4029,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -3855,6 +4063,14 @@ } } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, "run-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", @@ -3865,7 +4081,6 @@ "version": "6.3.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, "requires": { "tslib": "^1.9.0" } @@ -4496,6 +4711,14 @@ "upper-case": "^1.0.3" } }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", diff --git a/package.json b/package.json index dbf4e89..f398122 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "dependencies": { "change-case": "^3.1.0", "handlebars": "^4.0.12", + "inquirer": "^6.2.1", "mssql": "^4.3.0", "mysql": "^2.16.0", "pg": "^7.8.0", @@ -43,6 +44,7 @@ "@types/chai-subset": "^1.3.1", "@types/fs-extra": "^5.0.4", "@types/handlebars": "^4.0.40", + "@types/inquirer": "0.0.43", "@types/mocha": "^5.2.5", "@types/mssql": "^4.0.11", "@types/mysql": "2.15.5", diff --git a/src/Engine.ts b/src/Engine.ts index d8210ad..0076bbc 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -3,7 +3,6 @@ import fs = require("fs"); import * as Handlebars from "handlebars"; import path = require("path"); import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; -import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { AbstractDriver } from "./drivers/AbstractDriver"; import { MariaDbDriver } from "./drivers/MariaDbDriver"; import { MssqlDriver } from "./drivers/MssqlDriver"; @@ -11,6 +10,8 @@ import { MysqlDriver } from "./drivers/MysqlDriver"; import { OracleDriver } from "./drivers/OracleDriver"; import { PostgresDriver } from "./drivers/PostgresDriver"; import { SqliteDriver } from "./drivers/SqliteDriver"; +import { IConnectionOptions } from "./IConnectionOptions"; +import { IGenerationOptions } from "./IGenerationOptions"; import { EntityInfo } from "./models/EntityInfo"; import { NamingStrategy } from "./NamingStrategy"; import * as TomgUtils from "./Utils"; @@ -134,7 +135,7 @@ function addImportsAndGenerationOptions( } }); }); - element.GenerateConstructor = generationOptions.constructor; + element.GenerateConstructor = generationOptions.generateConstructor; element.IsActiveRecord = generationOptions.activeRecord; element.Imports.filter((elem, index, self) => { return index === self.indexOf(elem); @@ -460,27 +461,3 @@ function applyNamingStrategy( return entities; } } - -export interface IConnectionOptions { - host: string; - port: number; - databaseName: string; - user: string; - password: string; - databaseType: string; - schemaName: string; - ssl: boolean; -} -export interface IGenerationOptions { - resultsPath: string; - noConfigs: boolean; - convertCaseFile: "pascal" | "param" | "camel" | "none"; - convertCaseEntity: "pascal" | "camel" | "none"; - convertCaseProperty: "pascal" | "camel" | "none"; - propertyVisibility: "public" | "protected" | "private" | "none"; - lazy: boolean; - activeRecord: boolean; - constructor: boolean; - namingStrategy: AbstractNamingStrategy; - relationIds: boolean; -} diff --git a/src/IConnectionOptions.ts b/src/IConnectionOptions.ts new file mode 100644 index 0000000..65dee14 --- /dev/null +++ b/src/IConnectionOptions.ts @@ -0,0 +1,10 @@ +export class IConnectionOptions { + public host: string = ""; + public port: number = 0; + public databaseName: string = ""; + public user: string = ""; + public password: string = ""; + public databaseType: string = ""; + public schemaName: string = ""; + public ssl: boolean = false; +} diff --git a/src/IGenerationOptions.ts b/src/IGenerationOptions.ts new file mode 100644 index 0000000..c67d5fe --- /dev/null +++ b/src/IGenerationOptions.ts @@ -0,0 +1,16 @@ +import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; +import { NamingStrategy } from "./NamingStrategy"; +export class IGenerationOptions { + public resultsPath: string = ""; + public noConfigs: boolean = false; + public convertCaseFile: "pascal" | "param" | "camel" | "none" = "none"; + public convertCaseEntity: "pascal" | "camel" | "none" = "none"; + public convertCaseProperty: "pascal" | "camel" | "none" = "none"; + public propertyVisibility: "public" | "protected" | "private" | "none" = + "none"; + public lazy: boolean = false; + public activeRecord: boolean = false; + public generateConstructor: boolean = false; + public namingStrategy: AbstractNamingStrategy = new NamingStrategy(); + public relationIds: boolean = false; +} diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index b1eb066..5bd555f 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -4,7 +4,7 @@ import { WithWidthColumnType } from "typeorm/driver/types/ColumnTypes"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; -import { IConnectionOptions } from "../Engine"; +import { IConnectionOptions } from "../IConnectionOptions"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import { RelationInfo } from "../models/RelationInfo"; diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 67077d0..8925751 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -2,7 +2,7 @@ import * as MSSQL from "mssql"; import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/sqlserver/SqlServerDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; -import { IConnectionOptions } from "../Engine"; +import { IConnectionOptions } from "../IConnectionOptions"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 34cf412..ddacffa 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -2,7 +2,7 @@ import * as MYSQL from "mysql"; import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/mysql/MysqlDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; -import { IConnectionOptions } from "../Engine"; +import { IConnectionOptions } from "../IConnectionOptions"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 4eafdec..b3500c2 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -1,6 +1,6 @@ import * as TypeormDriver from "typeorm/driver/oracle/OracleDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; -import { IConnectionOptions } from "../Engine"; +import { IConnectionOptions } from "../IConnectionOptions"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index e1911a1..9ad2cf4 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -2,7 +2,7 @@ import * as PG from "pg"; import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/postgres/PostgresDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; -import { IConnectionOptions } from "../Engine"; +import { IConnectionOptions } from "../IConnectionOptions"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 9f492f6..3833f6e 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -1,7 +1,7 @@ import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/sqlite/SqliteDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; -import { IConnectionOptions } from "../Engine"; +import { IConnectionOptions } from "../IConnectionOptions"; import { ColumnInfo } from "../models/ColumnInfo"; import { EntityInfo } from "../models/EntityInfo"; import * as TomgUtils from "../Utils"; diff --git a/src/index.ts b/src/index.ts index 9cc4bf0..6b23063 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,160 +1,408 @@ +import fs = require("fs-extra"); +import inquirer = require("inquirer"); import path = require("path"); import * as Yargs from "yargs"; import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; -import { - createDriver, - createModelFromDatabase, - IConnectionOptions, - IGenerationOptions -} from "./Engine"; +import { AbstractDriver } from "./drivers/AbstractDriver"; +import { createDriver, createModelFromDatabase } from "./Engine"; +import { IConnectionOptions } from "./IConnectionOptions"; +import { IGenerationOptions } from "./IGenerationOptions"; import { NamingStrategy } from "./NamingStrategy"; import * as TomgUtils from "./Utils"; -const argv = Yargs.usage( - "Usage: typeorm-model-generator -h -d -p [port] -u -x [password] -e [engine]" -) - .option("h", { - alias: "host", - default: "127.0.0.1", - describe: "IP adress/Hostname for database server" - }) - .option("d", { - alias: "database", - demand: true, - describe: "Database name(or path for sqlite)" - }) - .option("u", { - alias: "user", - describe: "Username for database server" - }) - .option("x", { - alias: "pass", - default: "", - describe: "Password for database server" - }) - .option("p", { - alias: "port", - describe: "Port number for database server" - }) - .option("e", { - alias: "engine", - choices: ["mssql", "postgres", "mysql", "mariadb", "oracle", "sqlite"], - default: "mssql", - describe: "Database engine" - }) - .option("o", { - alias: "output", - default: path.resolve(process.cwd(), "output"), - describe: "Where to place generated models" - }) - .option("s", { - alias: "schema", - describe: - "Schema name to create model from. Only for mssql and postgres" - }) - .option("ssl", { - boolean: true, - default: false - }) - .option("noConfig", { - boolean: true, - default: false, - describe: `Doesn't create tsconfig.json and ormconfig.json` - }) - .option("cf", { - alias: "case-file", - choices: ["pascal", "param", "camel", "none"], - default: "none", - describe: "Convert file names to specified case" - }) - .option("ce", { - alias: "case-entity", - choices: ["pascal", "camel", "none"], - default: "none", - describe: "Convert class names to specified case" - }) - .option("cp", { - alias: "case-property", - choices: ["pascal", "camel", "none"], - default: "none", - describe: "Convert property names to specified case" - }) - .option("pv", { - alias: "property-visibility", - choices: ["public", "protected", "private", "none"], - default: "none", - describe: "Defines which visibility should have the generated property" - }) - .option("lazy", { - boolean: true, - default: false, - describe: "Generate lazy relations" - }) - .option("a", { - alias: "active-record", - boolean: true, - default: false, - describe: "Use ActiveRecord syntax for generated models" - }) - .option("namingStrategy", { - describe: "Use custom naming strategy" - }) - .option("relationIds", { - boolean: true, - default: false, - describe: "Generate RelationId fields" - }) - .option("generateConstructor", { - boolean: true, - default: false, - describe: "Generate constructor allowing partial initialization" - }).argv; +CliLogic(); -const driver = createDriver(argv.e); -const standardPort = driver.standardPort; -const standardSchema = driver.standardPort; -const standardUser = driver.standardPort; - -let namingStrategy: AbstractNamingStrategy; -if (argv.namingStrategy && argv.namingStrategy !== "") { - // tslint:disable-next-line:no-var-requires - const req = require(argv.namingStrategy); - namingStrategy = new req.NamingStrategy(); -} else { - namingStrategy = new NamingStrategy(); -} -const connectionOptions: IConnectionOptions = { - databaseName: argv.d ? argv.d.toString() : null, - databaseType: argv.e, - host: argv.h, - password: argv.x ? argv.x.toString() : null, - port: parseInt(argv.p, 10) || standardPort, - schemaName: argv.s ? argv.s.toString() : standardSchema, - ssl: argv.ssl, - user: argv.u ? argv.u.toString() : standardUser -}; -const generationOptions: IGenerationOptions = { - activeRecord: argv.a, - constructor: argv.generateConstructor, - convertCaseEntity: argv.ce, - convertCaseFile: argv.cf, - convertCaseProperty: argv.cp, - lazy: argv.lazy, - namingStrategy, - noConfigs: argv.noConfig, - propertyVisibility: argv.pv, - relationIds: argv.relationIds, - resultsPath: argv.o ? argv.o.toString() : null -}; - -console.log(TomgUtils.packageVersion()); -console.log( - `[${new Date().toLocaleTimeString()}] Starting creation of model classes.` -); -createModelFromDatabase(driver, connectionOptions, generationOptions).then( - () => { - console.info( - `[${new Date().toLocaleTimeString()}] Typeorm model classes created.` - ); +async function CliLogic() { + let driver: AbstractDriver; + let connectionOptions: IConnectionOptions; + let generationOptions: IGenerationOptions; + if (process.argv.length > 2) { + const retval = GetUtilParametersByArgs(); + driver = retval.driver; + connectionOptions = retval.connectionOptions; + generationOptions = retval.generationOptions; + } else { + const retval = await GetUtilParametersByInquirer(); + driver = retval.driver; + connectionOptions = retval.connectionOptions; + generationOptions = retval.generationOptions; } -); + console.log(TomgUtils.packageVersion()); + console.log( + `[${new Date().toLocaleTimeString()}] Starting creation of model classes.` + ); + createModelFromDatabase(driver, connectionOptions, generationOptions).then( + () => { + console.info( + `[${new Date().toLocaleTimeString()}] Typeorm model classes created.` + ); + } + ); +} + +function GetUtilParametersByArgs() { + const argv = Yargs.usage( + "Usage: typeorm-model-generator -h -d -p [port] -u -x [password] -e [engine]\nYou can also run program without specyfiying any parameters." + ) + .option("h", { + alias: "host", + default: "127.0.0.1", + describe: "IP adress/Hostname for database server" + }) + .option("d", { + alias: "database", + demand: true, + describe: "Database name(or path for sqlite)" + }) + .option("u", { + alias: "user", + describe: "Username for database server" + }) + .option("x", { + alias: "pass", + default: "", + describe: "Password for database server" + }) + .option("p", { + alias: "port", + describe: "Port number for database server" + }) + .option("e", { + alias: "engine", + choices: [ + "mssql", + "postgres", + "mysql", + "mariadb", + "oracle", + "sqlite" + ], + default: "mssql", + describe: "Database engine" + }) + .option("o", { + alias: "output", + default: path.resolve(process.cwd(), "output"), + describe: "Where to place generated models" + }) + .option("s", { + alias: "schema", + describe: + "Schema name to create model from. Only for mssql and postgres" + }) + .option("ssl", { + boolean: true, + default: false + }) + .option("noConfig", { + boolean: true, + default: false, + describe: `Doesn't create tsconfig.json and ormconfig.json` + }) + .option("cf", { + alias: "case-file", + choices: ["pascal", "param", "camel", "none"], + default: "none", + describe: "Convert file names to specified case" + }) + .option("ce", { + alias: "case-entity", + choices: ["pascal", "camel", "none"], + default: "none", + describe: "Convert class names to specified case" + }) + .option("cp", { + alias: "case-property", + choices: ["pascal", "camel", "none"], + default: "none", + describe: "Convert property names to specified case" + }) + .option("pv", { + alias: "property-visibility", + choices: ["public", "protected", "private", "none"], + default: "none", + describe: + "Defines which visibility should have the generated property" + }) + .option("lazy", { + boolean: true, + default: false, + describe: "Generate lazy relations" + }) + .option("a", { + alias: "active-record", + boolean: true, + default: false, + describe: "Use ActiveRecord syntax for generated models" + }) + .option("namingStrategy", { + describe: "Use custom naming strategy" + }) + .option("relationIds", { + boolean: true, + default: false, + describe: "Generate RelationId fields" + }) + .option("generateConstructor", { + boolean: true, + default: false, + describe: "Generate constructor allowing partial initialization" + }).argv; + + const driver = createDriver(argv.e); + const standardPort = driver.standardPort; + const standardSchema = driver.standardSchema; + const standardUser = driver.standardPort; + let namingStrategy: AbstractNamingStrategy; + if (argv.namingStrategy && argv.namingStrategy !== "") { + // tslint:disable-next-line:no-var-requires + const req = require(argv.namingStrategy); + namingStrategy = new req.NamingStrategy(); + } else { + namingStrategy = new NamingStrategy(); + } + const connectionOptions: IConnectionOptions = new IConnectionOptions(); + (connectionOptions.databaseName = argv.d ? argv.d.toString() : null), + (connectionOptions.databaseType = argv.e), + (connectionOptions.host = argv.h), + (connectionOptions.password = argv.x ? argv.x.toString() : null), + (connectionOptions.port = parseInt(argv.p, 10) || standardPort), + (connectionOptions.schemaName = argv.s + ? argv.s.toString() + : standardSchema), + (connectionOptions.ssl = argv.ssl), + (connectionOptions.user = argv.u ? argv.u.toString() : standardUser); + const generationOptions: IGenerationOptions = new IGenerationOptions(); + (generationOptions.activeRecord = argv.a), + (generationOptions.generateConstructor = argv.generateConstructor), + (generationOptions.convertCaseEntity = argv.ce), + (generationOptions.convertCaseFile = argv.cf), + (generationOptions.convertCaseProperty = argv.cp), + (generationOptions.lazy = argv.lazy), + (generationOptions.namingStrategy = namingStrategy), + (generationOptions.noConfigs = argv.noConfig), + (generationOptions.propertyVisibility = argv.pv), + (generationOptions.relationIds = argv.relationIds), + (generationOptions.resultsPath = argv.o ? argv.o.toString() : null); + + return { driver, connectionOptions, generationOptions }; +} + +async function GetUtilParametersByInquirer() { + const connectionOptions: IConnectionOptions = new IConnectionOptions(); + const generationOptions: IGenerationOptions = new IGenerationOptions(); + + connectionOptions.databaseType = ((await inquirer.prompt([ + { + choices: [ + "mssql", + "postgres", + "mysql", + "mariadb", + "oracle", + "sqlite" + ], + message: "Choose database engine", + name: "engine", + type: "list" + } + ])) as any).engine; + const driver = createDriver(connectionOptions.databaseType); + if (connectionOptions.databaseType !== "sqlite") { + const answ: any = await inquirer.prompt([ + { + default: "localhost", + message: "Database adress:", + name: "host", + type: "input" + }, + { + message: "Database port:", + name: "port", + type: "input", + default(answers: any) { + return driver.standardPort; + }, + validate(value) { + const valid = !isNaN(parseInt(value, 10)); + return valid || "Please enter a valid port number"; + } + }, + { + default: false, + message: "Use SSL:", + name: "ssl", + type: "confirm" + }, + { + message: "Database user name:", + name: "login", + type: "input", + default(answers: any) { + return driver.standardUser; + } + }, + { + message: "Database user pasword:", + name: "password", + type: "password" + }, + { + default: "", + message: "Database name:", + name: "dbName", + type: "input" + } + ]); + if ( + connectionOptions.databaseType === "mssql" || + connectionOptions.databaseType === "postgres" + ) { + connectionOptions.schemaName = ((await inquirer.prompt([ + { + default: driver.standardSchema, + message: "Database schema:", + name: "schema", + type: "input" + } + ])) as any).schema; + } + connectionOptions.port = answ.port; + connectionOptions.host = answ.host; + connectionOptions.user = answ.login; + connectionOptions.password = answ.password; + connectionOptions.databaseName = answ.dbName; + connectionOptions.ssl = answ.ssl; + } else { + connectionOptions.databaseName = ((await inquirer.prompt([ + { + default: "", + message: "Path to database file:", + name: "dbName", + type: "input" + } + ])) as any).dbName; + } + generationOptions.resultsPath = ((await inquirer.prompt([ + { + default: path.resolve(process.cwd(), "output"), + message: "Path where generated models should be stored:", + name: "output", + type: "input" + } + ])) as any).output; + const customize = ((await inquirer.prompt([ + { + default: false, + message: "Do you want to customize generated model?", + name: "customize", + type: "confirm" + } + ])) as any).customize; + if (customize) { + const customizations: string[] = ((await inquirer.prompt([ + { + choices: [ + { + checked: true, + name: "Generate config files", + value: "config" + }, + { + name: "Generate lazy relations", + value: "lazy" + }, + { + name: "Use ActiveRecord syntax for generated models", + value: "activeRecord" + }, + { + name: "Use custom naming strategy", + value: "namingStrategy" + }, + { + name: "Generate RelationId fields", + value: "relationId" + }, + { + name: + "Generate constructor allowing partial initialization", + value: "constructor" + }, + { + name: "Use specific naming convention", + value: "namingConvention" + } + ], + message: "Avaliable customizations", + name: "selected", + type: "checkbox" + } + ])) as any).selected; + generationOptions.noConfigs = !customizations.includes("config"); + generationOptions.lazy = customizations.includes("lazy"); + generationOptions.activeRecord = customizations.includes( + "activeRecord" + ); + generationOptions.relationIds = customizations.includes("relationId"); + generationOptions.generateConstructor = customizations.includes( + "constructor" + ); + + if (customizations.includes("namingStrategy")) { + const namingStrategyPath = ((await inquirer.prompt([ + { + default: path.resolve(process.cwd()), + message: "Path to custom naming stategy file:", + name: "namingStrategy", + type: "input", + validate(value) { + const valid = value === "" || fs.existsSync(value); + return ( + valid || + "Please enter a a valid path to custom naming strategy file" + ); + } + } + ])) as any).namingStrategy; + + if (namingStrategyPath && namingStrategyPath !== "") { + // tslint:disable-next-line:no-var-requires + const req = require(namingStrategyPath); + generationOptions.namingStrategy = new req.NamingStrategy(); + } else { + generationOptions.namingStrategy = new NamingStrategy(); + } + } + if (customizations.includes("namingConvention")) { + const namingConventions = (await inquirer.prompt([ + { + choices: ["pascal", "param", "camel", "none"], + default: "none", + message: "Convert file names to specified case:", + name: "fileCase", + type: "list" + }, + { + choices: ["pascal", "camel", "none"], + default: "none", + message: "Convert class names to specified case:", + name: "entityCase", + type: "list" + }, + { + choices: ["pascal", "camel", "none"], + default: "none", + message: "Convert property names to specified case:", + name: "propertyCase", + type: "list" + } + ])) as any; + generationOptions.convertCaseFile = namingConventions.fileCase; + generationOptions.convertCaseProperty = + namingConventions.propertyCase; + generationOptions.convertCaseEntity = namingConventions.entityCase; + } + } + return { driver, connectionOptions, generationOptions }; +} diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index 491add2..e78fd51 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -9,7 +9,8 @@ import { MysqlDriver } from "../../src/drivers/MysqlDriver"; import { OracleDriver } from "../../src/drivers/OracleDriver"; import { PostgresDriver } from "../../src/drivers/PostgresDriver"; import { SqliteDriver } from "../../src/drivers/SqliteDriver"; -import { IConnectionOptions, IGenerationOptions } from "../../src/Engine"; +import { IConnectionOptions } from "../../src/IConnectionOptions"; +import { IGenerationOptions } from "../../src/IGenerationOptions"; import { NamingStrategy } from "../../src/NamingStrategy"; export function getGenerationOptions(resultsPath: string): IGenerationOptions { @@ -21,7 +22,7 @@ export function getGenerationOptions(resultsPath: string): IGenerationOptions { convertCaseProperty: 'none', propertyVisibility: 'none', lazy: false, - constructor: false, + generateConstructor: false, namingStrategy: new NamingStrategy(), relationIds: false, activeRecord: false From aa37ba086ea5f0dc56fb6bc233d96bc209dc0da3 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 26 Jan 2019 11:59:26 +0100 Subject: [PATCH 107/130] remove docker-compose-without -docker which isn't used anymore --- docker-compose-without-login.yml | 62 -------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 docker-compose-without-login.yml diff --git a/docker-compose-without-login.yml b/docker-compose-without-login.yml deleted file mode 100644 index c123801..0000000 --- a/docker-compose-without-login.yml +++ /dev/null @@ -1,62 +0,0 @@ -version: '2' -services: - - # mysql - mysql: - image: "mysql:5.7.10" - container_name: "typeorm-mg-mysql" - ports: - - "3306:3306" - environment: - MYSQL_ROOT_PASSWORD: "admin" - MYSQL_USER: "test" - MYSQL_PASSWORD: "test" - MYSQL_DATABASE: "test" - - # mariadb - mariadb: - image: "mariadb:10.1.16" - container_name: "typeorm-mg-mariadb" - ports: - - "3307:3306" - environment: - MYSQL_ROOT_PASSWORD: "admin" - MYSQL_USER: "test" - MYSQL_PASSWORD: "test" - MYSQL_DATABASE: "test" - - # postgres - postgres: - image: "mdillon/postgis:9.6" - container_name: "typeorm-mg-postgres" - ports: - - "5432:5432" - environment: - POSTGRES_USER: "test" - POSTGRES_PASSWORD: "test" - POSTGRES_DB: "test" - - # mssql - mssql: - image: "mcr.microsoft.com/mssql/server:2017-GA-ubuntu" - container_name: "typeorm-mg-mssql" - ports: - - "1433:1433" - environment: - SA_PASSWORD: "Admin12345" - ACCEPT_EULA: "Y" - -# # oracle -# oracle: -# image: "store/oracle/database-enterprise:12.2.0.1-slim" -# container_name: "typeorm-mg-oracle" -# ports: -# - "1521:1521" -# environment: -# DB_SID: "sys" -# SYS_PASSWORD: "ORCLCDB" - -# oracle_client: -# image: "store/oracle/database-instantclient:12.2.0.1" -# container_name: "typeorm-mg-oracle-client" - From 21ec0461399de3c71cf5af46a1b8d6dbabf29fe3 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 26 Jan 2019 13:48:12 +0100 Subject: [PATCH 108/130] stroring config settings in a file --- .gitignore | 1 + src/index.ts | 40 ++++++++++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 664c8b2..5daaa3c 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ coverage/ dist *.tgz !gulpfile.js +.tomg-config diff --git a/src/index.ts b/src/index.ts index 6b23063..8e62ddd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,15 +17,25 @@ async function CliLogic() { let connectionOptions: IConnectionOptions; let generationOptions: IGenerationOptions; if (process.argv.length > 2) { - const retval = GetUtilParametersByArgs(); - driver = retval.driver; - connectionOptions = retval.connectionOptions; - generationOptions = retval.generationOptions; + const retVal = GetUtilParametersByArgs(); + connectionOptions = retVal.connectionOptions; + generationOptions = retVal.generationOptions; + driver = retVal.driver; } else { - const retval = await GetUtilParametersByInquirer(); - driver = retval.driver; - connectionOptions = retval.connectionOptions; - generationOptions = retval.generationOptions; + if (fs.existsSync(path.resolve(process.cwd(), ".tomg-config"))) { + const retVal = await fs.readJson( + path.resolve(process.cwd(), ".tomg-config") + ); + connectionOptions = retVal[0]; + generationOptions = retVal[1]; + generationOptions.namingStrategy = new NamingStrategy(); // TODO: For now there is no way to store custom naming strategy + driver = createDriver(connectionOptions.databaseType); + } else { + const retVal = await GetUtilParametersByInquirer(); + driver = retVal.driver; + connectionOptions = retVal.connectionOptions; + generationOptions = retVal.generationOptions; + } } console.log(TomgUtils.packageVersion()); console.log( @@ -404,5 +414,19 @@ async function GetUtilParametersByInquirer() { generationOptions.convertCaseEntity = namingConventions.entityCase; } } + const saveConfig = ((await inquirer.prompt([ + { + default: true, + message: "Save configuration to config file?", + name: "saveConfig", + type: "confirm" + } + ])) as any).saveConfig; + if (saveConfig) { + await fs.writeJson(path.resolve(process.cwd(), ".tomg-config"), [ + connectionOptions, + generationOptions + ]); + } return { driver, connectionOptions, generationOptions }; } From c4bc0c007f764c8a53defd88a98d1d9fc3dbdb52 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 27 Jan 2019 01:12:07 +0100 Subject: [PATCH 109/130] added naming strategy to config file --- src/Engine.ts | 13 +++++++++++- src/IGenerationOptions.ts | 4 +--- src/index.ts | 37 ++++++++++++++++++---------------- test/utils/GeneralTestUtils.ts | 3 +-- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/Engine.ts b/src/Engine.ts index 0076bbc..a9b08c3 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -68,8 +68,19 @@ export function modelCustomizationPhase( generationOptions: IGenerationOptions, defaultValues: DataTypeDefaults ) { + let namingStrategy: NamingStrategy; + if ( + generationOptions.customNamingStrategyPath && + generationOptions.customNamingStrategyPath !== "" + ) { + // tslint:disable-next-line:no-var-requires + const req = require(generationOptions.customNamingStrategyPath); + namingStrategy = new req.NamingStrategy(); + } else { + namingStrategy = new NamingStrategy(); + } dbModel = setRelationId(generationOptions, dbModel); - dbModel = applyNamingStrategy(generationOptions.namingStrategy, dbModel); + dbModel = applyNamingStrategy(namingStrategy, dbModel); dbModel = addImportsAndGenerationOptions(dbModel, generationOptions); dbModel = removeColumnDefaultProperties(dbModel, defaultValues); return dbModel; diff --git a/src/IGenerationOptions.ts b/src/IGenerationOptions.ts index c67d5fe..11a0016 100644 --- a/src/IGenerationOptions.ts +++ b/src/IGenerationOptions.ts @@ -1,5 +1,3 @@ -import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; -import { NamingStrategy } from "./NamingStrategy"; export class IGenerationOptions { public resultsPath: string = ""; public noConfigs: boolean = false; @@ -11,6 +9,6 @@ export class IGenerationOptions { public lazy: boolean = false; public activeRecord: boolean = false; public generateConstructor: boolean = false; - public namingStrategy: AbstractNamingStrategy = new NamingStrategy(); + public customNamingStrategyPath: string = ""; public relationIds: boolean = false; } diff --git a/src/index.ts b/src/index.ts index 8e62ddd..4b2b8dd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,17 +2,16 @@ import fs = require("fs-extra"); import inquirer = require("inquirer"); import path = require("path"); import * as Yargs from "yargs"; -import { AbstractNamingStrategy } from "./AbstractNamingStrategy"; import { AbstractDriver } from "./drivers/AbstractDriver"; import { createDriver, createModelFromDatabase } from "./Engine"; import { IConnectionOptions } from "./IConnectionOptions"; import { IGenerationOptions } from "./IGenerationOptions"; -import { NamingStrategy } from "./NamingStrategy"; import * as TomgUtils from "./Utils"; CliLogic(); async function CliLogic() { + console.log(TomgUtils.packageVersion()); let driver: AbstractDriver; let connectionOptions: IConnectionOptions; let generationOptions: IGenerationOptions; @@ -23,12 +22,14 @@ async function CliLogic() { driver = retVal.driver; } else { if (fs.existsSync(path.resolve(process.cwd(), ".tomg-config"))) { + console.log( + `[${new Date().toLocaleTimeString()}] Using configuration file.` + ); const retVal = await fs.readJson( path.resolve(process.cwd(), ".tomg-config") ); connectionOptions = retVal[0]; generationOptions = retVal[1]; - generationOptions.namingStrategy = new NamingStrategy(); // TODO: For now there is no way to store custom naming strategy driver = createDriver(connectionOptions.databaseType); } else { const retVal = await GetUtilParametersByInquirer(); @@ -37,7 +38,6 @@ async function CliLogic() { generationOptions = retVal.generationOptions; } } - console.log(TomgUtils.packageVersion()); console.log( `[${new Date().toLocaleTimeString()}] Starting creation of model classes.` ); @@ -163,13 +163,12 @@ function GetUtilParametersByArgs() { const standardPort = driver.standardPort; const standardSchema = driver.standardSchema; const standardUser = driver.standardPort; - let namingStrategy: AbstractNamingStrategy; + let namingStrategyPath: string; if (argv.namingStrategy && argv.namingStrategy !== "") { // tslint:disable-next-line:no-var-requires - const req = require(argv.namingStrategy); - namingStrategy = new req.NamingStrategy(); + namingStrategyPath = argv.namingStrategy; } else { - namingStrategy = new NamingStrategy(); + namingStrategyPath = ""; } const connectionOptions: IConnectionOptions = new IConnectionOptions(); (connectionOptions.databaseName = argv.d ? argv.d.toString() : null), @@ -189,7 +188,7 @@ function GetUtilParametersByArgs() { (generationOptions.convertCaseFile = argv.cf), (generationOptions.convertCaseProperty = argv.cp), (generationOptions.lazy = argv.lazy), - (generationOptions.namingStrategy = namingStrategy), + (generationOptions.customNamingStrategyPath = namingStrategyPath), (generationOptions.noConfigs = argv.noConfig), (generationOptions.propertyVisibility = argv.pv), (generationOptions.relationIds = argv.relationIds), @@ -378,10 +377,9 @@ async function GetUtilParametersByInquirer() { if (namingStrategyPath && namingStrategyPath !== "") { // tslint:disable-next-line:no-var-requires - const req = require(namingStrategyPath); - generationOptions.namingStrategy = new req.NamingStrategy(); + generationOptions.customNamingStrategyPath = namingStrategyPath; } else { - generationOptions.namingStrategy = new NamingStrategy(); + generationOptions.customNamingStrategyPath = ""; } } if (customizations.includes("namingConvention")) { @@ -416,17 +414,22 @@ async function GetUtilParametersByInquirer() { } const saveConfig = ((await inquirer.prompt([ { - default: true, + default: false, message: "Save configuration to config file?", name: "saveConfig", type: "confirm" } ])) as any).saveConfig; if (saveConfig) { - await fs.writeJson(path.resolve(process.cwd(), ".tomg-config"), [ - connectionOptions, - generationOptions - ]); + await fs.writeJson( + path.resolve(process.cwd(), ".tomg-config"), + [connectionOptions, generationOptions], + { spaces: "\t" } + ); + console.log(`[${new Date().toLocaleTimeString()}] Config file saved.`); + console.warn( + `\x1b[33m[${new Date().toLocaleTimeString()}] WARNING: Password was saved as plain text.\x1b[0m` + ); } return { driver, connectionOptions, generationOptions }; } diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index e78fd51..602eb9a 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -11,7 +11,6 @@ import { PostgresDriver } from "../../src/drivers/PostgresDriver"; import { SqliteDriver } from "../../src/drivers/SqliteDriver"; import { IConnectionOptions } from "../../src/IConnectionOptions"; import { IGenerationOptions } from "../../src/IGenerationOptions"; -import { NamingStrategy } from "../../src/NamingStrategy"; export function getGenerationOptions(resultsPath: string): IGenerationOptions { return { @@ -23,7 +22,7 @@ export function getGenerationOptions(resultsPath: string): IGenerationOptions { propertyVisibility: 'none', lazy: false, generateConstructor: false, - namingStrategy: new NamingStrategy(), + customNamingStrategyPath: "", relationIds: false, activeRecord: false } From 07671288668632b6d174b81f34725fac27681f9b Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 27 Jan 2019 01:58:18 +0100 Subject: [PATCH 110/130] fixed column names for joins --- src/entity.mst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entity.mst b/src/entity.mst index 99c3ae5..c86de87 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -26,7 +26,7 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne {{printPropertyVisibility}}{{toPropertyName tsName}}:{{tsType}}{{#options/nullable}} | null{{/options/nullable}}; {{/relations}}{{#relations}} @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../options/primary}}primary:true,{{/../options/primary}}{{^../options/nullable}} nullable:false,{{/../options/nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} - {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../sqlName}}'}){{/if}}{{/isOwner}} + {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../options/name}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; {{else}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; {{/if}} From c23256a62645f8e24fd81c2b02629f3e12bc0412 Mon Sep 17 00:00:00 2001 From: Chlorine Date: Wed, 30 Jan 2019 13:18:20 +0300 Subject: [PATCH 111/130] Current case-conv for class name in @RelationId In @RelationId decorator generation class name must be case-converted according to current settings P.S. Thanks for a great work! --- src/entity.mst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entity.mst b/src/entity.mst index c86de87..db27e03 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -32,7 +32,7 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne {{/if}} {{#if relationIdField }} - @RelationId(({{../../tsEntityName}}: {{../../tsEntityName}}) => {{../../tsEntityName}}.{{toPropertyName ../tsName}}) + @RelationId(({{../../tsEntityName}}: {{toEntityName ../../tsEntityName}}) => {{../../tsEntityName}}.{{toPropertyName ../tsName}}) {{toPropertyName ../tsName}}Id: {{#if isOneToOne}}{{toLazy ../tsType}}{{else}}{{toLazy (concat ../tsType "[]")}}{{/if}};{{/if}}{{/relations}} {{/Columns}} {{#if GenerateConstructor}} From 3c159257fc22818814092b0e3fcb79646240c196 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 7 Feb 2019 19:05:10 +0100 Subject: [PATCH 112/130] changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5b8240..9b08b7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +# 0.3.0 +* Wizard mode - you can now run model generation without passing any parameters and provide them step by step. It also allows you to save provided informations for future use +* generated columns no longer contains options which are set by default in typeorm +* added support for VARBINARY type on MySQL, MariaDb +* fixed issue with case convertion and @RetlationId fields +* a lot of internal work + ## 0.2.25 * fixed naming strategy changing entity name in db * fixed proper relation generation when unique index have more columns From 3949d9526ebc0854fbaabfee1d80808cfe6e31b2 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 7 Feb 2019 19:05:23 +0100 Subject: [PATCH 113/130] 0.3.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index bf07327..6462311 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.25", + "version": "0.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index f398122..7cc0d3a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.2.25", + "version": "0.3.0", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From fd07a1879be8d3759ff915b7326886d500fd4837 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 9 Feb 2019 01:29:58 +0100 Subject: [PATCH 114/130] fixing postgres generation of duplicate relations --- src/drivers/PostgresDriver.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 9ad2cf4..03688e4 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -453,7 +453,8 @@ export class PostgresDriver extends AbstractDriver { ondelete: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; onupdate: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; object_id: string; - }> = (await this.Connection.query(`SELECT + // Distinct because of note in https://www.postgresql.org/docs/9.1/information-schema.html + }> = (await this.Connection.query(`SELECT DISTINCT con.relname AS tablewithforeignkey, att.attnum as fk_partno, att2.attname AS foreignkeycolumn, @@ -461,7 +462,7 @@ export class PostgresDriver extends AbstractDriver { att.attname AS foreignkeycolumnreferenced, delete_rule as ondelete, update_rule as onupdate, - con.conname as object_id + concat(con.conname,con.conrelid,con.confrelid) as object_id FROM ( SELECT unnest(con1.conkey) AS parent, @@ -469,7 +470,8 @@ export class PostgresDriver extends AbstractDriver { con1.confrelid, con1.conrelid, cl_1.relname, - con1.conname + con1.conname, + nspname FROM pg_class cl_1, pg_namespace ns, @@ -490,7 +492,8 @@ export class PostgresDriver extends AbstractDriver { AND cl.oid = con.confrelid AND att2.attrelid = con.conrelid AND att2.attnum = con.parent - and rc.constraint_name= con.conname`)).rows; + AND rc.constraint_name= con.conname AND constraint_catalog=current_database() AND rc.constraint_schema=nspname + `)).rows; const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( From cce30d3edf76ea81a672784c2329490cd4a1da34 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 9 Feb 2019 22:54:23 +0100 Subject: [PATCH 115/130] fixes #146 --- CHANGELOG.md | 3 +++ package-lock.json | 8 ++------ package.json | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b08b7f..851b368 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.3.1 +* Fixed npx ussage(#146) + # 0.3.0 * Wizard mode - you can now run model generation without passing any parameters and provide them step by step. It also allows you to save provided informations for future use * generated columns no longer contains options which are set by default in typeorm diff --git a/package-lock.json b/package-lock.json index 6462311..b72ec18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1555,7 +1555,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -1686,8 +1685,7 @@ "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, "growl": { "version": "1.10.5", @@ -2377,7 +2375,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -5159,8 +5156,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unset-value": { "version": "1.0.0", diff --git a/package.json b/package.json index 7cc0d3a..6fe7940 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "dependencies": { "change-case": "^3.1.0", "handlebars": "^4.0.12", + "fs-extra": "^7.0.1", "inquirer": "^6.2.1", "mssql": "^4.3.0", "mysql": "^2.16.0", @@ -58,7 +59,6 @@ "chai-subset": "^1.6.0", "codecov": "^3.1.0", "dotenv": "^6.2.0", - "fs-extra": "^7.0.1", "husky": "^1.3.1", "istanbul": "^0.4.5", "lint-staged": "^7.3.0", From 6808a58200b78e524a54432ec46f63794a4c5b87 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 9 Feb 2019 22:54:31 +0100 Subject: [PATCH 116/130] 0.3.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index b72ec18..4133cd9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.3.0", + "version": "0.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6fe7940..f6b3f92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.3.0", + "version": "0.3.1", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": { From 8a33570675379f1acde03e06fab14dfa0d57d22c Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 24 Feb 2019 16:48:46 +0100 Subject: [PATCH 117/130] fixing travis builds ocasionally failling --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 173c328..69a2ae2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,6 +43,7 @@ before_script: - npm link typescript - tsc - sleep 60 - +test: +- travis_wait npm t dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From 3cce3d2071bfbb1dd0e816e18301d5f3f5b33b51 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 24 Feb 2019 16:49:52 +0100 Subject: [PATCH 118/130] fix --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 69a2ae2..56ecaf3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,6 +44,6 @@ before_script: - tsc - sleep 60 test: -- travis_wait npm t +- travis_retry npm t dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From aba47cc9b8379da1cfab0dc6cd1138ca3127aa5c Mon Sep 17 00:00:00 2001 From: Kononnable Date: Mon, 25 Feb 2019 23:23:07 +0100 Subject: [PATCH 119/130] fixes #151 - generation of ManyToMany relation with custom table names --- CHANGELOG.md | 2 ++ src/drivers/AbstractDriver.ts | 1 + src/entity.mst | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 851b368..07ef685 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +* fixed generation of ManyToMany relations on junction tables with custom names(#151) + ## 0.3.1 * Fixed npx ussage(#146) diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 5bd555f..ec69693 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -113,6 +113,7 @@ export abstract class AbstractDriver { const column1 = new ColumnInfo(); column1.tsName = namesOfRelatedTables[1]; + column1.options.name = entity.sqlEntityName; const col1Rel = new RelationInfo(); col1Rel.relatedTable = namesOfRelatedTables[1]; diff --git a/src/entity.mst b/src/entity.mst index db27e03..65675c2 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -26,7 +26,7 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne {{printPropertyVisibility}}{{toPropertyName tsName}}:{{tsType}}{{#options/nullable}} | null{{/options/nullable}}; {{/relations}}{{#relations}} @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../options/primary}}primary:true,{{/../options/primary}}{{^../options/nullable}} nullable:false,{{/../options/nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} - {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../options/name}}'}){{/if}}{{/isOwner}} + {{#if isManyToMany}}@JoinTable({ name:'{{ ../options/name}}'}){{else}}@JoinColumn({ name:'{{ ../options/name}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; {{else}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; {{/if}} From 03fed9361b69131510bd08f24cc4357ca0867675 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 2 Mar 2019 12:47:18 +0100 Subject: [PATCH 120/130] dependencies upgrade --- package-lock.json | 1709 +++++++++++++++++++++++++++++++++++---------- package.json | 146 ++-- 2 files changed, 1423 insertions(+), 432 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4133cd9..4eea352 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,23 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/runtime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", + "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.12.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "dev": true + } + } + }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -13,15 +30,42 @@ "any-observable": "^0.3.0" } }, - "@sinonjs/formatio": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", - "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "@sinonjs/commons": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.1.tgz", + "integrity": "sha512-rgmZk5CrBGAMATk0HlHOFvo8V44/r+On6cKS80tqid0Eljd+fFBWBOXZp9H2/EB3faxdNdzXTx6QZIKLkbJ7mA==", "dev": true, "requires": { - "samsam": "1.3.0" + "type-detect": "4.0.8" } }, + "@sinonjs/formatio": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.0.tgz", + "integrity": "sha512-hskkZG4qB0HgsxrPUlnk2EiIyBwntM+ETIxCha/gidl172MCfdosNezB5706ciS5P2VhueM7MoACWwMc4A4gMQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + } + }, + "@sinonjs/samsam": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.2.0.tgz", + "integrity": "sha512-j5F1rScewLtx6pbTK0UAjA3jJj4RYiSKOix53YWv+Jzy/AZ69qHxUpU8fwVLjyKbEEud9QrLpv6Ggs7WqTimYw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.0.2", + "array-from": "^2.1.1", + "lodash": "^4.17.11" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, "@types/chai": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz", @@ -38,18 +82,18 @@ } }, "@types/chai-subset": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz", - "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.2.tgz", + "integrity": "sha512-VMA1aOXwPEJADlj5ykmYv77YKmbEuAxiLz/+lT6vFIWQ1EA06jF01TytVBAbVTNk0pjfW1Uhw5R5MaEq426N0A==", "dev": true, "requires": { "@types/chai": "*" } }, "@types/fs-extra": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.4.tgz", - "integrity": "sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.5.tgz", + "integrity": "sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A==", "dev": true, "requires": { "@types/node": "*" @@ -62,9 +106,9 @@ "dev": true }, "@types/inquirer": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-0.0.43.tgz", - "integrity": "sha512-xgyfKZVMFqE8aIKy1xfFVsX2MxyXUNgjgmbF6dRbR3sL+ZM5K4ka/9L4mmTwX8eTeVYtduyXu0gUVwVJa1HbNw==", + "version": "0.0.44", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-0.0.44.tgz", + "integrity": "sha512-ugbhy1yBtCz5iTWYF+AGRS/UcMcWicdyHhxl9VaeFYc3ueg0CCssthQLB3rIcIOeGtfG6WPEvHdLu/IjKYfefg==", "dev": true, "requires": { "@types/rx": "*", @@ -72,15 +116,15 @@ } }, "@types/mocha": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", - "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz", + "integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==", "dev": true }, "@types/mssql": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-4.0.11.tgz", - "integrity": "sha512-P/eTIYKlltwD00ewHo8Psz1xjkEnr059pfHWUi6kJixukruOTEEM5ROW9S9szCbKgn7+u/VdE5RoyAuaBKyUXQ==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-4.0.12.tgz", + "integrity": "sha512-4JiPP77+kUJKCBcMbVZt8+jbPEbPlMIsnHwHfaIQsCmwOJ6Ab7ona7/9fa/dADLku2Y0n921q3rbRM2YsBwOOA==", "dev": true, "requires": { "@types/node": "*" @@ -96,9 +140,9 @@ } }, "@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + "version": "11.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.10.4.tgz", + "integrity": "sha512-wa09itaLE8L705aXd8F80jnFpxz3Y1/KRHfKsYL2bPc0XF+wEWu8sR9n5bmeu8Ba1N9z2GRNzm/YdHcghLkLKg==" }, "@types/oracledb": { "version": "1.11.34", @@ -110,9 +154,9 @@ } }, "@types/pg": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.4.11.tgz", - "integrity": "sha512-Eksj2yOBNHnNqLuU1AqwF1qXgdaYDcWVH1ZQlxS7k1i34+JZd/ZNd15ugIpTVQxmBBMqjliJstmrnusjXy08Tg==", + "version": "7.4.13", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.4.13.tgz", + "integrity": "sha512-jk/hFADnywyjnWXZ6IeNsAk2lZtKDInZWGs1ASxmLb3QBpwLDGcSvH5s6IIRlPqsXjwzu8btnNbQ5Cx+AX/CjA==", "dev": true, "requires": { "@types/node": "*", @@ -255,9 +299,9 @@ } }, "@types/sinon": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-5.0.0.tgz", - "integrity": "sha512-RsisuFAkhtCB3DKwQrBZYdkqtOyck7y5GkMZ7KeYVjLNBoV9ZMI0Kxj304Myp+B5Jj4LeEdPMTPlXNylG9x94A==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.0.8.tgz", + "integrity": "sha512-v8HKmpYANbS3y0cWji16uk/CV9v2CqpI+wxeW7WVZPU2E8MAcvBYbCBpeukhaWPRHbTO3tu8m6vb2IXWCbEUOQ==", "dev": true }, "@types/through": { @@ -280,34 +324,33 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" - }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true }, "ansi-regex": { "version": "3.0.0", @@ -373,14 +416,10 @@ "dev": true }, "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", @@ -389,15 +428,30 @@ "dev": true }, "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { @@ -406,6 +460,12 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", @@ -961,22 +1021,22 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "codecov": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz", - "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.2.0.tgz", + "integrity": "sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw==", "dev": true, "requires": { "argv": "^0.0.2", "ignore-walk": "^3.0.1", "js-yaml": "^3.12.0", - "request": "^2.87.0", + "teeny-request": "^3.7.0", "urlgrey": "^0.4.4" }, "dependencies": { "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -1046,9 +1106,9 @@ "dev": true }, "core-js": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz", - "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" }, "core-util-is": { "version": "1.0.2", @@ -1136,6 +1196,15 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -1177,6 +1246,20 @@ } } }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1192,6 +1275,12 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -1232,6 +1321,11 @@ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", "dev": true }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -1249,6 +1343,46 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1351,20 +1485,33 @@ } } }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "kind-of": "^1.1.0" + "homedir-polyfill": "^1.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, @@ -1511,6 +1658,52 @@ "locate-path": "^2.0.0" } }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + } + } + }, + "fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", + "dev": true + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -1574,6 +1767,23 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "g-status": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", + "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "matcher": "^1.0.0", + "simple-git": "^1.85.0" + } + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -1623,9 +1833,9 @@ } }, "generic-pool": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz", - "integrity": "sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w==" + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.6.1.tgz", + "integrity": "sha512-iMmD/pY4q0+V+f8o4twE9JPeqfNuX+gJAaIPB3B0W1lFkBOtTxBo6B0HxHPgGhzQA8jego7EWopcYq/UDJO2KA==" }, "get-caller-file": { "version": "1.0.2", @@ -1682,6 +1892,51 @@ "path-is-absolute": "^1.0.0" } }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", @@ -1705,11 +1960,11 @@ }, "dependencies": { "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } } } @@ -1719,6 +1974,15 @@ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -1739,6 +2003,12 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -1777,9 +2047,9 @@ } }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "header-case": { @@ -1792,9 +2062,18 @@ } }, "highlight.js": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", - "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==" + "version": "9.15.6", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", + "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==" + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } }, "hosted-git-info": { "version": "2.7.1", @@ -1812,6 +2091,33 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "husky": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", @@ -1975,30 +2281,53 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^6.1.0", + "rxjs": "^6.4.0", "string-width": "^2.1.0", "strip-ansi": "^5.0.0", "through": "^2.3.6" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, "ansi-regex": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -2007,6 +2336,19 @@ "escape-string-regexp": "^1.0.5" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "^1.9.0" + } + }, "strip-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", @@ -2014,6 +2356,14 @@ "requires": { "ansi-regex": "^4.0.0" } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -2063,6 +2413,12 @@ "builtin-modules": "^1.0.0" } }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -2092,6 +2448,12 @@ } } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -2186,6 +2548,30 @@ "symbol-observable": "^1.1.0" } }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2200,6 +2586,15 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", @@ -2211,6 +2606,15 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2315,24 +2719,6 @@ } } }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", - "dev": true - }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" - } - }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -2391,9 +2777,9 @@ } }, "just-extend": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz", - "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", "dev": true }, "kind-of": { @@ -2410,12 +2796,6 @@ "invert-kv": "^1.0.0" } }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2427,9 +2807,9 @@ } }, "lint-staged": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.3.0.tgz", - "integrity": "sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw==", + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", + "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==", "dev": true, "requires": { "chalk": "^2.3.1", @@ -2437,13 +2817,15 @@ "cosmiconfig": "^5.0.2", "debug": "^3.1.0", "dedent": "^0.7.0", - "execa": "^0.9.0", + "del": "^3.0.0", + "execa": "^1.0.0", "find-parent-dir": "^0.3.0", + "g-status": "^2.0.2", "is-glob": "^4.0.0", "is-windows": "^1.0.2", - "jest-validate": "^23.5.0", - "listr": "^0.14.1", - "lodash": "^4.17.5", + "listr": "^0.14.2", + "listr-update-renderer": "^0.5.0", + "lodash": "^4.17.11", "log-symbols": "^2.2.0", "micromatch": "^3.1.8", "npm-which": "^3.0.1", @@ -2451,9 +2833,10 @@ "path-is-inside": "^1.0.2", "pify": "^3.0.0", "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.1", + "staged-git-files": "1.1.2", "string-argv": "^0.0.2", - "stringify-object": "^3.2.2" + "stringify-object": "^3.2.2", + "yup": "^0.26.10" }, "dependencies": { "ansi-styles": { @@ -2476,6 +2859,19 @@ "supports-color": "^5.3.0" } }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -2486,13 +2882,13 @@ } }, "execa": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", - "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -2500,6 +2896,15 @@ "strip-eof": "^1.0.0" } }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2512,6 +2917,12 @@ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -2693,12 +3104,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -2732,9 +3137,9 @@ } }, "lolex": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.0.tgz", - "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz", + "integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==", "dev": true }, "lower-case": { @@ -2751,9 +3156,9 @@ } }, "lru-cache": { - "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==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -2782,6 +3187,15 @@ "object-visit": "^1.0.0" } }, + "matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.4" + } + }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", @@ -2935,31 +3349,109 @@ } }, "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.0.2.tgz", + "integrity": "sha512-RtTJsmmToGyeTznSOMoM6TPEk1A84FQaHIciKrRqARZx+B5ccJ5tXlmJzEKGBxZdqk9UjpRsesZTUkZmR5YnuQ==", "dev": true, "requires": { + "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", + "debug": "3.2.6", "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "glob": "7.1.2", + "findup-sync": "2.0.0", + "glob": "7.1.3", "growl": "1.10.5", - "he": "1.1.1", + "he": "1.2.0", + "js-yaml": "3.12.0", + "log-symbols": "2.2.0", "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "ms": "2.1.1", + "node-environment-flags": "1.0.4", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "12.0.5", + "yargs-parser": "11.1.1", + "yargs-unparser": "1.5.0" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-flag": { @@ -2968,14 +3460,146 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { "has-flag": "^3.0.0" } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.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 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -2991,12 +3615,12 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mssql": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.3.0.tgz", - "integrity": "sha512-MpSwdLMbKfFL3DwjhgbJdFViU+ye9YR+op/t/CdhWwYdA90qWYjPyWbIzso/2xRfm7liYNkN5EZjAS9PWFLLZg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.3.2.tgz", + "integrity": "sha512-FMC/nvEjR+yMkkyPsHCiswckT7EExoKuTj9uC1yohtJuySgodzPqkJX7q+tsZsZyK8mFYo7JfX+li6/Xf+Irbg==", "requires": { "debug": "^3.2.6", - "generic-pool": "^3.4.2", + "generic-pool": "^3.6", "tedious": "^2.7.1" }, "dependencies": { @@ -3120,16 +3744,24 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "nise": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", - "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz", + "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==", "dev": true, "requires": { - "@sinonjs/formatio": "^2.0.0", - "just-extend": "^1.1.27", + "@sinonjs/formatio": "^3.1.0", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", "lolex": "^2.3.2", - "path-to-regexp": "^1.7.0", - "text-encoding": "^0.6.4" + "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "lolex": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", + "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", + "dev": true + } } }, "no-case": { @@ -3140,6 +3772,21 @@ "lower-case": "^1.1.1" } }, + "node-environment-flags": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.4.tgz", + "integrity": "sha512-M9rwCnWVLW7PX+NUWe3ejEdiLYinRpsEre9hMkU/6NS4h+EEulYaDH1gCEZ2gyXsmw+RXYDaV2JkkTNcsPDJ0Q==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node-fetch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", + "dev": true + }, "node-pre-gyp": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", @@ -3288,6 +3935,12 @@ } } }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -3297,6 +3950,28 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -3393,9 +4068,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" }, "p-limit": { "version": "1.3.0", @@ -3425,9 +4100,9 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "packet-reader": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", - "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, "param-case": { "version": "2.1.1", @@ -3452,6 +4127,12 @@ "json-parse-better-errors": "^1.0.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 + }, "parse5": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", @@ -3539,12 +4220,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.8.0.tgz", - "integrity": "sha512-yS3C9YD+ft0H7G47uU0eKajgTieggCXdA+Fxhm5G+wionY6kPBa8BEVDwPLMxQvkRkv3/LXiFEqjZm9gfxdW+g==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.8.1.tgz", + "integrity": "sha512-m9aIrOV4mgfo+1Ze+eNoJwaWZDvpeBz8Kzwi0zzqLC+tQBsQgIuu+FGPqzyRv9HFlS7tHO1I33LKp9gP5g7U4Q==", "requires": { "buffer-writer": "2.0.0", - "packet-reader": "0.3.1", + "packet-reader": "1.0.0", "pg-connection-string": "0.1.3", "pg-pool": "^2.0.4", "pg-types": "~2.0.0", @@ -3593,6 +4274,21 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -3657,16 +4353,26 @@ } }, "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "dependencies": { + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + } } }, "posix-character-classes": { @@ -3691,9 +4397,9 @@ "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" }, "postgres-interval": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.2.tgz", - "integrity": "sha512-fC3xNHeTskCxL1dC8KOtxXt7YeFmlbTYtn7ul8MkVERuTmf7pI4DrkAxcw3kh1fQ9uz4wQmd03a1mRiXUZChfQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "requires": { "xtend": "^4.0.0" } @@ -3705,25 +4411,15 @@ "dev": true }, "prettier": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.1.tgz", - "integrity": "sha512-XXUITwIkGb3CPJ2hforHah/zTINRyie5006Jd2HKy2qz7snEJXl0KLfsJZW/wst9g6R2rFvqba3VpNYdu1hDcA==", + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", "dev": true }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "property-expr": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", + "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", "dev": true }, "pseudomap": { @@ -3842,25 +4538,16 @@ } }, "remap-istanbul": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.12.0.tgz", - "integrity": "sha512-lpA+zkWfT7v81k76asd+w82+dnbBTmBEsyuBVQ28armnOqsZZO23uI4ZCBGd8TtIb9Tq4CauswB+A44cbkuiMA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.13.0.tgz", + "integrity": "sha512-rS5ZpVAx3fGtKZkiBe1esXg5mKYbgW9iz8kkADFt3p6lo3NsBBUX1q6SwdhwUtYCGnr7nK6gRlbYK3i8R0jbRA==", "dev": true, "requires": { - "amdefine": "^1.0.0", "istanbul": "0.4.5", - "minimatch": "^3.0.3", - "plugin-error": "^0.1.2", - "source-map": "^0.6.1", - "through2": "2.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "minimatch": "^3.0.4", + "plugin-error": "^1.0.1", + "source-map": "0.6.1", + "through2": "3.0.0" } }, "repeat-element": { @@ -4010,6 +4697,16 @@ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", @@ -4075,9 +4772,10 @@ "dev": true }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, "requires": { "tslib": "^1.9.0" } @@ -4101,12 +4799,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "samsam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", - "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", - "dev": true - }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -4178,19 +4870,45 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, - "sinon": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-6.0.0.tgz", - "integrity": "sha512-MatciKXyM5pXMSoqd593MqTsItJNCkSSl53HJYeKR5wfsDdp2yljjUQJLfVwAWLoBNfx1HThteqygGQ0ZEpXpQ==", + "simple-git": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz", + "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==", "dev": true, "requires": { - "@sinonjs/formatio": "^2.0.0", + "debug": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "sinon": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.6.tgz", + "integrity": "sha512-n5r5wZ/VyrP7oAJpGGGjSxvw2Yy8T+qdGjDBltK01KBqB33O60V/xcG0Hgqm6SbJEIyCGuICpaXg9uFzY5DOYw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.3.0", + "@sinonjs/formatio": "^3.2.0", + "@sinonjs/samsam": "^3.2.0", "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.4.2", - "nise": "^1.3.3", - "supports-color": "^5.4.0", - "type-detect": "^4.0.8" + "lolex": "^3.1.0", + "nise": "^1.4.10", + "supports-color": "^5.5.0" }, "dependencies": { "has-flag": { @@ -4200,26 +4918,20 @@ "dev": true }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true } } }, "sinon-chai": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.0.0.tgz", - "integrity": "sha512-+cqeKiuMZjZs800fRf4kjJR/Pp4p7bYY3ciZHClFNS8tSzJoAcWni/ZUZD8TrfZ+oFRyLiKWX3fTClDATGy5vQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.3.0.tgz", + "integrity": "sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA==", "dev": true }, "slash": { @@ -4485,9 +5197,9 @@ } }, "staged-git-files": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz", - "integrity": "sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", + "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", "dev": true }, "static-extend": { @@ -4586,6 +5298,12 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, + "synchronous-promise": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.6.tgz", + "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==", + "dev": true + }, "tar": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", @@ -4640,11 +5358,16 @@ } } }, - "text-encoding": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true + "teeny-request": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-3.11.3.tgz", + "integrity": "sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1", + "node-fetch": "^2.2.0", + "uuid": "^3.3.2" + } }, "thenify": { "version": "3.3.0", @@ -4668,35 +5391,13 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", - "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.0.tgz", + "integrity": "sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ==", "dev": true, "requires": { - "readable-stream": "~2.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.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 - } + "readable-stream": "2 || 3", + "xtend": "~4.0.1" } }, "title-case": { @@ -4779,15 +5480,21 @@ "repeat-string": "^1.6.1" } }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", + "dev": true + }, "tslib": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==" }, "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.13.1.tgz", + "integrity": "sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -4798,6 +5505,7 @@ "glob": "^7.1.1", "js-yaml": "^3.7.0", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", @@ -4822,9 +5530,9 @@ } }, "tslint-config-prettier": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.17.0.tgz", - "integrity": "sha512-NKWNkThwqE4Snn4Cm6SZB7lV5RMDDFsBwz6fWUkTxOKGjMx8ycOHnjIbhn7dZd5XmssW3CwqUjlANR6EhP9YQw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", + "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", "dev": true }, "tsutils": { @@ -4866,9 +5574,9 @@ "dev": true }, "typeorm": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.12.tgz", - "integrity": "sha512-y9RWUfzE1rZ4WZM8B2Bj0l/V+EhA1yAyEVzHGD2zCM7YjVpqVg/L7HdSRO16VRaPvlz4rHH4Xt0yWfE+NXZLww==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.13.tgz", + "integrity": "sha512-SfRHZt6un1rCsTtHpBSgG5kh2jWznzrBex1Dfxbnji0nlrrNQ+ET4uxIhq3herk0TE0ETx3R+UjU0MGv8DB/3g==", "requires": { "app-root-path": "^2.0.1", "buffer": "^5.1.0", @@ -4975,9 +5683,9 @@ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -5001,13 +5709,13 @@ } }, "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "p-is-promise": "^2.0.0" } }, "ms": { @@ -5090,9 +5798,9 @@ } }, "typescript": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", - "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==" + "version": "3.3.3333", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz", + "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==" }, "uglify-js": { "version": "3.4.9", @@ -5249,6 +5957,12 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -5356,11 +6070,6 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -5424,40 +6133,52 @@ } }, "yargs": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", - "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.1.tgz", + "integrity": "sha512-HgY0xHGmPPakg6kEDufqxZuXVtvPZcipORC8O7S44iEnwsUmP+qnhReHc6d1dyeIZkrPmYFblh45Z2oeDn++fQ==", "requires": { "cliui": "^4.0.0", - "decamelize": "^2.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" }, "dependencies": { - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "requires": { - "xregexp": "4.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "find-up": { @@ -5468,6 +6189,32 @@ "locate-path": "^3.0.0" } }, + "get-caller-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.1.tgz", + "integrity": "sha512-SpOZHfz845AH0wJYVuZk2jWDqFmu7Xubsx+ldIpwzy5pDUpu7OJHK7QYNSA2NPlDSKQwM1GFaAkciOWjjW92Sg==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -5477,10 +6224,30 @@ "path-exists": "^3.0.0" } }, + "mem": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "requires": { "p-try": "^2.0.0" } @@ -5497,21 +6264,227 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + }, + "string-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", + "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "requires": { + "ansi-regex": "^4.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" } } }, "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "dependencies": { "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + } + } + }, + "yargs-unparser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", + "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.11", + "yargs": "^12.0.5" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.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 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -5519,6 +6492,20 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" + }, + "yup": { + "version": "0.26.10", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz", + "integrity": "sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==", + "dev": true, + "requires": { + "@babel/runtime": "7.0.0", + "fn-name": "~2.0.1", + "lodash": "^4.17.10", + "property-expr": "^1.5.0", + "synchronous-promise": "^2.0.5", + "toposort": "^2.0.2" + } } } } diff --git a/package.json b/package.json index f6b3f92..65ba42a 100644 --- a/package.json +++ b/package.json @@ -1,74 +1,78 @@ { - "name": "typeorm-model-generator", - "version": "0.3.1", - "description": "Generates models for TypeORM from existing databases.", - "bin": "bin/typeorm-model-generator", - "scripts": { - "setup": "npm install", - "start": " node ./dist/src/index.js", - "compile": "npm run clean && tsc", - "precommit": "npm run prettier && git update-index --again", - "test": "istanbul cover ./node_modules/mocha/bin/_mocha dist/test/**/*.test.js -- -R spec --bail", - "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/lcov.info -t lcovonly && remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage.json && codecov --file=./coverage/coverage.json ", - "clean": "rimraf dist coverage output", - "prettier": "prettier --write ./src/*.ts ./src/**/*.ts", - "prepack": "npm run compile" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Kononnable/typeorm-model-generator.git" - }, - "author": "Kononnable", - "license": "MIT", - "bugs": { - "url": "https://github.com/Kononnable/typeorm-model-generator/issues" - }, - "homepage": "https://github.com/Kononnable/typeorm-model-generator#readme", - "dependencies": { - "change-case": "^3.1.0", - "handlebars": "^4.0.12", - "fs-extra": "^7.0.1", - "inquirer": "^6.2.1", - "mssql": "^4.3.0", - "mysql": "^2.16.0", - "pg": "^7.8.0", - "reflect-metadata": "^0.1.13", - "sqlite3": "^4.0.6", - "typeorm": "^0.2.12", - "typescript": "^2.8.3", - "yargs": "^12.0.1", - "yn": "^2.0.0" - }, - "devDependencies": { - "@types/chai": "^4.1.7", - "@types/chai-as-promised": "7.1.0", - "@types/chai-subset": "^1.3.1", - "@types/fs-extra": "^5.0.4", - "@types/handlebars": "^4.0.40", - "@types/inquirer": "0.0.43", - "@types/mocha": "^5.2.5", - "@types/mssql": "^4.0.11", - "@types/mysql": "2.15.5", - "@types/node": "^10.12.18", - "@types/oracledb": "^1.11.34", - "@types/pg": "^7.4.11", - "@types/sinon": "^5.0.0", - "@types/yargs": "^12.0.1", - "chai": "^4.2.0", - "chai-as-promised": "^7.1.1", - "chai-subset": "^1.6.0", - "codecov": "^3.1.0", - "dotenv": "^6.2.0", - "husky": "^1.3.1", - "istanbul": "^0.4.5", - "lint-staged": "^7.3.0", - "mocha": "^5.2.0", - "prettier": "^1.16.1", - "remap-istanbul": "^0.12.0", - "rimraf": "^2.6.3", - "sinon": "^6.0.0", - "sinon-chai": "^3.0.0", - "tslint": "^5.12.1", - "tslint-config-prettier": "^1.17.0" + "name": "typeorm-model-generator", + "version": "0.3.1", + "description": "Generates models for TypeORM from existing databases.", + "bin": "bin/typeorm-model-generator", + "scripts": { + "setup": "npm install", + "start": " node ./dist/src/index.js", + "compile": "npm run clean && tsc", + "test": "istanbul cover ./node_modules/mocha/bin/_mocha dist/test/**/*.test.js -- -R spec --bail", + "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/lcov.info -t lcovonly && remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage.json && codecov --file=./coverage/coverage.json ", + "clean": "rimraf dist coverage output", + "prettier": "prettier --write ./src/*.ts ./src/**/*.ts", + "prepack": "npm run compile" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Kononnable/typeorm-model-generator.git" + }, + "author": "Kononnable", + "license": "MIT", + "bugs": { + "url": "https://github.com/Kononnable/typeorm-model-generator/issues" + }, + "homepage": "https://github.com/Kononnable/typeorm-model-generator#readme", + "dependencies": { + "change-case": "^3.1.0", + "fs-extra": "^7.0.1", + "handlebars": "^4.0.12", + "inquirer": "^6.2.2", + "mssql": "^4.3.2", + "mysql": "^2.16.0", + "pg": "^7.8.1", + "reflect-metadata": "^0.1.13", + "sqlite3": "^4.0.6", + "typeorm": "^0.2.13", + "typescript": "^3.3.3333", + "yargs": "^13.2.1", + "yn": "^2.0.0" + }, + "devDependencies": { + "@types/chai": "^4.1.7", + "@types/chai-as-promised": "7.1.0", + "@types/chai-subset": "^1.3.2", + "@types/fs-extra": "^5.0.5", + "@types/handlebars": "^4.0.40", + "@types/inquirer": "0.0.44", + "@types/mocha": "^5.2.6", + "@types/mssql": "^4.0.12", + "@types/mysql": "2.15.5", + "@types/node": "^11.10.4", + "@types/oracledb": "^1.11.34", + "@types/pg": "^7.4.13", + "@types/sinon": "^7.0.8", + "@types/yargs": "^12.0.1", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "chai-subset": "^1.6.0", + "codecov": "^3.2.0", + "dotenv": "^6.2.0", + "husky": "^1.3.1", + "istanbul": "^0.4.5", + "lint-staged": "^8.1.5", + "mocha": "^6.0.2", + "prettier": "^1.16.4", + "remap-istanbul": "^0.13.0", + "rimraf": "^2.6.3", + "sinon": "^7.2.6", + "sinon-chai": "^3.3.0", + "tslint": "^5.13.1", + "tslint-config-prettier": "^1.18.0" + }, + "husky": { + "hooks": { + "pre-commit": "npm run prettier && git update-index --again" } + } } From 74896657d4b283f086f23fc830e0305866bad958 Mon Sep 17 00:00:00 2001 From: Jason Lycke Date: Wed, 6 Mar 2019 14:25:11 -0500 Subject: [PATCH 121/130] #147: Fix case-sensitive column names --- src/drivers/MysqlDriver.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index ddacffa..c95b29a 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -44,11 +44,11 @@ export class MysqlDriver extends AbstractDriver { NUMERIC_PRECISION: number; NUMERIC_SCALE: number; IsIdentity: number; - column_type: string; - column_key: string; + COLUMN_TYPE: string; + COLUMN_KEY: string; }>(`SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE, DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE, - CASE WHEN EXTRA like '%auto_increment%' THEN 1 ELSE 0 END IsIdentity, column_type, column_key + CASE WHEN EXTRA like '%auto_increment%' THEN 1 ELSE 0 END IsIdentity, COLUMN_TYPE, COLUMN_KEY FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA like DATABASE()`); entities.forEach(ent => { response @@ -59,7 +59,7 @@ export class MysqlDriver extends AbstractDriver { colInfo.options.name = resp.COLUMN_NAME; colInfo.options.nullable = resp.IS_NULLABLE === "YES"; colInfo.options.generated = resp.IsIdentity === 1; - colInfo.options.unique = resp.column_key === "UNI"; + colInfo.options.unique = resp.COLUMN_KEY === "UNI"; colInfo.options.default = this.ReturnDefaultValueFunction( resp.COLUMN_DEFAULT ); @@ -69,7 +69,7 @@ export class MysqlDriver extends AbstractDriver { colInfo.tsType = "number"; break; case "tinyint": - if (resp.column_type === "tinyint(1)") { + if (resp.COLUMN_TYPE === "tinyint(1)") { colInfo.options.width = 1; colInfo.tsType = "boolean"; } else { @@ -141,9 +141,10 @@ export class MysqlDriver extends AbstractDriver { break; case "enum": colInfo.tsType = "string"; - colInfo.options.enum = resp.column_type - .substring(5, resp.column_type.length - 1) - .replace(/\'/gi, '"'); + colInfo.options.enum = resp.COLUMN_TYPE.substring( + 5, + resp.COLUMN_TYPE.length - 1 + ).replace(/\'/gi, '"'); break; case "json": colInfo.tsType = "Object"; From 5591a7bc77d257e46d9abc34503e386589f517ca Mon Sep 17 00:00:00 2001 From: Kononnable Date: Fri, 8 Mar 2019 23:24:00 +0100 Subject: [PATCH 122/130] generation of models based on multiple databases closes #144 --- .travis.yml | 4 +- CHANGELOG.md | 1 + src/drivers/AbstractDriver.ts | 54 ++++++++--- src/drivers/MssqlDriver.ts | 92 +++++++++++++------ src/drivers/MysqlDriver.ts | 30 +++--- src/drivers/OracleDriver.ts | 3 +- src/drivers/PostgresDriver.ts | 3 +- src/entity.mst | 2 +- src/index.ts | 16 +++- src/models/EntityInfo.ts | 1 + test/drivers/MssqlDriver.test.ts | 6 +- .../github-issues/144/entity/Post.ts | 22 +++++ .../github-issues/144/entity/PostAuthor.ts | 16 ++++ test/integration/runTestsFromPath.test.ts | 66 ++++++++++++- 14 files changed, 248 insertions(+), 68 deletions(-) create mode 100644 test/integration/github-issues/144/entity/Post.ts create mode 100644 test/integration/github-issues/144/entity/PostAuthor.ts diff --git a/.travis.yml b/.travis.yml index 56ecaf3..928ca73 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,9 +11,9 @@ env: matrix: - POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=test POSTGRES_Password=test POSTGRES_Database=test POSTGRES_SSL=0 MYSQL_Skip=0 - MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=test MYSQL_Password=test + MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=admin MYSQL_Database=test MYSQL_SSL=0 MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 - MARIADB_Username=test MARIADB_Password=test MARIADB_Database=test MARIADB_SSL=0 + MARIADB_Username=root MARIADB_Password=admin MARIADB_Database=test MARIADB_SSL=0 MSSQL_Skip=0 MSSQL_Host=localhost MSSQL_Port=1433 MSSQL_Username=sa MSSQL_Password=Admin12345 MSSQL_Database=typeorm_mg MSSQL_SSL=0 ORACLE_Skip=0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 07ef685..53181a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Changelog +* added option to generate models based on multiple databases(#144) * fixed generation of ManyToMany relations on junction tables with custom names(#151) ## 0.3.1 diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index ec69693..b6db16f 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -60,11 +60,13 @@ export abstract class AbstractDriver { ]; public abstract GetAllTablesQuery: ( - schema: string + schema: string, + dbNames: string ) => Promise< Array<{ TABLE_SCHEMA: string; TABLE_NAME: string; + DB_NAME: string; }> >; @@ -146,12 +148,28 @@ export abstract class AbstractDriver { ): Promise { let dbModel = [] as EntityInfo[]; await this.ConnectToServer(connectionOptons); - const sqlEscapedSchema = - "'" + connectionOptons.schemaName.split(",").join("','") + "'"; - dbModel = await this.GetAllTables(sqlEscapedSchema); - await this.GetCoulmnsFromEntity(dbModel, sqlEscapedSchema); - await this.GetIndexesFromEntity(dbModel, sqlEscapedSchema); - dbModel = await this.GetRelations(dbModel, sqlEscapedSchema); + const sqlEscapedSchema = this.escapeCommaSeparatedList( + connectionOptons.schemaName + ); + dbModel = await this.GetAllTables( + sqlEscapedSchema, + connectionOptons.databaseName + ); + await this.GetCoulmnsFromEntity( + dbModel, + sqlEscapedSchema, + connectionOptons.databaseName + ); + await this.GetIndexesFromEntity( + dbModel, + sqlEscapedSchema, + connectionOptons.databaseName + ); + dbModel = await this.GetRelations( + dbModel, + sqlEscapedSchema, + connectionOptons.databaseName + ); await this.DisconnectFromServer(); dbModel = this.FindManyToManyRelations(dbModel); this.FindPrimaryColumnsFromIndexes(dbModel); @@ -160,8 +178,11 @@ export abstract class AbstractDriver { public abstract async ConnectToServer(connectionOptons: IConnectionOptions); - public async GetAllTables(schema: string): Promise { - const response = await this.GetAllTablesQuery(schema); + public async GetAllTables( + schema: string, + dbNames: string + ): Promise { + const response = await this.GetAllTablesQuery(schema, dbNames); const ret: EntityInfo[] = [] as EntityInfo[]; response.forEach(val => { const ent: EntityInfo = new EntityInfo(); @@ -170,6 +191,7 @@ export abstract class AbstractDriver { ent.Schema = val.TABLE_SCHEMA; ent.Columns = [] as ColumnInfo[]; ent.Indexes = [] as IndexInfo[]; + ent.Database = dbNames.includes(",") ? val.DB_NAME : ""; ret.push(ent); }); return ret; @@ -325,15 +347,18 @@ export abstract class AbstractDriver { } public abstract async GetCoulmnsFromEntity( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise; public abstract async GetIndexesFromEntity( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise; public abstract async GetRelations( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise; public FindPrimaryColumnsFromIndexes(dbModel: EntityInfo[]) { @@ -364,4 +389,9 @@ export abstract class AbstractDriver { public abstract async DropDB(dbName: string); public abstract async UseDB(dbName: string); public abstract async CheckIfDBExists(dbName: string): Promise; + + // TODO: change name + protected escapeCommaSeparatedList(commaSeparatedList: string) { + return "'" + commaSeparatedList.split(",").join("','") + "'"; + } } diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 8925751..9de7ee4 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -17,20 +17,25 @@ export class MssqlDriver extends AbstractDriver { public readonly standardUser = "sa"; private Connection: MSSQL.ConnectionPool; - public GetAllTablesQuery = async (schema: string) => { + public GetAllTablesQuery = async (schema: string, dbNames: string) => { const request = new MSSQL.Request(this.Connection); const response: Array<{ TABLE_SCHEMA: string; TABLE_NAME: string; + DB_NAME: string; }> = (await request.query( - `SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema})` + `SELECT TABLE_SCHEMA,TABLE_NAME, table_catalog as "DB_NAME" FROM INFORMATION_SCHEMA.TABLES +WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG in (${this.escapeCommaSeparatedList( + dbNames + )})` )).recordset; return response; }; public async GetCoulmnsFromEntity( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise { const request = new MSSQL.Request(this.Connection); const response: Array<{ @@ -56,8 +61,9 @@ export class MssqlDriver extends AbstractDriver { and tc.TABLE_NAME = c.TABLE_NAME and cu.COLUMN_NAME = c.COLUMN_NAME and tc.TABLE_SCHEMA=c.TABLE_SCHEMA) IsUnique - FROM INFORMATION_SCHEMA.COLUMNS c where TABLE_SCHEMA in (${schema})`)) - .recordset; + FROM INFORMATION_SCHEMA.COLUMNS c where TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG in (${this.escapeCommaSeparatedList( + dbNames + )})`)).recordset; entities.forEach(ent => { response .filter(filterVal => { @@ -213,7 +219,8 @@ export class MssqlDriver extends AbstractDriver { } public async GetIndexesFromEntity( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise { const request = new MSSQL.Request(this.Connection); const response: Array<{ @@ -222,26 +229,37 @@ export class MssqlDriver extends AbstractDriver { ColumnName: string; is_unique: boolean; is_primary_key: boolean; - }> = (await request.query(`SELECT - TableName = t.name, - IndexName = ind.name, - ColumnName = col.name, - ind.is_unique, - ind.is_primary_key -FROM - sys.indexes ind -INNER JOIN - sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id -INNER JOIN - sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id -INNER JOIN - sys.tables t ON ind.object_id = t.object_id -INNER JOIN - sys.schemas s on s.schema_id=t.schema_id -WHERE - t.is_ms_shipped = 0 and s.name in (${schema}) -ORDER BY - t.name, ind.name, ind.index_id, ic.key_ordinal;`)).recordset; + }> = []; + for (const dbName of dbNames.split(",")) { + await this.UseDB(dbName); + const resp: Array<{ + TableName: string; + IndexName: string; + ColumnName: string; + is_unique: boolean; + is_primary_key: boolean; + }> = (await request.query(`SELECT + TableName = t.name, + IndexName = ind.name, + ColumnName = col.name, + ind.is_unique, + ind.is_primary_key + FROM + sys.indexes ind + INNER JOIN + sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id + INNER JOIN + sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id + INNER JOIN + sys.tables t ON ind.object_id = t.object_id + INNER JOIN + sys.schemas s on s.schema_id=t.schema_id + WHERE + t.is_ms_shipped = 0 and s.name in (${schema}) + ORDER BY + t.name, ind.name, ind.index_id, ic.key_ordinal;`)).recordset; + response.push(...resp); + } entities.forEach(ent => { response .filter(filterVal => filterVal.TableName === ent.tsEntityName) @@ -272,7 +290,8 @@ ORDER BY } public async GetRelations( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise { const request = new MSSQL.Request(this.Connection); const response: Array<{ @@ -284,7 +303,19 @@ ORDER BY onDelete: "RESTRICT" | "CASCADE" | "SET_NULL" | "NO_ACTION"; onUpdate: "RESTRICT" | "CASCADE" | "SET_NULL" | "NO_ACTION"; object_id: number; - }> = (await request.query(`select + }> = []; + for (const dbName of dbNames.split(",")) { + await this.UseDB(dbName); + const resp: Array<{ + TableWithForeignKey: string; + FK_PartNo: number; + ForeignKeyColumn: string; + TableReferenced: string; + ForeignKeyColumnReferenced: string; + onDelete: "RESTRICT" | "CASCADE" | "SET_NULL" | "NO_ACTION"; + onUpdate: "RESTRICT" | "CASCADE" | "SET_NULL" | "NO_ACTION"; + object_id: number; + }> = (await request.query(`select parentTable.name as TableWithForeignKey, fkc.constraint_column_id as FK_PartNo, parentColumn.name as ForeignKeyColumn, @@ -311,6 +342,8 @@ where fk.is_disabled=0 and fk.is_ms_shipped=0 and parentSchema.name in (${schema}) order by TableWithForeignKey, FK_PartNo`)).recordset; + response.push(...resp); + } const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; response.forEach(resp => { let rels = relationsTemp.find( @@ -362,8 +395,9 @@ order by } } public async ConnectToServer(connectionOptons: IConnectionOptions) { + const databaseName = connectionOptons.databaseName.split(",")[0]; const config: MSSQL.config = { - database: connectionOptons.databaseName, + database: databaseName, options: { appName: "typeorm-model-generator", encrypt: connectionOptons.ssl diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index ddacffa..3dd4072 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -19,20 +19,22 @@ export class MysqlDriver extends AbstractDriver { private Connection: MYSQL.Connection; - public GetAllTablesQuery = async (schema: string) => { + public GetAllTablesQuery = async (schema: string, dbNames: string) => { const response = this.ExecQuery<{ TABLE_SCHEMA: string; TABLE_NAME: string; - }>(`SELECT TABLE_SCHEMA, TABLE_NAME + DB_NAME: string; + }>(`SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_SCHEMA as DB_NAME FROM information_schema.tables WHERE table_type='BASE TABLE' - AND table_schema like DATABASE()`); + AND table_schema IN (${this.escapeCommaSeparatedList(dbNames)})`); return response; }; public async GetCoulmnsFromEntity( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise { const response = await this.ExecQuery<{ TABLE_NAME: string; @@ -49,7 +51,9 @@ export class MysqlDriver extends AbstractDriver { }>(`SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE, DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE, CASE WHEN EXTRA like '%auto_increment%' THEN 1 ELSE 0 END IsIdentity, column_type, column_key - FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA like DATABASE()`); + FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA IN (${this.escapeCommaSeparatedList( + dbNames + )})`); entities.forEach(ent => { response .filter(filterVal => filterVal.TABLE_NAME === ent.tsEntityName) @@ -228,7 +232,8 @@ export class MysqlDriver extends AbstractDriver { } public async GetIndexesFromEntity( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise { const response = await this.ExecQuery<{ TableName: string; @@ -239,8 +244,7 @@ export class MysqlDriver extends AbstractDriver { }>(`SELECT TABLE_NAME TableName,INDEX_NAME IndexName,COLUMN_NAME ColumnName,CASE WHEN NON_UNIQUE=0 THEN 1 ELSE 0 END is_unique, CASE WHEN INDEX_NAME='PRIMARY' THEN 1 ELSE 0 END is_primary_key FROM information_schema.statistics sta - WHERE table_schema like DATABASE(); - `); + WHERE table_schema IN (${this.escapeCommaSeparatedList(dbNames)})`); entities.forEach(ent => { response .filter(filterVal => filterVal.TableName === ent.tsEntityName) @@ -271,7 +275,8 @@ export class MysqlDriver extends AbstractDriver { } public async GetRelations( entities: EntityInfo[], - schema: string + schema: string, + dbNames: string ): Promise { const response = await this.ExecQuery<{ TableWithForeignKey: string; @@ -297,7 +302,7 @@ export class MysqlDriver extends AbstractDriver { INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC ON CU.CONSTRAINT_NAME=RC.CONSTRAINT_NAME AND CU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA WHERE - TABLE_SCHEMA = SCHEMA() + TABLE_SCHEMA IN (${this.escapeCommaSeparatedList(dbNames)}) AND CU.REFERENCED_TABLE_NAME IS NOT NULL; `); const relationsTemp: IRelationTempInfo[] = [] as IRelationTempInfo[]; @@ -347,10 +352,11 @@ export class MysqlDriver extends AbstractDriver { } } public async ConnectToServer(connectionOptons: IConnectionOptions) { + const databaseName = connectionOptons.databaseName.split(",")[0]; let config: MYSQL.ConnectionConfig; if (connectionOptons.ssl) { config = { - database: connectionOptons.databaseName, + database: databaseName, host: connectionOptons.host, password: connectionOptons.password, port: connectionOptons.port, @@ -361,7 +367,7 @@ export class MysqlDriver extends AbstractDriver { }; } else { config = { - database: connectionOptons.databaseName, + database: databaseName, host: connectionOptons.host, password: connectionOptons.password, port: connectionOptons.port, diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index b3500c2..3a1059c 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -32,8 +32,9 @@ export class OracleDriver extends AbstractDriver { const response: Array<{ TABLE_SCHEMA: string; TABLE_NAME: string; + DB_NAME: string; }> = (await this.Connection.execute( - ` SELECT NULL AS TABLE_SCHEMA, TABLE_NAME FROM all_tables WHERE owner = (select user from dual)` + ` SELECT NULL AS TABLE_SCHEMA, TABLE_NAME, NULL AS DB_NAME FROM all_tables WHERE owner = (select user from dual)` )).rows!; return response; }; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 03688e4..79b39a3 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -22,8 +22,9 @@ export class PostgresDriver extends AbstractDriver { const response: Array<{ TABLE_SCHEMA: string; TABLE_NAME: string; + DB_NAME: string; }> = (await this.Connection.query( - `SELECT table_schema as "TABLE_SCHEMA",table_name as "TABLE_NAME" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND table_schema in (${schema}) ` + `SELECT table_schema as "TABLE_SCHEMA",table_name as "TABLE_NAME", table_catalog as "DB_NAME" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND table_schema in (${schema}) ` )).rows; return response; }; diff --git a/src/entity.mst b/src/entity.mst index 65675c2..3dc4226 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -3,7 +3,7 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne {{/each}} -@Entity("{{sqlEntityName}}"{{#Schema}},{schema:"{{.}}"}{{/Schema}}) +@Entity("{{sqlEntityName}}"{{#Schema}},{schema:"{{.}}"{{#if ../Database}}, database:"{{../Database}}"{{/if}} } {{/Schema}}) {{#Indexes}}{{^isPrimaryKey}}@Index("{{name}}",[{{#columns}}"{{toPropertyName name}}",{{/columns}}]{{#isUnique}},{unique:true}{{/isUnique}}) {{/isPrimaryKey}}{{/Indexes}}export class {{toEntityName tsEntityName}}{{#IsActiveRecord}} extends BaseEntity{{/IsActiveRecord}} { {{#Columns}} diff --git a/src/index.ts b/src/index.ts index 4b2b8dd..a87cb02 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,7 +23,10 @@ async function CliLogic() { } else { if (fs.existsSync(path.resolve(process.cwd(), ".tomg-config"))) { console.log( - `[${new Date().toLocaleTimeString()}] Using configuration file.` + `[${new Date().toLocaleTimeString()}] Using configuration file. [${path.resolve( + process.cwd(), + ".tomg-config" + )}]` ); const retVal = await fs.readJson( path.resolve(process.cwd(), ".tomg-config") @@ -62,7 +65,8 @@ function GetUtilParametersByArgs() { .option("d", { alias: "database", demand: true, - describe: "Database name(or path for sqlite)" + describe: + "Database name(or path for sqlite). You can pass multiple values separted by comma." }) .option("u", { alias: "user", @@ -98,7 +102,7 @@ function GetUtilParametersByArgs() { .option("s", { alias: "schema", describe: - "Schema name to create model from. Only for mssql and postgres" + "Schema name to create model from. Only for mssql and postgres. You can pass multiple values separted by comma." }) .option("ssl", { boolean: true, @@ -258,7 +262,8 @@ async function GetUtilParametersByInquirer() { }, { default: "", - message: "Database name:", + message: + "Database name: (You can pass multiple values separted by comma)", name: "dbName", type: "input" } @@ -270,7 +275,8 @@ async function GetUtilParametersByInquirer() { connectionOptions.schemaName = ((await inquirer.prompt([ { default: driver.standardSchema, - message: "Database schema:", + message: + "Database schema: (You can pass multiple values separted by comma)", name: "schema", type: "input" } diff --git a/src/models/EntityInfo.ts b/src/models/EntityInfo.ts index 1c51dba..4aad6c3 100644 --- a/src/models/EntityInfo.ts +++ b/src/models/EntityInfo.ts @@ -10,6 +10,7 @@ export class EntityInfo { public Schema: string; public GenerateConstructor: boolean; public IsActiveRecord: boolean; + public Database: string; public relationImports() { const imports: string[] = []; diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index c2cc4a2..3807ae3 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -45,7 +45,7 @@ describe('MssqlDriver', function () { return response; } }) - const result = await driver.GetAllTables('schema') + const result = await driver.GetAllTables('schema', 'db') const expectedResult = [] as EntityInfo[]; const y = new EntityInfo(); y.tsEntityName = 'name' @@ -53,6 +53,7 @@ describe('MssqlDriver', function () { y.Schema='schema' y.Columns = [] as ColumnInfo[]; y.Indexes = [] as IndexInfo[]; + y.Database = ""; expectedResult.push(y) expect(result).to.be.deep.equal(expectedResult) }) @@ -78,6 +79,7 @@ describe('MssqlDriver', function () { y.tsEntityName = 'name' y.Columns = [] as ColumnInfo[]; y.Indexes = [] as IndexInfo[]; + y.Database = ""; entities.push(y) const expected: EntityInfo[] = JSON.parse(JSON.stringify(entities)); expected[0].Columns.push({ @@ -93,7 +95,7 @@ describe('MssqlDriver', function () { tsType: 'number', relations: [] as RelationInfo[], }) - const result = await driver.GetCoulmnsFromEntity(entities, 'schema'); + const result = await driver.GetCoulmnsFromEntity(entities, 'schema','db'); expect(result).to.be.deep.equal(expected) }) it('should find primary indexes') diff --git a/test/integration/github-issues/144/entity/Post.ts b/test/integration/github-issues/144/entity/Post.ts new file mode 100644 index 0000000..9a5d1c7 --- /dev/null +++ b/test/integration/github-issues/144/entity/Post.ts @@ -0,0 +1,22 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn, Index } from "typeorm"; +import { PostAuthor } from "./PostAuthor"; + +@Entity("Post", {database: "db1"}) +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column() + title: string; + + @Column() + text: string; + + // post has relation with details. not cascades here. means cannot be persisted, updated or removed + @OneToOne(type => PostAuthor, author => author.post) + @JoinColumn() + // @Index({ unique: true }) + author: PostAuthor; + +} diff --git a/test/integration/github-issues/144/entity/PostAuthor.ts b/test/integration/github-issues/144/entity/PostAuthor.ts new file mode 100644 index 0000000..6acec97 --- /dev/null +++ b/test/integration/github-issues/144/entity/PostAuthor.ts @@ -0,0 +1,16 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn } from "typeorm"; +import { Post } from "./Post"; + +@Entity("PostAuthor", {database: "db2"}) +export class PostAuthor { + + @PrimaryGeneratedColumn() + id: number; + + @Column() + name: string; + + @OneToOne(type => Post, post => post.author) + post: Post; + +} diff --git a/test/integration/runTestsFromPath.test.ts b/test/integration/runTestsFromPath.test.ts index c384725..14e36fa 100644 --- a/test/integration/runTestsFromPath.test.ts +++ b/test/integration/runTestsFromPath.test.ts @@ -9,6 +9,9 @@ import * as ts from "typescript"; import * as GTU from "../utils/GeneralTestUtils" import chaiSubset = require('chai-subset'); import chai = require('chai'); +import { IConnectionOptions } from "../../src/IConnectionOptions"; +import yn = require("yn"); +import { EntityInfo } from "../../src/models/EntityInfo"; chai.use(chaiSubset); @@ -63,7 +66,17 @@ function runTestForMultipleDrivers(testName: string, dbDrivers: string[], testPa const driversToRun = selectDriversForSpecyficTest(); const modelGenerationPromises = driversToRun.map(async (dbDriver) => { const { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS } = await prepareTestRuns(testPartialPath, testName, dbDriver); - let dbModel = await dataCollectionPhase(driver, connectionOptions); + let dbModel: EntityInfo[] = []; + switch (testName) { + case '144': + dbModel = await dataCollectionPhase(driver, Object.assign(connectionOptions, { databaseName: 'db1,db2' })); + break; + + default: + dbModel = await dataCollectionPhase(driver, connectionOptions); + break; + } + dbModel = modelCustomizationPhase(dbModel, generationOptions, driver.defaultValues); modelGenerationPhase(connectionOptions, generationOptions, dbModel); const filesGenPath = path.resolve(resultsPath, 'entities'); @@ -78,6 +91,8 @@ function runTestForMultipleDrivers(testName: string, dbDrivers: string[], testPa switch (testName) { case '39': return dbDrivers.filter(dbDriver => !['mysql', 'mariadb', 'oracle', 'sqlite'].includes(dbDriver)) + case '144': + return dbDrivers.filter(dbDriver => ['mysql', 'mariadb'].includes(dbDriver)) default: return dbDrivers; } @@ -115,8 +130,11 @@ function compareGeneratedFiles(filesOrgPathTS: string, filesGenPath: string) { function compileGeneratedModel(filesGenPath: string, drivers: string[]) { let currentDirectoryFiles: string[] = []; drivers.forEach(driver => { - currentDirectoryFiles.push(...fs.readdirSync(path.resolve(filesGenPath, driver, "entities")). + const entitiesPath = path.resolve(filesGenPath, driver, "entities"); + if (fs.existsSync(entitiesPath)){ + currentDirectoryFiles.push(...fs.readdirSync(entitiesPath). filter(fileName => fileName.length >= 3 && fileName.substr(fileName.length - 3, 3) === ".ts").map(v => path.resolve(filesGenPath, driver, "entities", v))); + } }); const compileErrors = GTU.compileTsFiles(currentDirectoryFiles, { experimentalDecorators: true, @@ -135,7 +153,6 @@ async function prepareTestRuns(testPartialPath: string, testName: string, dbDriv const resultsPath = path.resolve(process.cwd(), `output`, dbDriver); fs.removeSync(resultsPath); const driver = createDriver(dbDriver); - const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); const generationOptions = GTU.getGenerationOptions(resultsPath); switch (testName) { case '65': @@ -144,9 +161,52 @@ async function prepareTestRuns(testPartialPath: string, testName: string, dbDriv case 'sample18-lazy-relations': generationOptions.lazy = true; break; + case '144': + + let connectionOptions: IConnectionOptions; + switch (dbDriver) { + case 'mysql': + connectionOptions = { + host: String(process.env.MYSQL_Host), + port: Number(process.env.MYSQL_Port), + databaseName: String(process.env.MYSQL_Database), + user: String(process.env.MYSQL_Username), + password: String(process.env.MYSQL_Password), + databaseType: 'mysql', + schemaName: 'ignored', + ssl: yn(process.env.MYSQL_SSL), + } + break; + case 'mariadb': + connectionOptions = { + host: String(process.env.MARIADB_Host), + port: Number(process.env.MARIADB_Port), + databaseName: String(process.env.MARIADB_Database), + user: String(process.env.MARIADB_Username), + password: String(process.env.MARIADB_Password), + databaseType: 'mariadb', + schemaName: 'ignored', + ssl: yn(process.env.MARIADB_SSL), + } + break; + + default: + break; + } + + await driver.ConnectToServer(connectionOptions!); + if (! await driver.CheckIfDBExists('db1')) { + var x = await driver.CreateDB('db1') + } + if (! await driver.CheckIfDBExists('db2')) { + var t = await driver.CreateDB('db2') + } + await driver.DisconnectFromServer(); + break; default: break; } + const connectionOptions = await GTU.createModelsInDb(dbDriver, filesOrgPathJS); return { generationOptions, driver, connectionOptions, resultsPath, filesOrgPathTS }; } From f8e39c33041b166c8c2fc29f7425b4eea4352d56 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 9 Mar 2019 22:22:07 +0100 Subject: [PATCH 123/130] more fixes on mysql8 --- CHANGELOG.md | 1 + src/drivers/MysqlDriver.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53181a8..2671690 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ * added option to generate models based on multiple databases(#144) * fixed generation of ManyToMany relations on junction tables with custom names(#151) +* fixed problems with mysql 8 ## 0.3.1 * Fixed npx ussage(#146) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 62c71ea..6623b21 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -181,6 +181,8 @@ export class MysqlDriver extends AbstractDriver { colInfo.tsType = "string"; break; case "geometrycollection": + case "geomcollection": + colInfo.options.type = "geometrycollection"; colInfo.tsType = "string"; break; default: From a6648882c1953f475ee64a02e780d60789561845 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Mon, 11 Mar 2019 19:47:35 +0100 Subject: [PATCH 124/130] changes in travis build script --- .travis.yml | 2 ++ package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 928ca73..3703088 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,5 +45,7 @@ before_script: - sleep 60 test: - travis_retry npm t +after_success: +- codecov --file=./coverage/coverage.json dd: secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= diff --git a/package.json b/package.json index 65ba42a..05d8bbf 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "start": " node ./dist/src/index.js", "compile": "npm run clean && tsc", "test": "istanbul cover ./node_modules/mocha/bin/_mocha dist/test/**/*.test.js -- -R spec --bail", - "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/lcov.info -t lcovonly && remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage.json && codecov --file=./coverage/coverage.json ", + "posttest": "remap-istanbul -i ./coverage/coverage.json -o ./coverage/lcov.info -t lcovonly && remap-istanbul -i ./coverage/coverage.json -o ./coverage/coverage.json", "clean": "rimraf dist coverage output", "prettier": "prettier --write ./src/*.ts ./src/**/*.ts", "prepack": "npm run compile" From abf666d0e7c3f7a2e42b6734a5a66f4103f46d36 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 12 Mar 2019 22:01:11 +0100 Subject: [PATCH 125/130] fixed shadowed variables tslint errors closes #141 --- src/Engine.ts | 3 +++ src/entity.mst | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Engine.ts b/src/Engine.ts index a9b08c3..48655a8 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -278,6 +278,9 @@ function createHandlebarsHelpers(generationOptions: IGenerationOptions) { return retStr; }); Handlebars.registerHelper("toLowerCase", str => str.toLowerCase()); + Handlebars.registerHelper("tolowerCaseFirst", str => + changeCase.lowerCaseFirst(str) + ); Handlebars.registerHelper("toLazy", str => { if (generationOptions.lazy) { return `Promise<${str}>`; diff --git a/src/entity.mst b/src/entity.mst index 3dc4226..b9b0a2d 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -25,7 +25,7 @@ import {BaseEntity,Column,Entity,Index,JoinColumn,JoinTable,ManyToMany,ManyToOne }){{/options}} {{printPropertyVisibility}}{{toPropertyName tsName}}:{{tsType}}{{#options/nullable}} | null{{/options/nullable}}; {{/relations}}{{#relations}} - @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toEntityName relatedTable}}=>{{toEntityName relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../options/primary}}primary:true,{{/../options/primary}}{{^../options/nullable}} nullable:false,{{/../options/nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} + @{{relationType}}(type=>{{toEntityName relatedTable}}, {{tolowerCaseFirst relatedTable}}=>{{tolowerCaseFirst relatedTable}}.{{#if isOwner}}{{toPropertyName ownerColumn}},{ {{#../options/primary}}primary:true,{{/../options/primary}}{{^../options/nullable}} nullable:false,{{/../options/nullable}}{{#actionOnDelete}}onDelete: '{{.}}',{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{else}}{{toPropertyName relatedColumn}}{{#if (or actionOnDelete actionOnUpdate ) }}{{#actionOnDelete}},{ onDelete: '{{.}}' ,{{/actionOnDelete}}{{#actionOnUpdate}}onUpdate: '{{.}}'{{/actionOnUpdate}} }{{/if}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable({ name:'{{ ../options/name}}'}){{else}}@JoinColumn({ name:'{{ ../options/name}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) "[]")}}; {{else}}{{printPropertyVisibility}}{{toPropertyName ../tsName}}:{{toLazy (concat (toEntityName relatedTable) ' | null')}}; From 727fe0b5d195a7ccf033811d56d78c06ae9f9c57 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 12 Mar 2019 22:25:39 +0100 Subject: [PATCH 126/130] fixing TravisCI test command --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3703088..1bd5c98 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,7 @@ before_script: - npm link typescript - tsc - sleep 60 -test: +script: - travis_retry npm t after_success: - codecov --file=./coverage/coverage.json From 45dd1b002142601a468e47d874ad3103e8fda75c Mon Sep 17 00:00:00 2001 From: Kononnable Date: Fri, 15 Mar 2019 12:01:18 +0100 Subject: [PATCH 127/130] changelog change --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2671690..d35d2b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ * added option to generate models based on multiple databases(#144) * fixed generation of ManyToMany relations on junction tables with custom names(#151) * fixed problems with mysql 8 +* fixed shadowed variables tslint errors( #141) ## 0.3.1 * Fixed npx ussage(#146) From 87690d05479dccd3c4df0c27082b391b51fbd8ac Mon Sep 17 00:00:00 2001 From: Kononnable Date: Fri, 15 Mar 2019 12:33:45 +0100 Subject: [PATCH 128/130] fixed generated columns order --- CHANGELOG.md | 1 + src/Engine.ts | 4 ---- src/drivers/MssqlDriver.ts | 6 ++++-- src/drivers/MysqlDriver.ts | 3 ++- src/drivers/PostgresDriver.ts | 5 +++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d35d2b7..6308542 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * fixed generation of ManyToMany relations on junction tables with custom names(#151) * fixed problems with mysql 8 * fixed shadowed variables tslint errors( #141) +* fixed generated columns order ## 0.3.1 * Fixed npx ussage(#146) diff --git a/src/Engine.ts b/src/Engine.ts index 48655a8..10515bd 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -102,7 +102,6 @@ function removeColumnDefaultProperties( column.options.length === defVal.length ) { column.options.length = undefined; - // console.log(`Default length for ${column.options.type}`) } if ( column.options.precision && @@ -110,7 +109,6 @@ function removeColumnDefaultProperties( column.options.precision === defVal.precision ) { column.options.precision = undefined; - // console.log(`Default precision for ${column.options.type}`) } if ( column.options.scale && @@ -118,7 +116,6 @@ function removeColumnDefaultProperties( column.options.scale === defVal.scale ) { column.options.scale = undefined; - // console.log(`Default scale for ${column.options.type}`) } if ( column.options.width && @@ -126,7 +123,6 @@ function removeColumnDefaultProperties( column.options.width === defVal.width ) { column.options.width = undefined; - // console.log(`Default width for ${column.options.type}`) } } }); diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 9de7ee4..447ef30 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -61,9 +61,11 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG and tc.TABLE_NAME = c.TABLE_NAME and cu.COLUMN_NAME = c.COLUMN_NAME and tc.TABLE_SCHEMA=c.TABLE_SCHEMA) IsUnique - FROM INFORMATION_SCHEMA.COLUMNS c where TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG in (${this.escapeCommaSeparatedList( + FROM INFORMATION_SCHEMA.COLUMNS c + where TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG in (${this.escapeCommaSeparatedList( dbNames - )})`)).recordset; + )}) + order by ordinal_position`)).recordset; entities.forEach(ent => { response .filter(filterVal => { diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 6623b21..f5623fc 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -53,7 +53,8 @@ export class MysqlDriver extends AbstractDriver { CASE WHEN EXTRA like '%auto_increment%' THEN 1 ELSE 0 END IsIdentity, COLUMN_TYPE, COLUMN_KEY FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA IN (${this.escapeCommaSeparatedList( dbNames - )})`); + )}) + order by ordinal_position`); entities.forEach(ent => { response .filter(filterVal => filterVal.TABLE_NAME === ent.tsEntityName) diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 79b39a3..f6a9cff 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -58,8 +58,9 @@ export class PostgresDriver extends AbstractDriver { and tc.TABLE_NAME = c.TABLE_NAME and cu.COLUMN_NAME = c.COLUMN_NAME and tc.TABLE_SCHEMA=c.TABLE_SCHEMA) IsUnique - FROM INFORMATION_SCHEMA.COLUMNS c where table_schema in (${schema})`)) - .rows; + FROM INFORMATION_SCHEMA.COLUMNS c + where table_schema in (${schema}) + order by ordinal_position`)).rows; entities.forEach(ent => { response .filter(filterVal => filterVal.table_name === ent.tsEntityName) From 672a08b4dd3e32fe7aa51d8d81a295cd21a12627 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Fri, 15 Mar 2019 13:28:24 +0100 Subject: [PATCH 129/130] mariadb default value comatibility changes closes #153 --- CHANGELOG.md | 5 +++-- src/drivers/MysqlDriver.ts | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6308542..240b438 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,9 @@ * added option to generate models based on multiple databases(#144) * fixed generation of ManyToMany relations on junction tables with custom names(#151) * fixed problems with mysql 8 -* fixed shadowed variables tslint errors( #141) -* fixed generated columns order +* fixed shadowed variables tslint errors(#141) +* fixed order of generated columns +* mariadb default value comatibility changes(#153) ## 0.3.1 * Fixed npx ussage(#146) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index f5623fc..6b4c246 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -428,9 +428,12 @@ export class MysqlDriver extends AbstractDriver { return ret; } private ReturnDefaultValueFunction(defVal: string | null): string | null { - if (!defVal) { + if (!defVal || defVal === "NULL") { return null; } + if (defVal.toLowerCase() === "current_timestamp()") { + defVal = "CURRENT_TIMESTAMP"; + } if (defVal === "CURRENT_TIMESTAMP" || defVal.startsWith(`'`)) { return `() => "${defVal}"`; } From 13a638d12bcf26ff11e9201e99a42002a7272f1a Mon Sep 17 00:00:00 2001 From: Kononnable Date: Fri, 15 Mar 2019 13:30:15 +0100 Subject: [PATCH 130/130] 0.3.2 --- CHANGELOG.md | 1 + package-lock.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 240b438..dd959bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Changelog +## 0.3.2 * added option to generate models based on multiple databases(#144) * fixed generation of ManyToMany relations on junction tables with custom names(#151) * fixed problems with mysql 8 diff --git a/package-lock.json b/package-lock.json index 4eea352..6169ba2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.3.1", + "version": "0.3.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 05d8bbf..052a141 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.3.1", + "version": "0.3.2", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "scripts": {