From 54fc6317d5701dd3fe78fa8edd5fd9b80b33682c Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 8 Oct 2017 21:48:21 +0200 Subject: [PATCH] basic support for typeorm 0.1.0-alpha.50; package updates --- .travis.yml | 4 +- docker-compose.yml | 22 +- package-lock.json | 1158 +++++++++++------ package.json | 48 +- src/drivers/MariaDbDriver.ts | 17 +- src/drivers/MssqlDriver.ts | 37 +- src/drivers/MysqlDriver.ts | 17 +- src/drivers/PostgresDriver.ts | 11 +- src/models/ColumnInfo.ts | 4 +- test/drivers/MssqlDriver.test.ts | 30 +- .../sample1-simple-entity/entity/Post.ts | 4 +- .../entity/EverythingEntity.ts | 22 +- test/integration/integration.test.ts | 141 +- test/utils/EntityFileToJson.ts | 14 + 14 files changed, 965 insertions(+), 564 deletions(-) diff --git a/.travis.yml b/.travis.yml index a27d303..e0ae6f2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ services: - docker env: - - MSSQL_Skip=1 MSSQL_Host=localhost MSSQL_Port=1433 MSSQL_Username=sa MSSQL_Password=!Passw0rd MSSQL_Database=typeorm_mg POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres POSTGRES_Password=!Passw0rd POSTGRES_Database=typeorm_mg MYSQL_Skip=0 MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=!Passw0rd MYSQL_Database=typeorm_mg MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 MARIADB_Username=root MARIADB_Password=!Passw0rd MARIADB_Database=typeorm_mg + - MSSQL_Skip=0 MSSQL_Host=localhost MSSQL_Port=1433 MSSQL_Username=sa MSSQL_Password=!Passw0rd MSSQL_Database=typeorm_mg POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres POSTGRES_Password=!Passw0rd POSTGRES_Database=typeorm_mg MYSQL_Skip=0 MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=!Passw0rd MYSQL_Database=typeorm_mg MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 MARIADB_Username=root MARIADB_Password=!Passw0rd MARIADB_Database=typeorm_mg before_install: - sudo service mysql stop @@ -25,4 +25,4 @@ before_script: - npm run typings-install - npm link typescript - tsc -# - sleep 20s + - sleep 30s diff --git a/docker-compose.yml b/docker-compose.yml index be52c50..3b01f87 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: # mysql mysql: - image: "mysql:5.7.10" + image: "mysql:5.7.19" container_name: "typeorm-mysql" ports: - "3306:3306" @@ -12,7 +12,7 @@ services: # mariadb mariadb: - image: "mariadb:10.1.16" + image: "mariadb:10.2.9" container_name: "typeorm-mariadb" ports: - "3307:3306" @@ -21,7 +21,7 @@ services: # postgres postgres: - image: "postgres:9.6.1" + image: "postgres:10.0" container_name: "typeorm-postgres" ports: - "5432:5432" @@ -29,11 +29,11 @@ services: POSTGRES_PASSWORD: "!Passw0rd" # mssql - # mssql: - # image: "microsoft/mssql-server-linux:ctp2-1" - # container_name: "typeorm-mssql" - # ports: - # - "1433:1433" - # environment: - # ACCEPT_EULA: "Y" - # SA_PASSWORD: "!Passw0rd" \ No newline at end of file + mssql: + image: "microsoft/mssql-server-linux:2017-GA" + container_name: "typeorm-mssql" + ports: + - "1433:1433" + environment: + ACCEPT_EULA: "Y" + SA_PASSWORD: "!Passw0rd" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b3c8a70..02843c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,78 +5,81 @@ "requires": true, "dependencies": { "@types/chai": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-3.5.2.tgz", - "integrity": "sha1-wRzSgX06QBt7oPWkIPNcVhObHB4=", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.4.tgz", + "integrity": "sha512-cvU0HomQ7/aGDQJZsbtJXqBQ7w4J4TqLB0Z/h8mKrpRjfeZEvTbygkfJEb7fWdmwpIeDeFmIVwAEqS0OYuUv3Q==", "dev": true }, "@types/chai-as-promised": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-0.0.30.tgz", - "integrity": "sha1-I0EyHMeWxsNUSpSaBj52CaIi8wM=", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz", + "integrity": "sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==", "dev": true, "requires": { - "@types/chai": "3.5.2" + "@types/chai": "4.0.4" } }, "@types/chai-subset": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.0.tgz", - "integrity": "sha1-dM7M7zsvwtpzkbcT3rcv6afl94I=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz", + "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==", "dev": true, "requires": { - "@types/chai": "3.5.2" + "@types/chai": "4.0.4" } }, "@types/fs-extra": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.3.tgz", - "integrity": "sha512-o2qkg/J2LWK+sr007+KFBBOrxzxpr9kiP0gMFC75gQJXhUn/E3pQA0kSVdxrQ3lf+rOwsRnuH0wnR5MNTotEKg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha512-Id1hnmfd+7G9K+jWz2syfMcpymx2mj6B1y4C72vAoYQzxOA79UhY/kNvOCyb9yYR1SoSaHyhwcYtWKKqUiLTZA==", "dev": true, "requires": { - "@types/node": "7.0.39" + "@types/node": "8.0.33" } }, "@types/handlebars": { - "version": "4.0.33", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.33.tgz", - "integrity": "sha512-39w19Mseg83z68JsIdcuFH3Z+BR/Jc3gRBB4Pn/aUm76rdy0prMz5iIMJAOb0Bo6H/rZhQc41vFf3tAMgqufVQ==", + "version": "4.0.36", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.36.tgz", + "integrity": "sha512-LjNiTX7TY7wtuC6y3QwC93hKMuqYhgV9A1uXBKNvZtVC8ZvyWAjZkJ5BvT0K7RKqORRYRLMrqCxpw5RgS+MdrQ==", "dev": true }, "@types/mocha": { - "version": "2.2.41", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.41.tgz", - "integrity": "sha1-4nzwgXFT658nE7LT9saPHhw8pgg=", + "version": "2.2.43", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.43.tgz", + "integrity": "sha512-xNlAmH+lRJdUMXClMTI9Y0pRqIojdxfm7DHsIxoB2iTzu3fnPmSMEN8SsSx0cdwV36d02PWCWaDUoZPDSln+xw==", "dev": true }, "@types/mssql": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-3.3.1.tgz", - "integrity": "sha1-DAlm4jnCOP5Rzldt7unqGBFmU/Y=", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-4.0.6.tgz", + "integrity": "sha512-59tGR0k2cygPsK1zxFi6zdCRHfriLWQ7Prsk+LMYXdkFq/4hw3KgcMIOlprGPz+mqIQr8LukV1GYPHK+PQ4EEw==", "dev": true, "requires": { - "@types/node": "7.0.39" + "@types/node": "8.0.33" } }, "@types/mysql": { "version": "0.0.34", "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-0.0.34.tgz", "integrity": "sha512-IocdMpYtCBSLJqSg0BGgZTbYf3K9iAq81a1sNw6FlgVYh3/2cOXR3LpuQS6o5avWAmNTJqC6u5gS+IRrY56+9Q==", + "dev": true, "requires": { - "@types/node": "7.0.39" + "@types/node": "8.0.33" } }, "@types/node": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.39.tgz", - "integrity": "sha512-KQHAZeVsk4UIT9XaR6cn4WpHZzimK6UBD1UomQKfQQFmTlUHaNBzeuov+TM4+kigLO0IJt4I5OOsshcCyA9gSA==" + "version": "8.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.33.tgz", + "integrity": "sha512-vmCdO8Bm1ExT+FWfC9sd9r4jwqM7o97gGy2WBshkkXbf/2nLAJQUrZfIhw27yVOtLUev6kSZc4cav/46KbDd8A==", + "dev": true }, "@types/pg": { "version": "6.1.41", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-6.1.41.tgz", "integrity": "sha512-iTzD3R2CY/aSybbZieXGXi3Wxrk7XV/jRU1lofH/hyQNCbTTskXB/fomFDv+XTVXKjqrpCB/AXVLnUwbdFqthQ==", + "dev": true, "requires": { - "@types/node": "7.0.39", + "@types/node": "8.0.33", "@types/pg-types": "1.11.2" } }, @@ -84,14 +87,15 @@ "version": "1.11.2", "resolved": "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.2.tgz", "integrity": "sha512-ZkLnKt6q9PhVhM3hA9if2HCu+NLSETvk7TeHXqlZxIE1O7HL2RDm2epBscwDh3pEzDpWoB+VlUYpz20R3Kqj7A==", + "dev": true, "requires": { "moment": "2.18.1" } }, "@types/sinon": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-2.3.1.tgz", - "integrity": "sha512-WXpK6gOice0sdhfrAtRaDNtg0E0e04MRuCKYuqtCmc8O1P9P+ia3Z5zuMf4cDVB27s9w4UjjML5/6vjkiI2gNA==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-2.3.5.tgz", + "integrity": "sha512-uqCU56xGg/eDCJDJKCC8kpGU4SZbIn+3dcHJOpLMtFo2HVhfNFJdJIsMY8G5jZZCfnyiECADrUcz4etptDq0rQ==", "dev": true }, "abbrev": { @@ -118,6 +122,16 @@ } } }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -179,8 +193,7 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "ap": { "version": "0.2.0", @@ -202,7 +215,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, "requires": { "sprintf-js": "1.0.3" } @@ -231,11 +243,6 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "asap": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", - "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=" - }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", @@ -278,11 +285,12 @@ "dev": true }, "babel-runtime": { - "version": "5.8.38", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz", - "integrity": "sha1-HAsC62MxL18If/IEUIJ7QlydTBk=", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "1.2.7" + "core-js": "2.5.1", + "regenerator-runtime": "0.11.0" } }, "balanced-match": { @@ -433,12 +441,6 @@ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", "dev": true }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -450,29 +452,49 @@ } }, "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { "assertion-error": "1.0.2", - "deep-eql": "0.1.3", - "type-detect": "1.0.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.3" + }, + "dependencies": { + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.3" + } + }, + "type-detect": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", + "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", + "dev": true + } } }, "chai-as-promised": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-6.0.0.tgz", - "integrity": "sha1-GgKkM6byTa+sY7nJb6FoTbGqjaY=", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, "requires": { "check-error": "1.0.2" } }, "chai-subset": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/chai-subset/-/chai-subset-1.5.0.tgz", - "integrity": "sha1-0D28+oydqthIZDu95OYzdreIJCc=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/chai-subset/-/chai-subset-1.6.0.tgz", + "integrity": "sha1-pdDKFOMpp5WW7XAFi2ZGvWmIz+k=", "dev": true }, "chalk": { @@ -508,6 +530,70 @@ "restore-cursor": "1.0.1" } }, + "cli-highlight": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-1.1.4.tgz", + "integrity": "sha1-5FWQwU+xjhOGXjiZ6CTFWSzCKSY=", + "requires": { + "chalk": "1.1.3", + "he": "1.1.1", + "highlight.js": "9.12.0", + "mz": "2.7.0", + "yargs": "4.8.1" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "lodash.assign": "4.2.0", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" + } + } + } + }, "cli-truncate": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.0.0.tgz", @@ -567,22 +653,104 @@ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "codecov": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-2.2.0.tgz", - "integrity": "sha1-LQaBfOuIkeymNog21Ptr9swE/9E=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-2.3.0.tgz", + "integrity": "sha1-rSWixuBELRN0DZ1N27mj4nFDMPQ=", "dev": true, "requires": { "argv": "0.0.2", - "request": "2.79.0", + "request": "2.81.0", "urlgrey": "0.4.4" + }, + "dependencies": { + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.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.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "tunnel-agent": { + "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" + } + } } }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "columnify": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", @@ -602,15 +770,6 @@ "delayed-stream": "1.0.0" } }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -642,9 +801,9 @@ } }, "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" }, "core-util-is": { "version": "1.0.2", @@ -660,6 +819,16 @@ "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.1.1", + "shebang-command": "1.2.0", + "which": "1.2.14" + } + }, "cross-spawn-async": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", @@ -735,23 +904,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - } - } - }, "deep-extend": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", @@ -803,8 +955,7 @@ "dotenv": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", - "dev": true + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" }, "duplexer2": { "version": "0.0.2", @@ -1016,14 +1167,25 @@ } }, "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", "dev": true, "requires": { "graceful-fs": "4.1.11", - "jsonfile": "3.0.0", + "jsonfile": "4.0.0", "universalify": "0.1.0" + }, + "dependencies": { + "jsonfile": { + "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.11" + } + } } }, "fs.realpath": { @@ -1037,31 +1199,22 @@ "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", "dev": true }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, "generic-pool": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.5.4.tgz", - "integrity": "sha1-OMYYhRPhQDCUjsblz2VSPZd5KZs=" + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.1.8.tgz", + "integrity": "sha1-CYRLZUW8kXfsIYvTXUrYlMZb4nE=" }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -1071,8 +1224,7 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "getpass": { "version": "0.1.7", @@ -1137,18 +1289,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, "gulp-util": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", @@ -1203,17 +1343,11 @@ "uglify-js": "2.8.29" } }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.9.0", - "is-my-json-valid": "2.16.0", - "pinkie-promise": "2.0.1" - } + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true }, "has": { "version": "1.0.1", @@ -1265,6 +1399,16 @@ "sntp": "1.0.9" } }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "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": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", @@ -1310,9 +1454,9 @@ } }, "iconv-lite": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", - "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==" + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "import-lazy": { "version": "2.1.0", @@ -1414,18 +1558,6 @@ "number-is-nan": "1.0.1" } }, - "is-my-json-valid": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", - "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -1444,12 +1576,6 @@ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -1474,8 +1600,7 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-typedarray": { "version": "1.0.0", @@ -1511,8 +1636,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "2.1.0", @@ -1591,7 +1715,6 @@ "version": "3.8.4", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", - "dev": true, "requires": { "argparse": "1.0.9", "esprima": "3.1.3" @@ -1600,8 +1723,7 @@ "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" } } }, @@ -1618,31 +1740,25 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, + "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", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "jsonfile": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", - "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, "jspm-config": { @@ -1690,6 +1806,12 @@ } } }, + "just-extend": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.22.tgz", + "integrity": "sha1-MzCvdWyralQnAMZLLk5KoGLVL/8=", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -1749,34 +1871,34 @@ "strip-bom": "2.0.0" } }, + "locate-path": { + "version": "2.0.0", + "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" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, "lockfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.3.tgz", "integrity": "sha1-Jjj8OaAzHpysGgS3F5mTHJxQ33k=", "dev": true }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, "lodash._basecopy": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", "dev": true }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", - "dev": true - }, "lodash._basetostring": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", @@ -1825,16 +1947,10 @@ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", "dev": true }, - "lodash.create": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._basecreate": "3.0.3", - "lodash._isiterateecall": "3.0.9" - } + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" }, "lodash.escape": { "version": "3.2.0", @@ -1845,6 +1961,12 @@ "lodash._root": "3.0.1" } }, + "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", @@ -1951,7 +2073,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" @@ -1987,6 +2108,14 @@ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "1.1.0" + } + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -2034,6 +2163,11 @@ "mime-db": "1.27.0" } }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -2051,7 +2185,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -2059,51 +2192,74 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, "mocha": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", - "integrity": "sha1-0O9NMyEm2/GNDWQMmzgt1IvpdZQ=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", + "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", "dev": true, "requires": { "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.6.0", - "diff": "3.2.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", "escape-string-regexp": "1.0.5", - "glob": "7.1.1", - "growl": "1.9.2", - "json3": "3.3.2", - "lodash.create": "3.1.1", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", "mkdirp": "0.5.1", - "supports-color": "3.1.2" + "supports-color": "4.4.0" }, "dependencies": { - "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "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", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "ms": "2.0.0" } }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "2.0.0" } } } @@ -2111,7 +2267,8 @@ "moment": { "version": "2.18.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" + "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", + "dev": true }, "ms": { "version": "0.7.2", @@ -2120,13 +2277,28 @@ "dev": true }, "mssql": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/mssql/-/mssql-3.3.0.tgz", - "integrity": "sha1-tuYzf/Ej6Hv4ruHmyDRLU8pdqFY=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.1.0.tgz", + "integrity": "sha512-ekht0eILEV0P1CbpkwpAxhgO+/5goYizUJrt7pgDm3fP6lGKe0+8V9jhTvQZ8DPHkycSd0wYGUoz/YA7VN7kQQ==", "requires": { - "generic-pool": "2.5.4", - "promise": "7.1.1", - "tedious": "1.14.0" + "debug": "2.6.9", + "generic-pool": "3.1.8", + "tedious": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "multipipe": { @@ -2178,12 +2350,42 @@ } } }, + "mz": { + "version": "2.7.0", + "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" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } + } + }, "native-promise-only": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", "dev": true }, + "nise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.1.1.tgz", + "integrity": "sha512-f5DMJB0MqBaSuP2NAwPx7HyVKPdaozds0KsNe9XIP3npKWt/QUg73l5TTLRTSwfG/Y3AB0ktacuxX4QNcg6vVw==", + "dev": true, + "requires": { + "formatio": "1.2.0", + "just-extend": "1.1.22", + "lolex": "1.6.0", + "path-to-regexp": "1.7.0", + "text-encoding": "0.6.4" + } + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -2292,6 +2494,24 @@ "lcid": "1.0.0" } }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=" + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "1.1.0" + } + }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", @@ -2368,6 +2588,18 @@ "pinkie-promise": "2.0.1" } }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, "pg": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/pg/-/pg-6.4.0.tgz", @@ -2537,14 +2769,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, - "promise": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", - "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=", - "requires": { - "asap": "2.0.5" - } - }, "promise-finally": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/promise-finally/-/promise-finally-3.0.0.tgz", @@ -2554,8 +2778,7 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "punycode": { "version": "1.4.1", @@ -2563,12 +2786,6 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, "rc": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", @@ -2637,6 +2854,11 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz", "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo=" }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + }, "registry-auth-token": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", @@ -2698,34 +2920,6 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3", - "uuid": "3.0.1" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2781,6 +2975,11 @@ "integrity": "sha1-7dOQk6MYQ3DLhZJDsr3yVefY6mc=", "dev": true }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", @@ -2800,28 +2999,48 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "shebang-command": { + "version": "1.2.0", + "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": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sinon": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.3.4.tgz", - "integrity": "sha1-RmrY0brobW21GqIYuS6Ze8Pl24g=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.0.1.tgz", + "integrity": "sha512-4qIY0pCWCvGCJpV/1JkFu9kbsNEZ9O34cG1oru/c7OCDtrEs50Gq/VjkA2ID5ZwLyoNx1i1ws118oh/p6fVeDg==", "dev": true, "requires": { "diff": "3.2.0", "formatio": "1.2.0", - "lolex": "1.6.0", + "lodash.get": "4.4.2", + "lolex": "2.1.3", "native-promise-only": "0.8.1", + "nise": "1.1.1", "path-to-regexp": "1.7.0", "samsam": "1.2.1", "text-encoding": "0.6.4", "type-detect": "4.0.3" }, "dependencies": { + "lolex": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.1.3.tgz", + "integrity": "sha512-BdHq78SeI+6PAUtl4atDuCt7L6E4fab3mSRtqxm4ywaXe4uP7jZ0TTcFNuU20syUjxZc2l7jFqKVMJ+AX0LnpQ==", + "dev": true + }, "type-detect": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", @@ -2831,9 +3050,9 @@ } }, "sinon-chai": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.11.0.tgz", - "integrity": "sha512-3kbzpr2q8N+M4CWkcym349ifwkXorsbw2YyVpEIvB3AKC/ebrLHXj3DySt8epKGA49zJBSgn1OvWHZ+O+aR0dA==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", + "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==", "dev": true }, "slice-ansi": { @@ -2914,8 +3133,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlstring": { "version": "2.2.0", @@ -2946,14 +3164,6 @@ } } }, - "string_decoder": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", - "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "requires": { - "safe-buffer": "5.0.1" - } - }, "string-template": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", @@ -2970,6 +3180,14 @@ "strip-ansi": "3.0.1" } }, + "string_decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", + "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "requires": { + "safe-buffer": "5.0.1" + } + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", @@ -2995,8 +3213,7 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-indent": { "version": "1.0.1", @@ -3019,16 +3236,15 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "tedious": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-1.14.0.tgz", - "integrity": "sha1-wFwwO4Zoz5HlWmSTt0SGavYZh94=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.0.0.tgz", + "integrity": "sha1-J2XpyGhPYmMdheaogFXruC3I9X0=", "requires": { - "babel-runtime": "5.8.38", + "babel-runtime": "6.26.0", "big-number": "0.3.1", "bl": "1.2.1", - "iconv-lite": "0.4.18", + "iconv-lite": "0.4.19", "readable-stream": "2.2.11", - "semver": "5.3.0", "sprintf": "0.1.5" } }, @@ -3051,11 +3267,18 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "dev": true, "requires": { "any-promise": "1.3.0" } }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": "3.3.0" + } + }, "throat": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", @@ -3146,12 +3369,6 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -3168,12 +3385,6 @@ "prelude-ls": "1.1.2" } }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", - "dev": true - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -3181,58 +3392,60 @@ "dev": true }, "typeorm": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.0.10.tgz", - "integrity": "sha1-5C2CHjypwEXj6mnUE2vnoDk7Gj8=", + "version": "0.1.0-alpha.50", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.1.0-alpha.50.tgz", + "integrity": "sha512-A3P//oADi6BRAXk3Szznm6fvCT+Yc+zr9y1FTPIq0fHSpb3cu+gihrE3imxzX/wBIzwSBFdqfj1kuosrlMsp3Q==", "requires": { "app-root-path": "2.0.1", + "chalk": "2.1.0", + "cli-highlight": "1.1.4", + "dotenv": "4.0.0", "glob": "7.1.2", + "js-yaml": "3.8.4", + "mkdirp": "0.5.1", "reflect-metadata": "0.1.10", + "xml2js": "0.4.19", "yargonaut": "1.1.2", - "yargs": "6.6.0" + "yargs": "9.0.1" }, "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "cliui": { + "ansi-styles": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "color-convert": "1.9.0" } }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "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==", + "requires": { + "has-flag": "2.0.0" } } } }, "typescript": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.0.tgz", - "integrity": "sha1-rvWo1AS+ujatM5q/B53d3/+6ht0=" + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz", + "integrity": "sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==" }, "typings": { "version": "2.1.1", @@ -3306,7 +3519,7 @@ "thenify": "3.3.0", "throat": "3.2.0", "touch": "1.0.0", - "typescript": "2.4.0", + "typescript": "2.5.3", "xtend": "4.0.1", "zip-object": "0.1.0" }, @@ -3467,7 +3680,6 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, "requires": { "isexe": "2.0.0" } @@ -3528,6 +3740,20 @@ "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": "1.2.4", + "xmlbuilder": "9.0.4" + } + }, + "xmlbuilder": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", + "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -3541,8 +3767,7 @@ "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargonaut": { "version": "1.1.2", @@ -3555,29 +3780,34 @@ } }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", "requires": { - "camelcase": "3.0.0", + "camelcase": "4.1.0", "cliui": "3.2.0", "decamelize": "1.2.0", "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "yargs-parser": "7.0.0" }, "dependencies": { - "camelcase": { + "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "cliui": { "version": "3.2.0", @@ -3587,30 +3817,144 @@ "string-width": "1.0.2", "strip-ansi": "3.0.1", "wrap-ansi": "2.1.0" + }, + "dependencies": { + "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.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "camelcase": "3.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" } - } - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "2.0.1" + } + }, + "os-locale": { + "version": "2.1.0", + "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" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "2.3.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.3.8", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "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" + }, + "dependencies": { + "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=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "4.1.0" + } } } }, diff --git a/package.json b/package.json index 5ca9dbd..028053d 100644 --- a/package.json +++ b/package.json @@ -24,38 +24,38 @@ }, "homepage": "https://github.com/Kononnable/typeorm-model-generator#readme", "dependencies": { - "@types/mysql": "0.0.34", - "@types/pg": "^6.1.41", "handlebars": "^4.0.10", - "mssql": "^3.3.0", + "mssql": "^4.0.4", "mysql": "^2.14.1", "pg": "^6.4.0", "reflect-metadata": "^0.1.10", - "typeorm": "0.0.10", - "typescript": "^2.4.0", - "yargs": "^7.0.2" + "typeorm": "^0.1.0-alpha.50", + "typescript": "^2.5.3", + "yargs": "^9.0.1" }, "devDependencies": { - "@types/chai": "^3.5.2", - "@types/chai-as-promised": "0.0.30", - "@types/chai-subset": "^1.3.0", - "@types/fs-extra": "^3.0.0", - "@types/handlebars": "^4.0.32", - "@types/mocha": "^2.2.41", - "@types/mssql": "^3.3.0", - "@types/node": "^7.0.39", - "@types/sinon": "^2.1.3", - "chai": "^3.5.0", - "chai-as-promised": "^6.0.0", - "chai-subset": "^1.5.0", - "codecov": "^2.1.0", + "@types/mysql": "0.0.34", + "@types/pg": "^6.1.41", + "@types/chai": "^4.0.4", + "@types/chai-as-promised": "7.1.0", + "@types/chai-subset": "^1.3.1", + "@types/fs-extra": "^4.0.2", + "@types/handlebars": "^4.0.36", + "@types/mocha": "^2.2.43", + "@types/mssql": "^4.0.4", + "@types/node": "^8.0.33", + "@types/sinon": "^2.3.5", + "chai": "^4.1.2", + "chai-as-promised": "^7.1.1", + "chai-subset": "^1.6.0", + "codecov": "^2.3.0", "dotenv": "^4.0.0", - "fs-extra": "^3.0.1", + "fs-extra": "^4.0.2", "istanbul": "^0.4.5", - "mocha": "^3.3.0", + "mocha": "^4.0.1", "remap-istanbul": "^0.9.5", - "sinon": "^2.2.0", - "sinon-chai": "^2.10.0", - "typings": "^2.1.0" + "sinon": "^4.0.1", + "sinon-chai": "^2.14.0", + "typings": "^2.1.1" } } diff --git a/src/drivers/MariaDbDriver.ts b/src/drivers/MariaDbDriver.ts index 14badc6..75ddcfa 100644 --- a/src/drivers/MariaDbDriver.ts +++ b/src/drivers/MariaDbDriver.ts @@ -59,6 +59,7 @@ export class MariaDbDriver extends AbstractDriver { case "int": colInfo.ts_type = "number" colInfo.sql_type = "int" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "tinyint": if (resp.NUMERIC_PRECISION == 3) { @@ -67,11 +68,13 @@ export class MariaDbDriver extends AbstractDriver { } else { colInfo.ts_type = "number" colInfo.sql_type = "smallint" - } + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; + } break; case "smallint": colInfo.ts_type = "number" colInfo.sql_type = "smallint" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "bit": colInfo.ts_type = "boolean" @@ -80,10 +83,12 @@ export class MariaDbDriver extends AbstractDriver { case "float": colInfo.ts_type = "number" colInfo.sql_type = "float" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "bigint": colInfo.ts_type = "number" colInfo.sql_type = "bigint" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "date": colInfo.ts_type = "Date" @@ -115,11 +120,13 @@ export class MariaDbDriver extends AbstractDriver { break; case "varchar": colInfo.ts_type = "string" - colInfo.sql_type = "string" + colInfo.sql_type = "varchar" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "nvarchar": colInfo.ts_type = "string" - colInfo.sql_type = "string" + colInfo.sql_type = "nvarchar" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "money": colInfo.ts_type = "number" @@ -128,16 +135,19 @@ export class MariaDbDriver extends AbstractDriver { case "real": colInfo.ts_type = "number" colInfo.sql_type = "double" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "double": colInfo.ts_type = "number" colInfo.sql_type = "double" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "decimal": colInfo.ts_type = "number" colInfo.sql_type = "decimal" colInfo.numericPrecision = resp.NUMERIC_PRECISION colInfo.numericScale = resp.NUMERIC_SCALE + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "xml": colInfo.ts_type = "string" @@ -147,7 +157,6 @@ export class MariaDbDriver extends AbstractDriver { console.error("Unknown column type:" + resp.DATA_TYPE); break; } - colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; if (colInfo.sql_type) ent.Columns.push(colInfo); }) }) diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index d67a41f..030dee6 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -24,7 +24,7 @@ export class MssqlDriver extends AbstractDriver { async GetAllTables(): Promise { let request = new MSSQL.Request(this.Connection) let response: { TABLE_SCHEMA: string, TABLE_NAME: string }[] - = await request.query("SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'"); + = (await request.query("SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'")).recordset; let ret: EntityInfo[] = []; response.forEach((val) => { let ent: EntityInfo = new EntityInfo(); @@ -42,9 +42,9 @@ export class MssqlDriver extends AbstractDriver { IS_NULLABLE: string, DATA_TYPE: string, CHARACTER_MAXIMUM_LENGTH: number, NUMERIC_PRECISION: number, NUMERIC_SCALE: number, IsIdentity: 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 FROM INFORMATION_SCHEMA.COLUMNS`); + COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') IsIdentity FROM INFORMATION_SCHEMA.COLUMNS`)).recordset; entities.forEach((ent) => { response.filter((filterVal) => { return filterVal.TABLE_NAME == ent.EntityName; @@ -58,14 +58,17 @@ export class MssqlDriver extends AbstractDriver { case "int": colInfo.ts_type = "number" colInfo.sql_type = "int" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "tinyint": colInfo.ts_type = "number" colInfo.sql_type = "smallint" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "smallint": colInfo.ts_type = "number" colInfo.sql_type = "smallint" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "bit": colInfo.ts_type = "boolean" @@ -74,10 +77,12 @@ export class MssqlDriver extends AbstractDriver { case "float": colInfo.ts_type = "number" colInfo.sql_type = "float" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "bigint": colInfo.ts_type = "number" colInfo.sql_type = "bigint" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "date": colInfo.ts_type = "Date" @@ -94,10 +99,12 @@ export class MssqlDriver extends AbstractDriver { case "char": colInfo.ts_type = "string" colInfo.sql_type = "text" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "nchar": colInfo.ts_type = "string" colInfo.sql_type = "text" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "text": colInfo.ts_type = "string" @@ -109,11 +116,13 @@ export class MssqlDriver extends AbstractDriver { break; case "varchar": colInfo.ts_type = "string" - colInfo.sql_type = "string" + colInfo.sql_type = "varchar" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "nvarchar": colInfo.ts_type = "string" - colInfo.sql_type = "string" + colInfo.sql_type = "nvarchar" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "money": colInfo.ts_type = "number" @@ -122,12 +131,14 @@ export class MssqlDriver extends AbstractDriver { case "real": colInfo.ts_type = "number" colInfo.sql_type = "double" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "decimal": colInfo.ts_type = "number" colInfo.sql_type = "decimal" colInfo.numericPrecision = resp.NUMERIC_PRECISION colInfo.numericScale = resp.NUMERIC_SCALE + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "xml": colInfo.ts_type = "string" @@ -137,7 +148,7 @@ export class MssqlDriver extends AbstractDriver { console.error("Unknown column type:" + resp.DATA_TYPE); break; } - colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; + if (colInfo.sql_type) ent.Columns.push(colInfo); }) }) @@ -149,7 +160,7 @@ export class MssqlDriver extends AbstractDriver { TableName: string, IndexName: string, ColumnName: string, is_unique: number, is_primary_key: number//, is_descending_key: number//, is_included_column: number }[] - = await request.query(`SELECT + = (await request.query(`SELECT TableName = t.name, IndexName = ind.name, ColumnName = col.name, @@ -168,7 +179,7 @@ INNER JOIN WHERE t.is_ms_shipped = 0 ORDER BY - t.name, ind.name, ind.index_id, ic.key_ordinal;`); + t.name, ind.name, ind.index_id, ic.key_ordinal;`)).recordset; entities.forEach((ent) => { response.filter((filterVal) => { return filterVal.TableName == ent.EntityName; @@ -206,7 +217,7 @@ ORDER BY onDelete: "RESTRICT" | "CASCADE" | "SET NULL", onUpdate: "RESTRICT" | "CASCADE" | "SET NULL", 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, @@ -230,7 +241,7 @@ inner join where fk.is_disabled=0 and fk.is_ms_shipped=0 order by - TableWithForeignKey, FK_PartNo`); + TableWithForeignKey, FK_PartNo`)).recordset; let relationsTemp: RelationTempInfo[] = []; response.forEach((resp) => { let rels = relationsTemp.find((val) => { @@ -342,7 +353,7 @@ order by await this.Connection.close(); } - private Connection: MSSQL.Connection; + private Connection: MSSQL.ConnectionPool; async ConnectToServer(database: string, server: string, port: number, user: string, password: string) { let config: MSSQL.config = { database: database, @@ -359,7 +370,7 @@ order by let promise = new Promise( (resolve, reject) => { - this.Connection = new MSSQL.Connection(config, (err) => { + this.Connection = new MSSQL.ConnectionPool(config, (err) => { if (!err) { //Connection successfull resolve(true) @@ -391,6 +402,6 @@ order by async CheckIfDBExists(dbName: string): Promise { let request = new MSSQL.Request(this.Connection); let resp = await request.query(`SELECT name FROM master.sys.databases WHERE name = N'${dbName}' `) - return resp.length > 0; + return resp.recordset.length > 0; } } \ No newline at end of file diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 606bdc9..0b823c0 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -59,6 +59,7 @@ export class MysqlDriver extends AbstractDriver { case "int": colInfo.ts_type = "number" colInfo.sql_type = "int" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "tinyint": if (resp.NUMERIC_PRECISION == 3) { @@ -67,11 +68,13 @@ export class MysqlDriver extends AbstractDriver { } else { colInfo.ts_type = "number" colInfo.sql_type = "smallint" - } + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; + } break; case "smallint": colInfo.ts_type = "number" colInfo.sql_type = "smallint" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "bit": colInfo.ts_type = "boolean" @@ -80,10 +83,12 @@ export class MysqlDriver extends AbstractDriver { case "float": colInfo.ts_type = "number" colInfo.sql_type = "float" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "bigint": colInfo.ts_type = "number" colInfo.sql_type = "bigint" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "date": colInfo.ts_type = "Date" @@ -115,11 +120,13 @@ export class MysqlDriver extends AbstractDriver { break; case "varchar": colInfo.ts_type = "string" - colInfo.sql_type = "string" + colInfo.sql_type = "varchar" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "nvarchar": colInfo.ts_type = "string" - colInfo.sql_type = "string" + colInfo.sql_type = "nvarchar" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "money": colInfo.ts_type = "number" @@ -128,16 +135,19 @@ export class MysqlDriver extends AbstractDriver { case "real": colInfo.ts_type = "number" colInfo.sql_type = "double" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "double": colInfo.ts_type = "number" colInfo.sql_type = "double" + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "decimal": colInfo.ts_type = "number" colInfo.sql_type = "decimal" colInfo.numericPrecision = resp.NUMERIC_PRECISION colInfo.numericScale = resp.NUMERIC_SCALE + colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; break; case "xml": colInfo.ts_type = "string" @@ -147,7 +157,6 @@ export class MysqlDriver extends AbstractDriver { console.error("Unknown column type:" + resp.DATA_TYPE); break; } - colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null; if (colInfo.sql_type) ent.Columns.push(colInfo); }) }) diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 4d6ae3d..6108cb4 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -63,10 +63,12 @@ export class PostgresDriver extends AbstractDriver { case "integer": colInfo.ts_type = "number" colInfo.sql_type = "int" + colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null; break; case "character varying": colInfo.ts_type = "string" - colInfo.sql_type = "text" + colInfo.sql_type = "character varying" + colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null; break; case "text": colInfo.ts_type = "string" @@ -75,10 +77,12 @@ export class PostgresDriver extends AbstractDriver { case "smallint": colInfo.ts_type = "number" colInfo.sql_type = "smallint" + colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null; break; case "bigint": colInfo.ts_type = "number" colInfo.sql_type = "bigint" + colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null; break; case "date": colInfo.ts_type = "Date" @@ -91,14 +95,17 @@ export class PostgresDriver extends AbstractDriver { case "double precision": colInfo.ts_type = "number" colInfo.sql_type = "double" + colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null; break; case "real": colInfo.ts_type = "number" colInfo.sql_type = "float" + colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null; break; case "numeric": colInfo.ts_type = "number" colInfo.sql_type = "decimal" + colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null; break; case "time without time zone": colInfo.ts_type = "Date" @@ -121,7 +128,7 @@ export class PostgresDriver extends AbstractDriver { console.error("Unknown column type:" + resp.data_type); break; } - colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length : null; + if (colInfo.sql_type) ent.Columns.push(colInfo); }) }) diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index ec1308b..0d2ed56 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -1,4 +1,5 @@ import { RelationInfo } from './RelationInfo' +import { ColumnType } from 'typeorm'; /** * ColumnInfo */ @@ -7,8 +8,7 @@ export class ColumnInfo { default: string | null = null; is_nullable: boolean = false; ts_type: 'number' | 'string' | 'boolean' | 'Date' | 'any'; - sql_type: "string" | "text" | "number" | "integer" | "int" | "smallint" | "bigint" | - "float" | "double" | "decimal" | "date" | "time" | "datetime" | "boolean" | "json"; + sql_type: ColumnType; char_max_lenght: number | null = null; isPrimary: boolean = false; is_generated: boolean = false; diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index 916a371..52771eb 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -5,7 +5,21 @@ import * as MSSQL from 'mssql' import { EntityInfo } from './../../src/models/EntityInfo' import { ColumnInfo } from './../../src/models/ColumnInfo' import { RelationInfo } from './../../src/models/RelationInfo' +import { Table, IColumnMetadata } from "mssql"; + class fakeResponse implements MSSQL.IResult { + recordsets: MSSQL.IRecordSet[]; + recordset: MSSQL.IRecordSet; + rowsAffected: number[]; + output: { [key: string]: any; }; + + } + class fakeRecordset extends Array implements MSSQL.IRecordSet{ + columns: IColumnMetadata; + toTable(): Table{ + return new Table(); + } + } describe('MssqlDriver', function () { let driver: MssqlDriver @@ -34,8 +48,11 @@ describe('MssqlDriver', function () { .returns( { query: (q) => { - let response = <{ TABLE_SCHEMA: string, TABLE_NAME: string }[]>[]; - response.push({ TABLE_SCHEMA: 'schema', TABLE_NAME: 'name' }) + + let response=new fakeResponse(); + + response.recordset=new fakeRecordset(); + response.recordset.push({ TABLE_SCHEMA: 'schema', TABLE_NAME: 'name' }) return response; } } @@ -54,12 +71,9 @@ describe('MssqlDriver', function () { .returns( { query: (q) => { - let response = <{ - TABLE_NAME: string, COLUMN_NAME: string, COLUMN_DEFAULT: string, - IS_NULLABLE: string, DATA_TYPE: string, CHARACTER_MAXIMUM_LENGTH: number, - NUMERIC_PRECISION: number, NUMERIC_SCALE: number, IsIdentity:number - }[]>[] - response.push({ + let response=new fakeResponse(); + response.recordset=new fakeRecordset(); + response.recordset.push({ TABLE_NAME: 'name', CHARACTER_MAXIMUM_LENGTH: 0, COLUMN_DEFAULT: 'a', COLUMN_NAME: 'name', DATA_TYPE: 'int', IS_NULLABLE: 'YES', NUMERIC_PRECISION: 0, NUMERIC_SCALE: 0, diff --git a/test/integration/examples/sample1-simple-entity/entity/Post.ts b/test/integration/examples/sample1-simple-entity/entity/Post.ts index 999192f..6c208ff 100644 --- a/test/integration/examples/sample1-simple-entity/entity/Post.ts +++ b/test/integration/examples/sample1-simple-entity/entity/Post.ts @@ -1,9 +1,9 @@ -import {Column, Entity,PrimaryColumn,Index} from "typeorm"; +import {Column, Entity,PrimaryGeneratedColumn,Index,Generated} from "typeorm"; @Entity("Post") export class Post { - @PrimaryColumn("int", { generated: true }) + @PrimaryGeneratedColumn() id: number; @Column() diff --git a/test/integration/examples/sample11-all-types-entity/entity/EverythingEntity.ts b/test/integration/examples/sample11-all-types-entity/entity/EverythingEntity.ts index 7a5224d..c124572 100644 --- a/test/integration/examples/sample11-all-types-entity/entity/EverythingEntity.ts +++ b/test/integration/examples/sample11-all-types-entity/entity/EverythingEntity.ts @@ -2,7 +2,7 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn, Index } f @Entity("EverythingEntity") export class EverythingEntity { - +//TODO: change to check column types per database engine @PrimaryGeneratedColumn() id: number; @@ -30,11 +30,11 @@ export class EverythingEntity { @Column("bigint") bigintColumn: number; - @Column("float") - floatColumn: number; + // @Column("float") + // floatColumn: number; - @Column("double") - doubleColumn: number; + // @Column("double") + // doubleColumn: number; @Column("decimal") decimalColumn: number; @@ -48,14 +48,14 @@ export class EverythingEntity { @Column("time") timeColumn: Date; - @Column("boolean") - isBooleanColumn: boolean; + // @Column("boolean") + // isBooleanColumn: boolean; - @Column("boolean") - isSecondBooleanColumn: boolean; + // @Column("boolean") + // isSecondBooleanColumn: boolean; - @Column("json") - jsonColumn: any; + // @Column("json") + // jsonColumn: any; // @Column() // alsoJson: any; diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index ce5cb09..0e1d859 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -6,7 +6,6 @@ import path = require('path') import { Engine } from "./../../src/Engine"; import { AbstractDriver } from "./../../src/drivers/AbstractDriver"; import { MssqlDriver } from "./../../src/drivers/MssqlDriver"; -import { DriverType } from "typeorm/driver/DriverOptions"; import { expect } from "chai"; import * as Sinon from 'sinon' import { EntityFileToJson } from "../utils/EntityFileToJson"; @@ -28,7 +27,7 @@ describe("integration tests", async function () { let examplesPathTS = path.resolve(process.cwd(), 'test/integration/examples') let files = fs.readdirSync(examplesPathTS) - let dbDrivers: DriverType[] = [] + let dbDrivers: string[] = [] 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') @@ -107,23 +106,22 @@ async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Pro let driver: AbstractDriver; driver = new MssqlDriver(); - await driver.ConnectToServer(`master`, process.env.MSSQL_Host, process.env.MSSQL_Port, process.env.MSSQL_Username, process.env.MSSQL_Password); + await driver.ConnectToServer(`master`, String(process.env.MSSQL_Host), Number(process.env.MSSQL_Port), String(process.env.MSSQL_Username), String(process.env.MSSQL_Password)); - if (! await driver.CheckIfDBExists(process.env.MSSQL_Database)) - await driver.CreateDB(process.env.MSSQL_Database); + if (! await driver.CheckIfDBExists(String(process.env.MSSQL_Database))) + await driver.CreateDB(String(process.env.MSSQL_Database)); await driver.DisconnectFromServer(); let connOpt: ConnectionOptions = { - driver: { - database: process.env.MSSQL_Database, - host: process.env.MSSQL_Host, - password: process.env.MSSQL_Password, - type: 'mssql', - username: process.env.MSSQL_Username, - port: process.env.MSSQL_Port - }, - dropSchemaOnConnection: true, - autoSchemaSync: true, + + database: String(process.env.MSSQL_Database), + host: String(process.env.MSSQL_Host), + password: String(process.env.MSSQL_Password), + type: 'mssql', + username: String(process.env.MSSQL_Username), + port: Number(process.env.MSSQL_Port), + dropSchema: true, + synchronize: true, entities: [path.resolve(filesOrgPath, '*.js')], } let conn = await createConnection(connOpt) @@ -135,11 +133,11 @@ async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Pro driver = new MssqlDriver(); let engine = new Engine( driver, { - host: process.env.MSSQL_Host, - port: process.env.MSSQL_Port, - databaseName: process.env.MSSQL_Database, - user: process.env.MSSQL_Username, - password: process.env.MSSQL_Password, + 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: resultsPath }); @@ -151,23 +149,21 @@ async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Pro async function createPostgresModels(filesOrgPath: string, resultsPath: string): Promise { let driver: AbstractDriver; driver = new PostgresDriver(); - await driver.ConnectToServer(`postgres`, process.env.POSTGRES_Host, process.env.POSTGRES_Port, process.env.POSTGRES_Username, process.env.POSTGRES_Password); + await driver.ConnectToServer(`postgres`, String(process.env.POSTGRES_Host), Number(process.env.POSTGRES_Port), String(process.env.POSTGRES_Username), String(process.env.POSTGRES_Password)); - if (! await driver.CheckIfDBExists(process.env.POSTGRES_Database)) - await driver.CreateDB(process.env.POSTGRES_Database); + if (! await driver.CheckIfDBExists(String(process.env.POSTGRES_Database))) + await driver.CreateDB(String(process.env.POSTGRES_Database)); await driver.DisconnectFromServer(); let connOpt: ConnectionOptions = { - driver: { - database: process.env.POSTGRES_Database, - host: process.env.POSTGRES_Host, - password: process.env.POSTGRES_Password, - type: 'postgres', - username: process.env.POSTGRES_Username, - port: process.env.POSTGRES_Port - }, - dropSchemaOnConnection: true, - autoSchemaSync: true, + database: String(process.env.POSTGRES_Database), + host: String(process.env.POSTGRES_Host), + password: String(process.env.POSTGRES_Password), + type: 'postgres', + username: String(process.env.POSTGRES_Username), + port: Number(process.env.POSTGRES_Port), + dropSchema: true, + synchronize: true, entities: [path.resolve(filesOrgPath, '*.js')], } let conn = await createConnection(connOpt) @@ -178,11 +174,11 @@ async function createPostgresModels(filesOrgPath: string, resultsPath: string): driver = new PostgresDriver(); let engine = new Engine( driver, { - host: process.env.POSTGRES_Host, - port: process.env.POSTGRES_Port, - databaseName: process.env.POSTGRES_Database, - user: process.env.POSTGRES_Username, - password: process.env.POSTGRES_Password, + 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: resultsPath }); @@ -195,23 +191,21 @@ async function createPostgresModels(filesOrgPath: string, resultsPath: string): async function createMysqlModels(filesOrgPath: string, resultsPath: string): Promise { let driver: AbstractDriver; driver = new MysqlDriver(); - await driver.ConnectToServer(`mysql`, process.env.MYSQL_Host, process.env.MYSQL_Port, process.env.MYSQL_Username, process.env.MYSQL_Password); + await driver.ConnectToServer(`mysql`, String(process.env.MYSQL_Host), Number(process.env.MYSQL_Port), String(process.env.MYSQL_Username), String(process.env.MYSQL_Password)); - if (! await driver.CheckIfDBExists(process.env.MYSQL_Database)) - await driver.CreateDB(process.env.MYSQL_Database); + if (! await driver.CheckIfDBExists(String(process.env.MYSQL_Database))) + await driver.CreateDB(String(process.env.MYSQL_Database)); await driver.DisconnectFromServer(); let connOpt: ConnectionOptions = { - driver: { - database: process.env.MYSQL_Database, - host: process.env.MYSQL_Host, - password: process.env.MYSQL_Password, - type: 'mysql', - username: process.env.MYSQL_Username, - port: process.env.MYSQL_Port - }, - dropSchemaOnConnection: true, - autoSchemaSync: true, + database: String(process.env.MYSQL_Database), + host: String(process.env.MYSQL_Host), + password: String(process.env.MYSQL_Password), + type: 'mysql', + username: String(process.env.MYSQL_Username), + port: Number(process.env.MYSQL_Port), + dropSchema: true, + synchronize: true, entities: [path.resolve(filesOrgPath, '*.js')], } let conn = await createConnection(connOpt) @@ -222,11 +216,11 @@ async function createMysqlModels(filesOrgPath: string, resultsPath: string): Pro driver = new MysqlDriver(); let engine = new Engine( driver, { - host: process.env.MYSQL_Host, - port: process.env.MYSQL_Port, - databaseName: process.env.MYSQL_Database, - user: process.env.MYSQL_Username, - password: process.env.MYSQL_Password, + 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: resultsPath }); @@ -238,23 +232,22 @@ async function createMysqlModels(filesOrgPath: string, resultsPath: string): Pro async function createMariaDBModels(filesOrgPath: string, resultsPath: string): Promise { let driver: AbstractDriver; driver = new MariaDbDriver(); - await driver.ConnectToServer(`mysql`, process.env.MARIADB_Host, process.env.MARIADB_Port, process.env.MARIADB_Username, process.env.MARIADB_Password); + await driver.ConnectToServer(`mysql`, String(process.env.MARIADB_Host), Number(process.env.MARIADB_Port), String(process.env.MARIADB_Username), String(process.env.MARIADB_Password)); - if (! await driver.CheckIfDBExists(process.env.MARIADB_Database)) - await driver.CreateDB(process.env.MARIADB_Database); + if (! await driver.CheckIfDBExists(String(process.env.MARIADB_Database))) + await driver.CreateDB(String(process.env.MARIADB_Database)); await driver.DisconnectFromServer(); let connOpt: ConnectionOptions = { - driver: { - database: process.env.MARIADB_Database, - host: process.env.MARIADB_Host, - password: process.env.MARIADB_Password, - type: 'mariadb', - username: process.env.MARIADB_Username, - port: process.env.MARIADB_Port - }, - dropSchemaOnConnection: true, - autoSchemaSync: true, + + database: String(process.env.MARIADB_Database), + host: String(process.env.MARIADB_Host), + password: String(process.env.MARIADB_Password), + type: 'mariadb', + username: String(process.env.MARIADB_Username), + port: Number(process.env.MARIADB_Port), + dropSchema: true, + synchronize: true, entities: [path.resolve(filesOrgPath, '*.js')], } let conn = await createConnection(connOpt) @@ -265,11 +258,11 @@ async function createMariaDBModels(filesOrgPath: string, resultsPath: string): P driver = new MariaDbDriver(); let engine = new Engine( driver, { - host: process.env.MARIADB_Host, - port: process.env.MARIADB_Port, - databaseName: process.env.MARIADB_Database, - user: process.env.MARIADB_Username, - password: process.env.MARIADB_Password, + 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: resultsPath }); diff --git a/test/utils/EntityFileToJson.ts b/test/utils/EntityFileToJson.ts index 2ae6f19..0d09b92 100644 --- a/test/utils/EntityFileToJson.ts +++ b/test/utils/EntityFileToJson.ts @@ -271,6 +271,20 @@ export class EntityFileToJson { console.log(`[EntityFileToJson:convert] Line not recognized in entity ${retVal.entityName}:`) console.log(`${trimmedLine}`) } + + retVal.columns=retVal.columns.map(col=>{ + 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')) + colName=colName.substr(0,colName.length-2) + return colName; + }) + return ind; + }) return retVal; } isPartOfMultilineStatement(statement: string) {