diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..08891d8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 99be057..1b05f74 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,30 +1,36 @@ language: node_js node_js: -- stable -- 8 -- 6 + - stable + - 8 + - 6 sudo: required services: -- docker + - 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 - global: - secure: Xj6wO8aghAhi6nvBI/HTtW9mIq9xfigIQfCC7ZkgAcqS4Oe3ba+7A5pCJq6Fxndadc6Bg1bZ3BGCH3Upf/Yv3zCFybsk43LwwXPJoG9gCrva/me7Sd+ws30EcD2dsKbvjZqNYai/XdrhzJY+KlxWvS/g3N/puBNffcU5hteo1zllxakQIAiavJ64D4g+Th8LSytmb2qDDToSsCxXkzNSutaKgZSf6T8QCWzcl0NCZkl69s9kX7L5335HVBD9lR/EKFC4wqHQjryCDRAyNRvItZRNlTPqgOI8lvcTsH9zKozDwEz7h/zcLebbY/+YTsLB5pb2sa62tkQE0x24TG7bLxujQShEQZU8itkRSV+w6+0JpBHQPlSUppkQJBNGKao7GaO/Eix4mSyvHkeECmTWDtEpBGWERYLqCKGe2Nj3BfcA2Ue6pjz9CX8wnrCbx53j6be3M/g/gcx7fbJbX3P95yc1CWAaR+tJKlP38rTcyo+o+Db1Ft0pzRJyZGmkGGPnCj6LxWYSmVqumLYDyqAMBDcQYuVwaKaTsJtU/2OBb3+zjKmWivV+19SXBqILvFbLv9IYLavpMr9OAwDGcJu0+mF+VCjGkZTlBxWJ53PmCoIJ6Qx/5o67LsCYL4L/hugNETlOEEKwe/k1mBraYWB0jI3mBUCV0d8J5P+ZQhwIZo4= + 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 + global: + secure: >- + Xj6wO8aghAhi6nvBI/HTtW9mIq9xfigIQfCC7ZkgAcqS4Oe3ba+7A5pCJq6Fxndadc6Bg1bZ3BGCH3Upf/Yv3zCFybsk43LwwXPJoG9gCrva/me7Sd+ws30EcD2dsKbvjZqNYai/XdrhzJY+KlxWvS/g3N/puBNffcU5hteo1zllxakQIAiavJ64D4g+Th8LSytmb2qDDToSsCxXkzNSutaKgZSf6T8QCWzcl0NCZkl69s9kX7L5335HVBD9lR/EKFC4wqHQjryCDRAyNRvItZRNlTPqgOI8lvcTsH9zKozDwEz7h/zcLebbY/+YTsLB5pb2sa62tkQE0x24TG7bLxujQShEQZU8itkRSV+w6+0JpBHQPlSUppkQJBNGKao7GaO/Eix4mSyvHkeECmTWDtEpBGWERYLqCKGe2Nj3BfcA2Ue6pjz9CX8wnrCbx53j6be3M/g/gcx7fbJbX3P95yc1CWAaR+tJKlP38rTcyo+o+Db1Ft0pzRJyZGmkGGPnCj6LxWYSmVqumLYDyqAMBDcQYuVwaKaTsJtU/2OBb3+zjKmWivV+19SXBqILvFbLv9IYLavpMr9OAwDGcJu0+mF+VCjGkZTlBxWJ53PmCoIJ6Qx/5o67LsCYL4L/hugNETlOEEKwe/k1mBraYWB0jI3mBUCV0d8J5P+ZQhwIZo4= before_install: -- sudo service mysql stop -- sudo service postgresql stop -- docker-compose up -d -- npm install -g npm@5 -- npm install -g greenkeeper-lockfile@1 + - sudo service mysql stop + - sudo service postgresql stop + - docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD" + - docker-compose up -d + - npm install -g npm@5 + - npm install -g greenkeeper-lockfile@1 before_script: -- greenkeeper-lockfile-update -- npm run typings-install -- npm link typescript -- tsc + - greenkeeper-lockfile-update + - npm run typings-install + - npm link typescript + - tsc after_script: -- greenkeeper-lockfile-upload + - greenkeeper-lockfile-upload diff --git a/README.md b/README.md index bb90d0c..e8ab4e2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![npm version](https://badge.fury.io/js/typeorm-model-generator.svg)](https://badge.fury.io/js/typeorm-model-generator) [![codecov](https://codecov.io/gh/Kononnable/typeorm-model-generator/branch/master/graph/badge.svg)](https://codecov.io/gh/Kononnable/typeorm-model-generator) -Generates models for TypeORM from existing databases. +Generates models for TypeORM from existing databases. Suported db engines: * Microsoft SQL Server * PostgreSQL @@ -19,7 +19,7 @@ Suported db engines: To install module globally simply type `npm i -g typeorm-model-generator` in your console. ### 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` +>To use `npx` you need to use npm at version at least 5.2.0. Try updating your npm by `npm i -g npm` ## Usage ```shell @@ -37,24 +37,26 @@ Options: -o, --output Where to place generated models. -s, --schema Schema name to create model from. Only for mssql and postgres. --ssl [boolean] [default: false] + --noConfig Doesn't create tsconfig.json and ormconfig.json + [boolean] [default: false] ``` ### Examples * Creating model from local MSSQL database - * Global module + * Global module ``` typeorm-model-generator -h localhost -d tempdb -u sa -x !Passw0rd -e mssql -o .\ ```` - * Npx Way + * Npx Way ``` npx typeorm-model-generator -h localhost -d tempdb -u sa -x !Passw0rd -e mssql -o .\ ```` * Creating model from local Postgres database, public schema with ssl connection - * Global module + * Global module ``` typeorm-model-generator -h localhost -d postgres -u postgres -x !Passw0rd -e postgres -o .\ -s public --ssl ```` - * Npx Way + * Npx Way ``` npx typeorm-model-generator -h localhost -d postgres -u postgres -x !Passw0rd -e postgres -o .\ -s public --ssl - ```` \ No newline at end of file + ```` diff --git a/codecov.yml b/codecov.yml index 54910f4..d87b44e 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,3 +1,14 @@ parsers: - javascript: - enable_partials: yes \ No newline at end of file + javascript: + enable_partials: yes +comment: + layout: diff + behavior: default +codecov: + notify: + require_ci_to_pass: no +coverage: + status: + project: + default: + threshold: 5% diff --git a/docker-compose.yml b/docker-compose.yml index a2b2149..cf9b21c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,7 +28,7 @@ services: environment: POSTGRES_PASSWORD: "!Passw0rd" - # # mssql + # mssql # mssql: # image: "microsoft/mssql-server-linux:2017-GA" # container_name: "typeorm-mg-mssql" @@ -37,4 +37,13 @@ services: # environment: # ACCEPT_EULA: "Y" # SA_PASSWORD: "!Passw0rd" - \ No newline at end of file + + # oracle + # oracle: + # image: "store/oracle/database-enterprise:12.2.0.1-slim" + # container_name: "typeorm-mg-oracle" + # ports: + # - "1521:1521" + # environment: + # DB_SID: "ORCLCDB" + # SYS_PASSWORD: "Oradoc_db1" diff --git a/package-lock.json b/package-lock.json index e68bc73..1ccbcc0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@types/chai": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.5.tgz", - "integrity": "sha512-ZC4tZU+3rDblhVy9cUQp5u+Zw9M0geGY8tzUQgc+4CMIWQLUFpgvrHhaYrSq1TK2m0DjaYIp9yJPyTHN+qhBZg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.0.tgz", + "integrity": "sha512-OuYBlXWHYthxIudMXMeQr92f6D97YoT9CUYCRb0BEP4OavC95jNcczjjr4Ob3H5E1IqlWqwj+leUZPSeth27Qw==", "dev": true }, "@types/chai-as-promised": { @@ -16,7 +16,7 @@ "integrity": "sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==", "dev": true, "requires": { - "@types/chai": "4.0.5" + "@types/chai": "4.1.0" } }, "@types/chai-subset": { @@ -25,7 +25,7 @@ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==", "dev": true, "requires": { - "@types/chai": "4.0.5" + "@types/chai": "4.1.0" } }, "@types/events": { @@ -50,9 +50,9 @@ "dev": true }, "@types/mocha": { - "version": "2.2.44", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.44.tgz", - "integrity": "sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw==", + "version": "2.2.46", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.46.tgz", + "integrity": "sha512-fwTTP5QLf4xHMkv7ovcKvmlLWX3GrxCa5DRQDOilVyYGCp+arZTAQJCy7/4GKezzYJjfWMpB/Cy4e8nrc9XioA==", "dev": true }, "@types/mssql": { @@ -76,8 +76,16 @@ "@types/node": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-9.3.0.tgz", - "integrity": "sha512-wNBfvNjzsJl4tswIZKXCFQY0lss9nKUyJnG6T94X/eqjRgI2jHZ4evdjhQYBSan/vGtF6XVXPApOmNH2rf0KKw==", - "dev": true + "integrity": "sha512-wNBfvNjzsJl4tswIZKXCFQY0lss9nKUyJnG6T94X/eqjRgI2jHZ4evdjhQYBSan/vGtF6XVXPApOmNH2rf0KKw==" + }, + "@types/oracledb": { + "version": "1.11.34", + "resolved": "https://registry.npmjs.org/@types/oracledb/-/oracledb-1.11.34.tgz", + "integrity": "sha512-7cgZaKEfYcPPTScxxCoYoLxmmhM/PBobGBfxE3RGzRJl8YKhkyGKyExFu8fTOpF2cPgdfh83NGKBVX7prWzb+Q==", + "dev": true, + "requires": { + "@types/node": "9.3.0" + } }, "@types/pg": { "version": "7.4.1", @@ -100,9 +108,9 @@ } }, "@types/sinon": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.1.2.tgz", - "integrity": "sha512-fL6bJHYRzbw/7ofbKiJ65SOAasoe5mZhHNSYKxWsF3sGl/arhRwDPwXJqM1xofKNTQD14HNX9VruicM7pm++mQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.1.3.tgz", + "integrity": "sha512-Xxn32Q3mAJHOMU20bxcT6HiPksUJEkZA+nyZS4NhLo8kKb8hLhkBgp5OeW/BI3+9QmdrvDRk3caYNqtYb+TEbA==", "dev": true }, "abbrev": { @@ -160,25 +168,16 @@ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { - "string-width": "2.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=", - "dev": true - }, - "string-width": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", - "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "3.0.1" - } - } + "string-width": "2.1.1" + } + }, + "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": { @@ -187,15 +186,33 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, + "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" + } + }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.1" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true }, "any-promise": { "version": "1.3.0", @@ -227,16 +244,32 @@ "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", "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=", + "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.1.0", + "array-slice": "0.2.3" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true }, "array-uniq": { @@ -258,9 +291,9 @@ "dev": true }, "assertion-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", - "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "async": { @@ -291,8 +324,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.1", - "regenerator-runtime": "0.11.0" + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" } }, "balanced-match": { @@ -310,12 +343,6 @@ "tweetnacl": "0.14.5" } }, - "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", @@ -331,13 +358,13 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", "requires": { - "readable-stream": "2.2.11" + "readable-stream": "2.3.3" } }, "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "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": { @@ -350,18 +377,18 @@ } }, "boxen": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz", - "integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=", + "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.1.0", - "chalk": "1.1.3", + "chalk": "2.3.0", "cli-boxes": "1.0.0", - "string-width": "2.0.0", - "term-size": "0.1.1", - "widest-line": "1.0.0" + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.0" }, "dependencies": { "camelcase": { @@ -369,22 +396,6 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true - }, - "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=", - "dev": true - }, - "string-width": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", - "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "3.0.1" - } } } }, @@ -419,24 +430,6 @@ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "optional": true }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, "capture-stack-trace": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", @@ -465,29 +458,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.0.2", + "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.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 - } + "type-detect": "4.0.6" } }, "chai-as-promised": { @@ -506,15 +482,13 @@ "dev": true }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "requires": { - "ansi-styles": "2.2.1", + "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "supports-color": "4.5.0" } }, "check-error": { @@ -539,81 +513,25 @@ } }, "cli-highlight": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-1.1.4.tgz", - "integrity": "sha1-5FWQwU+xjhOGXjiZ6CTFWSzCKSY=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-1.2.3.tgz", + "integrity": "sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg==", "requires": { - "chalk": "1.1.3", - "he": "1.1.1", + "chalk": "2.3.0", "highlight.js": "9.12.0", "mz": "2.7.0", - "yargs": "4.8.1" - }, - "dependencies": { - "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" - } - } + "parse5": "3.0.3", + "yargs": "10.1.1" } }, "cli-truncate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.0.0.tgz", - "integrity": "sha1-IeuR9Hs/ZWDwBNt3p2m0Zo2cVRg=", + "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": "0.0.4", - "string-width": "2.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=", - "dev": true - }, - "string-width": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", - "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "3.0.1" - } - } + "slice-ansi": "1.0.0", + "string-width": "2.1.1" } }, "cliui": { @@ -636,15 +554,9 @@ } }, "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "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=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", "dev": true }, "co": { @@ -690,6 +602,23 @@ "requires": { "strip-ansi": "3.0.1", "wcwidth": "1.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 + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } } }, "combined-stream": { @@ -701,6 +630,12 @@ "delayed-stream": "1.0.0" } }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -713,28 +648,28 @@ "dev": true, "requires": { "inherits": "2.0.3", - "readable-stream": "2.2.11", + "readable-stream": "2.3.3", "typedarray": "0.0.6" } }, "configstore": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz", - "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=", + "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.1", + "dot-prop": "4.2.0", "graceful-fs": "4.1.11", - "make-dir": "1.0.0", + "make-dir": "1.1.0", "unique-string": "1.0.0", - "write-file-atomic": "2.1.0", + "write-file-atomic": "2.3.0", "xdg-basedir": "3.0.0" } }, "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" }, "core-util-is": { "version": "1.0.2", @@ -757,17 +692,7 @@ "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", - "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "which": "1.2.14" + "which": "1.3.0" } }, "cryptiles": { @@ -785,15 +710,6 @@ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -811,23 +727,12 @@ } } }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - }, "debug": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", - "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", - "dev": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, "decamelize": { @@ -835,6 +740,15 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "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.6" + } + }, "deep-extend": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", @@ -853,7 +767,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.2" + "clone": "1.0.3" } }, "delayed-stream": { @@ -869,15 +783,15 @@ "dev": true }, "diff": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", - "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", "dev": true }, "dot-prop": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", - "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", + "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.1" @@ -888,41 +802,6 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" }, - "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.14" - }, - "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.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "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", @@ -971,6 +850,12 @@ "source-map": "0.2.0" }, "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, "source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", @@ -984,10 +869,9 @@ } }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" }, "estraverse": { "version": "1.9.3", @@ -1002,25 +886,17 @@ "dev": true }, "execa": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", - "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", - "dev": true, + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "cross-spawn-async": "2.2.5", + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", "is-stream": "1.1.0", - "npm-run-path": "1.0.0", - "object-assign": "4.1.1", - "path-key": "1.0.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", "strip-eof": "1.0.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=", - "dev": true - } } }, "exit-hook": { @@ -1035,22 +911,29 @@ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", "dev": true }, + "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=", + "dev": true, + "requires": { + "kind-of": "1.1.0" + }, + "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 + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" - } - }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", @@ -1063,12 +946,11 @@ "integrity": "sha1-bEZTc3j6tkkUa1phQ92gGbQwtBA=" }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "2.0.0" } }, "forever-agent": { @@ -1085,7 +967,7 @@ "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "mime-types": "2.1.17" } }, "formatio": { @@ -1114,15 +996,15 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "generic-pool": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.1.8.tgz", - "integrity": "sha1-CYRLZUW8kXfsIYvTXUrYlMZb4nE=" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.4.0.tgz", + "integrity": "sha512-lYsIpjkyNBnRLKrcnJlXTEXB2ISmK9g7N4WqWwXbvr+tVB1+raaFnHoCYecWnuCo/XGHgM935WOWmr5Zx3tJKw==" }, "get-caller-file": { "version": "1.0.2", @@ -1135,12 +1017,6 @@ "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", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -1176,13 +1052,13 @@ "path-is-absolute": "1.0.1" } }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "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": { - "sparkles": "1.0.0" + "ini": "1.3.5" } }, "got": { @@ -1198,7 +1074,7 @@ "is-retry-allowed": "1.1.0", "is-stream": "1.1.0", "lowercase-keys": "1.0.0", - "safe-buffer": "5.0.1", + "safe-buffer": "5.1.1", "timed-out": "4.0.1", "unzip-response": "2.0.1", "url-parse-lax": "1.0.0" @@ -1209,48 +1085,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, - "gulp-util": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", - "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "1.0.12", - "fancy-log": "1.3.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.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.1", - "vinyl": "0.5.3" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "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" - } + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true }, "handlebars": { "version": "4.0.11", @@ -1285,7 +1124,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.0" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -1294,22 +1133,19 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "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" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" }, "has-unicode": { "version": "2.0.1", @@ -1332,7 +1168,8 @@ "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true }, "highlight.js": { "version": "9.12.0", @@ -1346,9 +1183,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", - "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" }, "http-proxy-agent": { "version": "1.0.0", @@ -1357,7 +1194,7 @@ "dev": true, "requires": { "agent-base": "2.1.1", - "debug": "2.6.0", + "debug": "2.6.9", "extend": "3.0.1" } }, @@ -1379,7 +1216,7 @@ "dev": true, "requires": { "agent-base": "2.1.1", - "debug": "2.6.0", + "debug": "2.6.9", "extend": "3.0.1" } }, @@ -1400,15 +1237,6 @@ "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.1" - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1424,9 +1252,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, "invariant": { @@ -1471,21 +1299,19 @@ "builtin-modules": "1.1.1" } }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "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-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": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" } }, "is-npm": { @@ -1500,6 +1326,15 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, + "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.2" + } + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -1547,11 +1382,6 @@ "unc-path-regex": "0.1.2" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, "is-windows": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", @@ -1569,13 +1399,10 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "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" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -1595,16 +1422,22 @@ "esprima": "2.7.3", "glob": "5.0.15", "handlebars": "4.0.11", - "js-yaml": "3.8.4", + "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.2.14", + "which": "1.3.0", "wordwrap": "1.0.0" }, "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", @@ -1618,6 +1451,12 @@ "path-is-absolute": "1.0.1" } }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -1641,25 +1480,18 @@ "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" }, "js-tokens": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", - "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", + "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.8.4", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", - "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "requires": { "argparse": "1.0.9", - "esprima": "3.1.3" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - } + "esprima": "4.0.0" } }, "jsbn": { @@ -1714,20 +1546,12 @@ "any-promise": "1.3.0", "graceful-fs": "4.1.11", "make-error-cause": "1.2.2", - "object.pick": "1.2.0", + "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" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } } }, "jsprim": { @@ -1804,15 +1628,14 @@ "dev": true }, "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "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", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "strip-bom": "3.0.0" } }, "locate-path": { @@ -1822,13 +1645,6 @@ "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": { @@ -1837,136 +1653,12 @@ "integrity": "sha1-Jjj8OaAzHpysGgS3F5mTHJxQ33k=", "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.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", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "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", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "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.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.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.2.0" - } - }, "log-update": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", @@ -1978,9 +1670,9 @@ } }, "lolex": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.0.tgz", - "integrity": "sha512-rPO6R1t8PjYL6xbsFUg7aByKkWAql907na6powPBORVs4DCm8aMBUkL4+6CXO0gEIV8vtu3mWV0FB8ZaCYPBmA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.1.tgz", + "integrity": "sha512-mQuW55GhduF3ppo+ZRUTz1PRjEh1hS5BbqU7d8D0ez2OKxHDod7StPPeAVKisZR5aLkHZjdGWSL42LSONUJsZw==", "dev": true }, "longest": { @@ -1994,17 +1686,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.1" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "js-tokens": "3.0.2" } }, "lowercase-keys": { @@ -2023,18 +1705,26 @@ } }, "make-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", - "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "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": "2.3.0" + "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.0", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", + "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": { @@ -2043,15 +1733,9 @@ "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", "dev": true, "requires": { - "make-error": "1.3.0" + "make-error": "1.3.2" } }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", @@ -2060,51 +1744,19 @@ "mimic-fn": "1.1.0" } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.3.8", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } - } - }, "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", "dev": true }, "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "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.27.0" + "mime-db": "1.30.0" } }, "mimic-fn": { @@ -2141,9 +1793,9 @@ } }, "mocha": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", - "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", + "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", "dev": true, "requires": { "browser-stdout": "1.3.0", @@ -2158,12 +1810,6 @@ "supports-color": "4.4.0" }, "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -2173,30 +1819,6 @@ "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": "4.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", @@ -2215,10 +1837,9 @@ "dev": true }, "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mssql": { "version": "4.1.0", @@ -2226,32 +1847,8 @@ "integrity": "sha512-ekht0eILEV0P1CbpkwpAxhgO+/5goYizUJrt7pgDm3fP6lGKe0+8V9jhTvQZ8DPHkycSd0wYGUoz/YA7VN7kQQ==", "requires": { "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": { - "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" + "generic-pool": "3.4.0", + "tedious": "2.1.5" } }, "mysql": { @@ -2263,35 +1860,6 @@ "readable-stream": "2.3.3", "safe-buffer": "5.1.1", "sqlstring": "2.3.0" - }, - "dependencies": { - "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==", - "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" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "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==", - "requires": { - "safe-buffer": "5.1.1" - } - } } }, "mz": { @@ -2302,13 +1870,6 @@ "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=" - } } }, "nise": { @@ -2342,23 +1903,22 @@ } }, "normalize-package-data": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", - "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", + "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==", "requires": { - "hosted-git-info": "2.4.2", + "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", - "semver": "5.3.0", + "semver": "4.3.2", "validate-npm-package-license": "3.0.1" } }, "npm-run-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", - "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true, + "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": "1.0.0" + "path-key": "2.0.1" } }, "number-is-nan": { @@ -2373,18 +1933,17 @@ "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 + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object.pick": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.2.0.tgz", - "integrity": "sha1-tTkr7peC2m2ft9avr1OXefEjTCs=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "2.1.0" + "isobject": "3.0.1" } }, "once": { @@ -2432,12 +1991,19 @@ } } }, + "oracledb": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-2.0.15.tgz", + "integrity": "sha1-9+IBtp+ngjUIFV6fNKumXVdCbx0=" + }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "lcid": "1.0.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "p-finally": { @@ -2446,18 +2012,26 @@ "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=" + "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==", + "requires": { + "p-try": "1.0.0" + } }, "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" + "p-limit": "1.2.0" } }, + "p-try": { + "version": "1.0.0", + "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", @@ -2467,7 +2041,15 @@ "got": "6.7.1", "registry-auth-token": "3.3.1", "registry-url": "3.1.0", - "semver": "5.3.0" + "semver": "5.5.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": { @@ -2488,25 +2070,35 @@ "error-ex": "1.3.1" } }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "requires": { - "pinkie-promise": "2.0.1" + "@types/node": "9.3.0" } }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "path-key": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", - "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -2525,13 +2117,11 @@ } }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "pify": "2.3.0" } }, "pathval": { @@ -2547,9 +2137,9 @@ "dev": true }, "pg": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.4.0.tgz", - "integrity": "sha1-4lYGHSxScjw8hY3vuX8RWcpmD4M=", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.4.1.tgz", + "integrity": "sha512-Pi5qYuXro5PAD9xXx8h7bFtmHgAQEG6/SCNyi7gS3rvb/ZQYDmxKchfB0zYtiSJNWq9iXTsYsHjrM+21eBcN1A==", "requires": { "buffer-writer": "1.0.1", "js-string-escape": "1.0.1", @@ -2559,13 +2149,6 @@ "pg-types": "1.12.1", "pgpass": "1.0.2", "semver": "4.3.2" - }, - "dependencies": { - "semver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", - "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" - } } }, "pg-connection-string": { @@ -2602,29 +2185,29 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, "requires": { - "pinkie": "2.0.4" + "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.1.0", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-9.1.0.tgz", - "integrity": "sha1-T5APONV6V07BcO2kBJbjZAgr/2Y=", + "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.6.0", "form-data": "2.1.4", "make-error-cause": "1.2.2", - "tough-cookie": "2.3.2" + "tough-cookie": "2.3.3" } }, "popsicle-proxy-agent": { @@ -2723,13 +2306,13 @@ "dev": true }, "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.3.tgz", + "integrity": "sha1-UVdakA+N1oOBxxC0cSwhVMPiA1s=", "dev": true, "requires": { "deep-extend": "0.4.2", - "ini": "1.3.4", + "ini": "1.3.5", "minimist": "1.2.0", "strip-json-comments": "2.0.1" }, @@ -2743,57 +2326,47 @@ } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.3.8", - "path-type": "1.1.0" + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "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": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "2.1.0", + "read-pkg": "2.0.0" } }, "readable-stream": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", - "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", + "version": "2.3.3", + "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.0.1", - "string_decoder": "1.0.2", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, "reflect-metadata": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz", - "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo=" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", + "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==" }, "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "registry-auth-token": { "version": "3.3.1", @@ -2801,8 +2374,8 @@ "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", "dev": true, "requires": { - "rc": "1.2.1", - "safe-buffer": "5.0.1" + "rc": "1.2.3", + "safe-buffer": "5.1.1" } }, "registry-url": { @@ -2811,27 +2384,27 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "1.2.1" + "rc": "1.2.3" } }, "remap-istanbul": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.9.5.tgz", - "integrity": "sha1-oYYXsfMe7Fp9vud1OCmLd1YGqqg=", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.10.0.tgz", + "integrity": "sha512-C3vinclZ2p8na07f/f+JWLchmiofgqroyxBrkKPA4kkbjsHHa94HFd5ZYkYrMEs9cbsufh53t5DFJyTK8UDVjg==", "dev": true, "requires": { "amdefine": "1.0.1", - "gulp-util": "3.0.7", "istanbul": "0.4.5", "minimatch": "3.0.4", - "source-map": "0.5.6", + "plugin-error": "0.1.2", + "source-map": "0.6.1", "through2": "2.0.1" }, "dependencies": { "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -2841,21 +2414,6 @@ "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.2" - } - }, - "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.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", @@ -2875,15 +2433,15 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", + "mime-types": "2.1.17", "oauth-sign": "0.8.2", "performance-now": "0.2.0", "qs": "6.4.0", - "safe-buffer": "5.0.1", + "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.2", + "tough-cookie": "2.3.3", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "uuid": "3.2.1" } }, "require-directory": { @@ -2922,18 +2480,18 @@ } }, "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "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.1.2" } }, "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "samsam": { "version": "1.3.0", @@ -2947,9 +2505,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" }, "semver-diff": { "version": "2.1.0", @@ -2957,7 +2515,15 @@ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { - "semver": "5.3.0" + "semver": "5.5.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 + } } }, "set-blocking": { @@ -2984,30 +2550,24 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sinon": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.2.tgz", - "integrity": "sha512-5uLBZPdCWl59Lpbf45ygKj7Z0LVol+ftBe7RDIXOQV/sF58pcFmbK8raA7bt6eljNuGnvBP+/ZxlicVn0emDjA==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.6.tgz", + "integrity": "sha1-nLNGvdsYDWioBEKf/hSXjX+v1ik=", "dev": true, "requires": { - "diff": "3.4.0", + "diff": "3.3.1", "formatio": "1.2.0", "lodash.get": "4.4.2", - "lolex": "2.3.0", + "lolex": "2.3.1", "nise": "1.2.0", - "supports-color": "4.5.0", - "type-detect": "4.0.5" + "supports-color": "5.1.0", + "type-detect": "4.0.6" }, "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", + "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -3022,16 +2582,13 @@ "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 - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true + "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" + } }, "sntp": { "version": "1.0.9", @@ -3059,12 +2616,6 @@ "amdefine": "1.0.1" } }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", @@ -3137,21 +2688,20 @@ "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "string_decoder": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", - "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "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==", "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "5.1.1" } }, "stringstream": { @@ -3161,35 +2711,23 @@ "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=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "3.0.0" } }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -3197,30 +2735,33 @@ "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=" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } }, "tedious": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.0.0.tgz", - "integrity": "sha1-J2XpyGhPYmMdheaogFXruC3I9X0=", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.1.5.tgz", + "integrity": "sha1-hVdNIs3hdp3+TMSg1pcXWxPl0xg=", "requires": { "babel-runtime": "6.26.0", "big-number": "0.3.1", "bl": "1.2.1", "iconv-lite": "0.4.19", - "readable-stream": "2.2.11", + "readable-stream": "2.3.3", "sprintf": "0.1.5" } }, "term-size": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz", - "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=", + "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.4.0" + "execa": "0.7.0" } }, "text-encoding": { @@ -3288,12 +2829,6 @@ } } }, - "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", @@ -3321,27 +2856,21 @@ } }, "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "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" } }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, "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" + "safe-buffer": "5.1.1" } }, "tweetnacl": { @@ -3361,9 +2890,9 @@ } }, "type-detect": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", - "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.6.tgz", + "integrity": "sha512-qZ3bAurt2IXGPR3c57PyaSYEnQiLRwPeS60G9TahElBZsdOABo+iKYch/PhRjSTZJ5/DF08x43XMt9qec2g3ig==", "dev": true }, "typedarray": { @@ -3373,51 +2902,34 @@ "dev": true }, "typeorm": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.1.3.tgz", - "integrity": "sha512-5c+TMBuVqzet2LHrf5ZfkVaa7U89Vr8mlbSxONUQT+l4f+pvFcBHcWNOYFRN9bfrw+kKBGzCavTBYHbm3bmHSQ==", + "version": "0.2.0-alpha.15", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.0-alpha.15.tgz", + "integrity": "sha512-IR9441TER3KZ753qbj2sIja/izzrwWqVnYxUMo75O3b6JltbqETLBZvqyTBbnwc4bpahtKmHA+Mxq2kug+rJEQ==", "requires": { "app-root-path": "2.0.1", "chalk": "2.3.0", - "cli-highlight": "1.1.4", + "cli-highlight": "1.2.3", + "debug": "3.1.0", "dotenv": "4.0.0", "glob": "7.1.2", - "js-yaml": "3.8.4", + "js-yaml": "3.10.0", "mkdirp": "0.5.1", - "reflect-metadata": "0.1.10", + "reflect-metadata": "0.1.12", "xml2js": "0.4.19", "yargonaut": "1.1.2", "yargs": "9.0.1" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "requires": { - "color-convert": "1.9.1" - } + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "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.3.0", - "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" - } - }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -3440,136 +2952,30 @@ } } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "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" + "ms": "2.0.0" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "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": { - "locate-path": "2.0.0" + "number-is-nan": "1.0.1" } }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "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=", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "ansi-regex": "2.1.1" } }, - "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/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "requires": { - "has-flag": "2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "yargs": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", @@ -3601,9 +3007,9 @@ } }, "typescript": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz", - "integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=" }, "typings": { "version": "2.1.1", @@ -3612,9 +3018,9 @@ "dev": true, "requires": { "archy": "1.0.0", - "bluebird": "3.5.0", + "bluebird": "3.5.1", "chalk": "1.1.3", - "cli-truncate": "1.0.0", + "cli-truncate": "1.1.0", "columnify": "1.5.4", "elegant-spinner": "1.0.1", "has-unicode": "2.0.1", @@ -3623,17 +3029,57 @@ "minimist": "1.2.0", "promise-finally": "3.0.0", "typings-core": "2.3.3", - "update-notifier": "2.2.0", + "update-notifier": "2.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "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.1.1" + } + }, + "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", @@ -3649,8 +3095,8 @@ "dev": true, "requires": { "array-uniq": "1.0.3", - "configstore": "3.1.0", - "debug": "2.6.0", + "configstore": "3.1.1", + "debug": "2.6.9", "detect-indent": "5.0.0", "graceful-fs": "4.1.11", "has": "1.0.1", @@ -3661,33 +3107,25 @@ "lockfile": "1.0.3", "make-error-cause": "1.2.2", "mkdirp": "0.5.1", - "object.pick": "1.2.0", + "object.pick": "1.3.0", "parse-json": "2.2.0", - "popsicle": "9.1.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.1", - "rimraf": "2.6.1", + "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.6.1", + "typescript": "2.6.2", "xtend": "4.0.1", "zip-object": "0.1.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } } }, "uglify-js": { @@ -3755,15 +3193,16 @@ "dev": true }, "update-notifier": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz", - "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", + "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.1.0", - "chalk": "1.1.3", - "configstore": "3.1.0", + "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", @@ -3791,9 +3230,9 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", "dev": true }, "validate-npm-package-license": { @@ -3824,17 +3263,6 @@ } } }, - "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.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -3845,25 +3273,25 @@ } }, "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { "isexe": "2.0.0" } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "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": "1.0.2" + "string-width": "2.1.1" } }, "window-size": { @@ -3884,6 +3312,39 @@ "requires": { "string-width": "1.0.2", "strip-ansi": "3.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=" + }, + "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.1" + } + }, + "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" + } + }, + "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.1.1" + } + } } }, "wrappy": { @@ -3892,14 +3353,14 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", - "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", + "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", - "slide": "1.1.6" + "signal-exit": "3.0.2" } }, "xdg-basedir": { @@ -3945,14 +3406,51 @@ "chalk": "1.1.3", "figlet": "1.2.0", "parent-require": "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=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "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" + } + }, + "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.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "yargs": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", - "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.1.tgz", + "integrity": "sha512-7uRL1HZdCbc1QTP+X8mehOPuCYKC/XTaqAPj7gABLfTt6pgLyVRn3QVte4qhtilZouWCvqd1kipgMKl5tKsFiw==", "requires": { - "cliui": "3.2.0", + "cliui": "4.0.0", "decamelize": "1.2.0", "find-up": "2.1.0", "get-caller-file": "1.0.2", @@ -3966,135 +3464,30 @@ "yargs-parser": "8.1.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "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", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "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" - } - } - } - }, - "execa": { - "version": "0.7.0", - "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" - } - }, - "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" - } - }, - "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=" - }, - "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" - } - } - } - }, - "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": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", - "requires": { - "camelcase": "4.1.0" } } } }, "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "requires": { - "camelcase": "3.0.0", - "lodash.assign": "4.2.0" + "camelcase": "4.1.0" }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" } } }, diff --git a/package.json b/package.json index 614b206..1f6db16 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,10 @@ "handlebars": "^4.0.11", "mssql": "^4.0.4", "mysql": "^2.15.0", + "oracledb": "^2.0.15", "pg": "^7.4.0", "reflect-metadata": "^0.1.10", - "typeorm": "^0.1.3", + "typeorm": "^0.2.0-alpha.13", "typescript": "^2.6.1", "yargs": "^10.0.3", "yn": "^2.0.0" @@ -43,6 +44,7 @@ "@types/mocha": "^2.2.44", "@types/mssql": "^4.0.4", "@types/mysql": "2.15.2", + "@types/oracledb": "^1.11.34", "@types/node": "^9.3.0", "@types/pg": "^7.4.1", "@types/sinon": "^4.1.2", @@ -54,7 +56,7 @@ "fs-extra": "^5.0.0", "istanbul": "^0.4.5", "mocha": "^4.0.1", - "remap-istanbul": "^0.9.5", + "remap-istanbul": "^0.10.0", "sinon": "^4.1.2", "sinon-chai": "^2.14.0", "typings": "^2.1.1" diff --git a/src/Engine.ts b/src/Engine.ts index 09aa4fb..7f7fb72 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -3,6 +3,7 @@ import { DatabaseModel } from './models/DatabaseModel' import * as Handlebars from 'handlebars' import fs = require('fs'); import path = require('path') +import * as TomgUtils from './Utils' /** * Engine */ @@ -15,12 +16,12 @@ export class Engine { if (dbModel.entities.length > 0) { this.createModelFromMetadata(dbModel); } else { - console.error('Tables not found in selected database. Skipping creation of typeorm model.'); + TomgUtils.LogFatalError('Tables not found in selected database. Skipping creation of typeorm model.', false); } return true; } - private async getEntitiesInfo(database: string, server: string, port: number, user: string, password: string, schemaName:string, ssl:boolean): Promise { - return await this.driver.GetDataFromServer(database, server, port, user, password,schemaName,ssl) + private async getEntitiesInfo(database: string, server: string, port: number, user: string, password: string, schemaName: string, ssl: boolean): Promise { + return await this.driver.GetDataFromServer(database, server, port, user, password, schemaName, ssl) } private createModelFromMetadata(databaseModel: DatabaseModel) { @@ -29,21 +30,25 @@ export class Engine { let resultPath = this.Options.resultsPath if (!fs.existsSync(resultPath)) fs.mkdirSync(resultPath); - this.createTsConfigFile(resultPath) - this.createTypeOrm(resultPath) - let entitesPath = path.resolve(resultPath, './entities') + 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); + } Handlebars.registerHelper('toLowerCase', function (str) { return str.toLowerCase(); }); - if (!fs.existsSync(entitesPath)) - fs.mkdirSync(entitesPath); - let compliedTemplate = Handlebars.compile(template,{noEscape:true}) + let compliedTemplate = Handlebars.compile(template, { noEscape: true }) databaseModel.entities.forEach(element => { let resultFilePath = path.resolve(entitesPath, element.EntityName + '.ts'); - let rendered =compliedTemplate(element) + let rendered = compliedTemplate(element) fs.writeFileSync(resultFilePath, rendered, { encoding: 'UTF-8', flag: 'w' }) }); } + //TODO:Move to mustache template file private createTsConfigFile(resultPath) { fs.writeFileSync(path.resolve(resultPath, 'tsconfig.json'), `{"compilerOptions": { "lib": ["es5", "es6"], @@ -55,8 +60,9 @@ export class Engine { "sourceMap": true }}`, { encoding: 'UTF-8', flag: 'w' }); } - private createTypeOrm(resultPath) { - fs.writeFileSync(path.resolve(resultPath, 'ormconfig.json'), `[ + private createTypeOrmConfig(resultPath) { + if (this.Options.schemaName == '') { + fs.writeFileSync(path.resolve(resultPath, 'ormconfig.json'), `[ { "name": "default", "driver": { @@ -72,7 +78,28 @@ export class Engine { ] } ]`, { encoding: 'UTF-8', flag: 'w' }); + } + else { + fs.writeFileSync(path.resolve(resultPath, 'ormconfig.json'), `[ + { + "name": "default", + "driver": { + "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}" + }, + "entities": [ + "entities/*.js" + ] + } +]`, { encoding: 'UTF-8', flag: 'w' }); + } } + } export interface EngineOptions { host: string, @@ -82,6 +109,7 @@ export interface EngineOptions { password: string, resultsPath: string, databaseType: string, - schemaName:string, - ssl:boolean -} \ No newline at end of file + schemaName: string, + ssl: boolean, + noConfigs: boolean +} diff --git a/src/Utils.ts b/src/Utils.ts new file mode 100644 index 0000000..3d34d96 --- /dev/null +++ b/src/Utils.ts @@ -0,0 +1,12 @@ + +import * as data from './../../package.json' +export function LogFatalError(errText: string, isABug: boolean = true, errObject?: any) { + let x = data; + console.error(`Fatal error occured.`) + console.error(`${x.name}@${x.version} node@${process.version}`) + console.error(`Fatal error occured in typeorm-model-generator.`) + console.error(`If this is a bug please open an issue including this log on ${x.bugs.url}`) + if (isABug && !errObject) errObject = new Error().stack + if (!!errObject) console.error(errObject) + process.abort() +} diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 707a86c..a63850c 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -4,22 +4,22 @@ import { DatabaseModel } from './../models/DatabaseModel' * AbstractDriver */ export abstract class AbstractDriver { - async GetDataFromServer(database: string, server: string, port: number, user: string, password: string, schema:string, ssl:boolean): Promise { + async GetDataFromServer(database: string, server: string, port: number, user: string, password: string, schema: string, ssl: boolean): Promise { let dbModel = {}; - await this.ConnectToServer(database, server, port, user, password,ssl); + await this.ConnectToServer(database, server, port, user, password, ssl); dbModel.entities = await this.GetAllTables(schema); - await this.GetCoulmnsFromEntity(dbModel.entities,schema); - await this.GetIndexesFromEntity(dbModel.entities,schema); - dbModel.entities = await this.GetRelations(dbModel.entities,schema); + await this.GetCoulmnsFromEntity(dbModel.entities, schema); + await this.GetIndexesFromEntity(dbModel.entities, schema); + dbModel.entities = await this.GetRelations(dbModel.entities, schema); await this.DisconnectFromServer(); this.FindPrimaryColumnsFromIndexes(dbModel) return dbModel; } - abstract async ConnectToServer(database: string, server: string, port: number, user: string, password: string,ssl:boolean); - abstract async GetAllTables(schema:string): Promise - abstract async GetCoulmnsFromEntity(entities: EntityInfo[],schema:string): Promise; - abstract async GetIndexesFromEntity(entities: EntityInfo[],schema:string): Promise; - abstract async GetRelations(entities: EntityInfo[],schema:string): Promise; + abstract async ConnectToServer(database: string, server: string, port: number, user: string, password: string, ssl: boolean); + abstract async GetAllTables(schema: string): Promise + abstract async GetCoulmnsFromEntity(entities: EntityInfo[], schema: string): Promise; + abstract async GetIndexesFromEntity(entities: EntityInfo[], schema: string): Promise; + abstract async GetRelations(entities: EntityInfo[], schema: string): Promise; abstract async FindPrimaryColumnsFromIndexes(dbModel: DatabaseModel); abstract async DisconnectFromServer(); @@ -27,4 +27,4 @@ export abstract class AbstractDriver { abstract async DropDB(dbName: string); abstract async UseDB(dbName: string); abstract async CheckIfDBExists(dbName: string): Promise; -} \ No newline at end of file +} diff --git a/src/drivers/MariaDbDriver.ts b/src/drivers/MariaDbDriver.ts index 3595d97..db75c97 100644 --- a/src/drivers/MariaDbDriver.ts +++ b/src/drivers/MariaDbDriver.ts @@ -9,6 +9,6 @@ import { MysqlDriver } from './MysqlDriver'; * MariaDb */ export class MariaDbDriver extends MysqlDriver { - readonly EngineName:string = 'MariaDb' - -} \ No newline at end of file + readonly EngineName: string = 'MariaDb' + +} diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 2fa64d4..488beaf 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -4,6 +4,8 @@ import { ColumnInfo } from './../models/ColumnInfo' import { EntityInfo } from './../models/EntityInfo' import { RelationInfo } from './../models/RelationInfo' import { DatabaseModel } from './../models/DatabaseModel' +import * as TomgUtils from './../Utils' + /** * MssqlDriver */ @@ -12,7 +14,7 @@ export class MssqlDriver extends AbstractDriver { dbModel.entities.forEach(entity => { let primaryIndex = entity.Indexes.find(v => v.isPrimaryKey); if (!primaryIndex) { - console.error(`Table ${entity.EntityName} has no PK.`) + TomgUtils.LogFatalError(`Table ${entity.EntityName} has no PK.`, false) return; } entity.Columns.forEach(col => { @@ -194,7 +196,7 @@ export class MssqlDriver extends AbstractDriver { colInfo.sql_type = "text" break; default: - console.error("Unknown column type:" + resp.DATA_TYPE); + TomgUtils.LogFatalError("Unknown column type:" + resp.DATA_TYPE); break; } @@ -209,7 +211,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, @@ -217,19 +219,19 @@ export class MssqlDriver extends AbstractDriver { ind.is_primary_key -- ,ic.is_descending_key, -- ic.is_included_column -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 +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 +WHERE t.is_ms_shipped = 0 and s.name='${schema}' -ORDER BY +ORDER BY t.name, ind.name, ind.index_id, ic.key_ordinal;`)).recordset; entities.forEach((ent) => { response.filter((filterVal) => { @@ -268,32 +270,32 @@ ORDER BY onDelete: "RESTRICT" | "CASCADE" | "SET NULL", onUpdate: "RESTRICT" | "CASCADE" | "SET NULL", object_id: number }[] - = (await request.query(`select - parentTable.name as TableWithForeignKey, + = (await request.query(`select + parentTable.name as TableWithForeignKey, fkc.constraint_column_id as FK_PartNo, parentColumn.name as ForeignKeyColumn, - referencedTable.name as TableReferenced, + referencedTable.name as TableReferenced, referencedColumn.name as ForeignKeyColumnReferenced, fk.delete_referential_action_desc as onDelete, fk.update_referential_action_desc as onUpdate, fk.object_id -from - sys.foreign_keys fk -inner join +from + sys.foreign_keys fk +inner join sys.foreign_key_columns as fkc on fkc.constraint_object_id=fk.object_id -inner join +inner join sys.tables as parentTable on fkc.parent_object_id = parentTable.object_id -inner join +inner join sys.columns as parentColumn on fkc.parent_object_id = parentColumn.object_id and fkc.parent_column_id = parentColumn.column_id -inner join +inner join sys.tables as referencedTable on fkc.referenced_object_id = referencedTable.object_id -inner join +inner join sys.columns as referencedColumn on fkc.referenced_object_id = referencedColumn.object_id and fkc.referenced_column_id = referencedColumn.column_id inner join sys.schemas as parentSchema on parentSchema.schema_id=parentTable.schema_id -where +where fk.is_disabled=0 and fk.is_ms_shipped=0 and parentSchema.name='${schema}' -order by +order by TableWithForeignKey, FK_PartNo`)).recordset; let relationsTemp: RelationTempInfo[] = []; response.forEach((resp) => { @@ -319,28 +321,28 @@ order by return entitity.EntityName == relationTmp.ownerTable; }) if (!ownerEntity) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.ownerTable}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.ownerTable}.`) return; } let referencedEntity = entities.find((entitity) => { return entitity.EntityName == relationTmp.referencedTable; }) if (!referencedEntity) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.referencedTable}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.referencedTable}.`) return; } let ownerColumn = ownerEntity.Columns.find((column) => { return column.name == relationTmp.ownerColumnsNames[0]; }) if (!ownerColumn) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.ownerTable}.${ownerColumn}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.ownerTable}.${ownerColumn}.`) return; } let relatedColumn = referencedEntity.Columns.find((column) => { return column.name == relationTmp.referencedColumnsNames[0]; }) if (!relatedColumn) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.referencedTable}.${relatedColumn}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.referencedTable}.${relatedColumn}.`) return; } let ownColumn: ColumnInfo = ownerColumn; @@ -359,15 +361,15 @@ order by isOneToMany = false; } let ownerRelation = new RelationInfo() - let columnName = ownerEntity.EntityName.toLowerCase() + (isOneToMany ? 's' : '') + 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(); + }).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; + }).length == 0) break; } } ownerRelation.actionOnDelete = relationTmp.actionOnDelete @@ -440,9 +442,7 @@ order by resolve(true) } else { - console.error('Error connecting to MSSQL Server.') - console.error(err.message) - process.abort() + TomgUtils.LogFatalError('Error connecting to MSSQL Server.', false, err.message) reject(err) } }); @@ -468,4 +468,4 @@ order by let resp = await request.query(`SELECT name FROM master.sys.databases WHERE name = N'${dbName}' `) return resp.recordset.length > 0; } -} \ No newline at end of file +} diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index e279b47..9e370c5 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -4,6 +4,7 @@ import { ColumnInfo } from './../models/ColumnInfo' import { EntityInfo } from './../models/EntityInfo' import { RelationInfo } from './../models/RelationInfo' import { DatabaseModel } from './../models/DatabaseModel' +import * as TomgUtils from './../Utils' /** * MysqlDriver */ @@ -14,7 +15,7 @@ export class MysqlDriver extends AbstractDriver { dbModel.entities.forEach(entity => { let primaryIndex = entity.Indexes.find(v => v.isPrimaryKey); if (!primaryIndex) { - console.error(`Table ${entity.EntityName} has no PK.`) + TomgUtils.LogFatalError(`Table ${entity.EntityName} has no PK.`, false) return; } entity.Columns.forEach(col => { @@ -196,7 +197,7 @@ export class MysqlDriver extends AbstractDriver { colInfo.sql_type = "json" break; default: - console.error("Unknown column type:" + resp.DATA_TYPE); + TomgUtils.LogFatalError("Unknown column type:" + resp.DATA_TYPE); break; } if (colInfo.sql_type) ent.Columns.push(colInfo); @@ -208,7 +209,7 @@ export class MysqlDriver extends AbstractDriver { let response = await this.ExecQuery<{ TableName: string, IndexName: string, ColumnName: string, is_unique: number, is_primary_key: number//, is_descending_key: number//, is_included_column: number - }>(`SELECT TABLE_NAME TableName,INDEX_NAME IndexName,COLUMN_NAME ColumnName,CASE WHEN NON_UNIQUE=0 THEN 1 ELSE 0 END is_unique, + }>(`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(); @@ -248,22 +249,22 @@ export class MysqlDriver extends AbstractDriver { TableReferenced: string, ForeignKeyColumnReferenced: string, onDelete: "RESTRICT" | "CASCADE" | "SET NULL", onUpdate: "RESTRICT" | "CASCADE" | "SET NULL", object_id: string - }>(`SELECT - CU.TABLE_NAME TableWithForeignKey, + }>(`SELECT + CU.TABLE_NAME TableWithForeignKey, CU.ORDINAL_POSITION FK_PartNo, - CU.COLUMN_NAME ForeignKeyColumn, - CU.REFERENCED_TABLE_NAME TableReferenced, + CU.COLUMN_NAME ForeignKeyColumn, + CU.REFERENCED_TABLE_NAME TableReferenced, CU.REFERENCED_COLUMN_NAME ForeignKeyColumnReferenced, RC.DELETE_RULE onDelete, RC.UPDATE_RULE onUpdate, CU.CONSTRAINT_NAME object_id FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU - JOIN + JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC ON CU.CONSTRAINT_NAME=RC.CONSTRAINT_NAME WHERE - TABLE_SCHEMA = SCHEMA() - AND CU.REFERENCED_TABLE_NAME IS NOT NULL; + TABLE_SCHEMA = SCHEMA() + AND CU.REFERENCED_TABLE_NAME IS NOT NULL; `); let relationsTemp: RelationTempInfo[] = []; response.forEach((resp) => { @@ -289,28 +290,28 @@ export class MysqlDriver extends AbstractDriver { return entitity.EntityName == relationTmp.ownerTable; }) if (!ownerEntity) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.ownerTable}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.ownerTable}.`) return; } let referencedEntity = entities.find((entitity) => { return entitity.EntityName == relationTmp.referencedTable; }) if (!referencedEntity) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.referencedTable}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.referencedTable}.`) return; } let ownerColumn = ownerEntity.Columns.find((column) => { return column.name == relationTmp.ownerColumnsNames[0]; }) if (!ownerColumn) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.ownerTable}.${ownerColumn}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.ownerTable}.${ownerColumn}.`) return; } let relatedColumn = referencedEntity.Columns.find((column) => { return column.name == relationTmp.referencedColumnsNames[0]; }) if (!relatedColumn) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.referencedTable}.${relatedColumn}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.referencedTable}.${relatedColumn}.`) return; } let ownColumn: ColumnInfo = ownerColumn; @@ -333,7 +334,7 @@ export class MysqlDriver extends AbstractDriver { if (referencedEntity.Columns.filter((filterVal) => { return filterVal.name == columnName; }).length > 0) { - for (let i=2;i<=ownerEntity.Columns.length;i++){ + 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; @@ -391,9 +392,7 @@ export class MysqlDriver extends AbstractDriver { resolve(true) } else { - console.error(`Error disconnecting to ${this.EngineName} Server.`) - console.error(err.message) - process.abort() + TomgUtils.LogFatalError(`Error disconnecting to ${this.EngineName} Server.`, false, err.message) reject(err) } }); @@ -440,9 +439,7 @@ export class MysqlDriver extends AbstractDriver { resolve(true) } else { - console.error(`Error connecting to ${this.EngineName} Server.`) - console.error(err.message) - process.abort() + TomgUtils.LogFatalError(`Error connecting to ${this.EngineName} Server.`, false, err.message) reject(err) } }); @@ -480,4 +477,4 @@ export class MysqlDriver extends AbstractDriver { await promise; return ret; } -} \ No newline at end of file +} diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts new file mode 100644 index 0000000..b0f8d34 --- /dev/null +++ b/src/drivers/OracleDriver.ts @@ -0,0 +1,306 @@ +import { AbstractDriver } from './AbstractDriver' +import { ColumnInfo } from './../models/ColumnInfo' +import { EntityInfo } from './../models/EntityInfo' +import { RelationInfo } from './../models/RelationInfo' +import { DatabaseModel } from './../models/DatabaseModel' +import { promisify } from 'util' +import { request } from 'https'; +import * as TomgUtils from './../Utils' + + +/** + * OracleDriver + */ +export class OracleDriver extends AbstractDriver { + Oracle: any; + constructor() { + super(); + try { + this.Oracle = require('oracledb') + } catch (error) { + TomgUtils.LogFatalError('', false, error); + throw error; + } + + } + + + FindPrimaryColumnsFromIndexes(dbModel: DatabaseModel) { + dbModel.entities.forEach(entity => { + let primaryIndex = entity.Indexes.find(v => v.isPrimaryKey); + if (!primaryIndex) { + TomgUtils.LogFatalError(`Table ${entity.EntityName} has no PK.`, false) + return; + } + entity.Columns.forEach(col => { + if (primaryIndex!.columns.some(cIndex => cIndex.name == col.name)) col.isPrimary = true + }) + }); + } + + + + + async GetAllTables(schema: string): Promise { + + let response: any[][] = (await this.Connection.execute(` SELECT TABLE_NAME FROM all_tables WHERE owner = (select user from dual)`)).rows!; + let ret: EntityInfo[] = []; + response.forEach((val) => { + let ent: EntityInfo = new EntityInfo(); + ent.EntityName = val[0]; + ent.Columns = []; + ent.Indexes = []; + ret.push(ent); + }) + return ret; + } + async GetCoulmnsFromEntity(entities: EntityInfo[], schema: string): Promise { + let response: any[][] = (await this.Connection.execute(`SELECT TABLE_NAME, COLUMN_NAME, DATA_DEFAULT, NULLABLE, DATA_TYPE, DATA_LENGTH, + DATA_PRECISION, DATA_SCALE, IDENTITY_COLUMN + FROM USER_TAB_COLUMNS`)).rows!; + + entities.forEach((ent) => { + response.filter((filterVal) => { + return filterVal[0] == ent.EntityName; + }).forEach((resp) => { + let colInfo: ColumnInfo = new ColumnInfo(); + colInfo.name = resp[1]; + colInfo.is_nullable = resp[3] == 'Y' ? true : false; + colInfo.is_generated = resp[8] == 'YES' ? true : false; + colInfo.default = resp[2]; + switch (resp[4].toLowerCase()) { + case "number": + colInfo.ts_type = "number" + colInfo.sql_type = "int" + colInfo.char_max_lenght = resp[5] > 0 ? resp[5] : null; + break; + case "varchar2": + colInfo.ts_type = "number" + colInfo.sql_type = "smallint" + colInfo.char_max_lenght = resp[5] > 0 ? resp[5] : null; + break; + default: + TomgUtils.LogFatalError("Unknown column type:" + resp[4]); + break; + } + + if (colInfo.sql_type) ent.Columns.push(colInfo); + }) + }) + return entities; + } + async GetIndexesFromEntity(entities: EntityInfo[], schema: string): Promise { + let response: any[][] = (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 + FROM USER_INDEXES ind + JOIN USER_IND_COLUMNS col ON ind.INDEX_NAME=col.INDEX_NAME + LEFT JOIN USER_CONSTRAINTS uc ON uc.INDEX_NAME = ind.INDEX_NAME + ORDER BY col.INDEX_NAME ASC ,col.COLUMN_POSITION ASC`)).rows!; + + entities.forEach((ent) => { + response.filter((filterVal) => { + return filterVal[0] == ent.EntityName; + }).forEach((resp) => { + let indexInfo: IndexInfo = {}; + let indexColumnInfo: IndexColumnInfo = {}; + if (ent.Indexes.filter((filterVal) => { + return filterVal.name == resp[1] + }).length > 0) { + indexInfo = ent.Indexes.filter((filterVal) => { + return filterVal.name == resp[1] + })[0]; + } else { + indexInfo.columns = []; + indexInfo.name = resp[1]; + indexInfo.isUnique = resp[3] == 'UNIQUE' ? true : false; + indexInfo.isPrimaryKey = resp[4] == 1 ? true : false; + ent.Indexes.push(indexInfo); + } + indexColumnInfo.name = resp[2]; + // indexColumnInfo.isIncludedColumn = resp.is_included_column == 1 ? true : false; + // indexColumnInfo.isDescending = resp.is_descending_key == 1 ? true : false; + indexInfo.columns.push(indexColumnInfo); + + }) + }) + + return entities; + } + async GetRelations(entities: EntityInfo[], schema: string): Promise { + let response: any[][] = (await this.Connection.execute(`select owner.TABLE_NAME ownTbl,ownCol.POSITION,ownCol.COLUMN_NAME, + child.TABLE_NAME,childCol.COLUMN_NAME, + owner.DELETE_RULE, + 4,owner.CONSTRAINT_NAME + from user_constraints owner + join user_constraints child on owner.r_constraint_name=child.CONSTRAINT_NAME and child.constraint_type in ('P','U') + JOIN USER_CONS_COLUMNS ownCol ON owner.CONSTRAINT_NAME = ownCol.CONSTRAINT_NAME + JOIN USER_CONS_COLUMNS childCol ON child.CONSTRAINT_NAME = childCol.CONSTRAINT_NAME AND ownCol.POSITION=childCol.POSITION + ORDER BY ownTbl ASC, owner.CONSTRAINT_NAME ASC, ownCol.POSITION ASC`)).rows!; + + + let relationsTemp: RelationTempInfo[] = []; + response.forEach((resp) => { + let rels = relationsTemp.find((val) => { + return val.object_id == resp[6]; + }) + if (rels == undefined) { + rels = {}; + rels.ownerColumnsNames = []; + rels.referencedColumnsNames = []; + rels.actionOnDelete = resp[5]; + rels.actionOnUpdate = "NO ACTION"; + rels.object_id = resp[6]; + rels.ownerTable = resp[0]; + rels.referencedTable = resp[3]; + relationsTemp.push(rels); + } + rels.ownerColumnsNames.push(resp[2]); + rels.referencedColumnsNames.push(resp[4]); + }) + relationsTemp.forEach((relationTmp) => { + let ownerEntity = entities.find((entitity) => { + return entitity.EntityName == relationTmp.ownerTable; + }) + if (!ownerEntity) { + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.ownerTable}.`) + return; + } + let referencedEntity = entities.find((entitity) => { + return entitity.EntityName == relationTmp.referencedTable; + }) + if (!referencedEntity) { + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.referencedTable}.`) + return; + } + let ownerColumn = ownerEntity.Columns.find((column) => { + return column.name == relationTmp.ownerColumnsNames[0]; + }) + if (!ownerColumn) { + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.ownerTable}.${ownerColumn}.`) + return; + } + let relatedColumn = referencedEntity.Columns.find((column) => { + return column.name == relationTmp.referencedColumnsNames[0]; + }) + if (!relatedColumn) { + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.referencedTable}.${relatedColumn}.`) + return; + } + let ownColumn: ColumnInfo = ownerColumn; + let isOneToMany: boolean; + isOneToMany = false; + let index = ownerEntity.Indexes.find( + (index) => { + return index.isUnique && index.columns.some(col => { + return col.name == ownerColumn!.name + }) + } + ) + if (!index) { + isOneToMany = true; + } else { + isOneToMany = false; + } + 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.relatedTable = relationTmp.referencedTable + ownerRelation.ownerTable = relationTmp.ownerTable + ownerRelation.ownerColumn = columnName + ownerRelation.relationType = isOneToMany ? "ManyToOne" : "OneToOne" + ownerColumn.relations.push(ownerRelation) + if (isOneToMany) { + let col = new ColumnInfo() + col.name = columnName + let referencedRelation = new RelationInfo(); + col.relations.push(referencedRelation) + referencedRelation.actionOnDelete = relationTmp.actionOnDelete + referencedRelation.actionOnUpdate = relationTmp.actionOnUpdate + referencedRelation.isOwner = false + referencedRelation.relatedColumn = ownerColumn.name + referencedRelation.relatedTable = relationTmp.ownerTable + referencedRelation.ownerTable = relationTmp.referencedTable + referencedRelation.ownerColumn = relatedColumn.name.toLowerCase() + referencedRelation.relationType = "OneToMany" + referencedEntity.Columns.push(col) + } else { + let col = new ColumnInfo() + col.name = columnName + let referencedRelation = new RelationInfo(); + col.relations.push(referencedRelation) + referencedRelation.actionOnDelete = relationTmp.actionOnDelete + referencedRelation.actionOnUpdate = relationTmp.actionOnUpdate + referencedRelation.isOwner = false + referencedRelation.relatedColumn = ownerColumn.name + referencedRelation.relatedTable = relationTmp.ownerTable + referencedRelation.ownerTable = relationTmp.referencedTable + referencedRelation.ownerColumn = relatedColumn.name.toLowerCase() + referencedRelation.relationType = "OneToOne" + + referencedEntity.Columns.push(col) + } + }) + return entities; + } + async DisconnectFromServer() { + if (this.Connection) + await this.Connection.close(); + } + + private Connection: any/*Oracle.IConnection*/; + async ConnectToServer(database: string, server: string, port: number, user: string, password: string, ssl: boolean) { + let config: any/*Oracle.IConnectionAttributes*/ = { + user: user, + password: password, + // connectString: `${server}:${port}/ORCLCDB.localdomain/${database}`, + connectString: `${server}:${port}/${database}`, + externalAuth: ssl + } + + + let that = this; + let promise = new Promise( + (resolve, reject) => { + this.Oracle.getConnection( + config, + function (err, connection) { + if (!err) { + //Connection successfull + that.Connection = connection + resolve(true) + } + else { + TomgUtils.LogFatalError('Error connecting to Oracle Server.', false, err.message) + reject(err) + } + + }); + } + ) + + await promise; + } + + + async CreateDB(dbName: string) { + } + async UseDB(dbName: string) { + } + async DropDB(dbName: string) { + } + async CheckIfDBExists(dbName: string): Promise { + return true; + } +} diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index f1d7176..fbac97a 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -4,6 +4,7 @@ import { ColumnInfo } from './../models/ColumnInfo' import { EntityInfo } from './../models/EntityInfo' import { RelationInfo } from './../models/RelationInfo' import { DatabaseModel } from './../models/DatabaseModel' +import * as TomgUtils from './../Utils' /** * PostgresDriver */ @@ -14,7 +15,7 @@ export class PostgresDriver extends AbstractDriver { dbModel.entities.forEach(entity => { let primaryIndex = entity.Indexes.find(v => v.isPrimaryKey); if (!primaryIndex) { - console.error(`Table ${entity.EntityName} has no PK.`) + TomgUtils.LogFatalError(`Table ${entity.EntityName} has no PK.`, false) return; } entity.Columns.forEach(col => { @@ -116,7 +117,7 @@ export class PostgresDriver extends AbstractDriver { break; case "timestamp without time zone": colInfo.ts_type = "Date" - colInfo.sql_type = "datetime" + colInfo.sql_type = "timestamp" break; case "timestamp with time zone": colInfo.ts_type = "Date" @@ -205,7 +206,7 @@ export class PostgresDriver extends AbstractDriver { break; default: - console.error("Unknown column type:" + resp.data_type); + TomgUtils.LogFatalError("Unknown column type:" + resp.data_type); break; } @@ -348,28 +349,28 @@ export class PostgresDriver extends AbstractDriver { return entitity.EntityName == relationTmp.ownerTable; }) if (!ownerEntity) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.ownerTable}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.ownerTable}.`) return; } let referencedEntity = entities.find((entitity) => { return entitity.EntityName == relationTmp.referencedTable; }) if (!referencedEntity) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.referencedTable}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity model ${relationTmp.referencedTable}.`) return; } let ownerColumn = ownerEntity.Columns.find((column) => { return column.name == relationTmp.ownerColumnsNames[0]; }) if (!ownerColumn) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.ownerTable}.${ownerColumn}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.ownerTable}.${ownerColumn}.`) return; } let relatedColumn = referencedEntity.Columns.find((column) => { return column.name == relationTmp.referencedColumnsNames[0]; }) if (!relatedColumn) { - console.error(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.referencedTable}.${relatedColumn}.`) + TomgUtils.LogFatalError(`Relation between tables ${relationTmp.ownerTable} and ${relationTmp.referencedTable} didn't found entity column ${relationTmp.referencedTable}.${relatedColumn}.`) return; } let ownColumn: ColumnInfo = ownerColumn; @@ -388,15 +389,15 @@ export class PostgresDriver extends AbstractDriver { isOneToMany = false; } let ownerRelation = new RelationInfo() - let columnName = ownerEntity.EntityName.toLowerCase() + (isOneToMany ? 's' : '') + 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(); + }).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; + }).length == 0) break; } } ownerRelation.actionOnDelete = relationTmp.actionOnDelete @@ -451,9 +452,7 @@ export class PostgresDriver extends AbstractDriver { resolve(true) } else { - console.error('Error connecting to Postgres Server.') - console.error(err.message) - process.abort() + TomgUtils.LogFatalError('Error connecting to Postgres Server.', false, err.message) reject(err) } }); @@ -481,9 +480,7 @@ export class PostgresDriver extends AbstractDriver { resolve(true) } else { - console.error('Error connecting to Postgres Server.') - console.error(err.message) - process.abort() + TomgUtils.LogFatalError('Error connecting to Postgres Server.', false, err.message) reject(err) } }); @@ -507,4 +504,4 @@ export class PostgresDriver extends AbstractDriver { let resp = await this.Connection.query(`SELECT datname FROM pg_database WHERE datname ='${dbName}' `) return resp.rowCount > 0; } -} \ No newline at end of file +} diff --git a/src/entity.mst b/src/entity.mst index eef4c55..bea2940 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -15,14 +15,14 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Joi default:"{{.}}",{{/default}}{{#numericPrecision}} precision:{{.}},{{/numericPrecision}}{{#numericScale}} scale:{{.}},{{/numericScale}}{{#isPrimary}} - primary:{{isPrimary}},{{/isPrimary}} + primary:{{isPrimary}},{{/isPrimary}} }) {{name}}:{{ts_type}}; {{/relations}}{{#relations}} @{{relationType}}(type=>{{relatedTable}}, {{../name}}=>{{../name}}.{{#if isOwner}}{{ownerColumn}}{{else}}{{relatedColumn}}{{/if}}){{#isOwner}} - @JoinColumn(){{/isOwner}} + @JoinColumn({name:'{{../name}}'}){{/isOwner}} {{#if isOneToMany}}{{../name}}:{{relatedTable}}[]; {{else}}{{../name}}:{{relatedTable}}; {{/if}}{{/relations}} {{/Columns}} -} \ No newline at end of file +} diff --git a/src/index.ts b/src/index.ts index 3b12093..ebe42e5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,8 +3,10 @@ import { MssqlDriver } from './drivers/MssqlDriver'; import { PostgresDriver } from "./drivers/PostgresDriver"; 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') @@ -50,9 +52,14 @@ var argv = Yargs alias: 'schema', describe: 'Schema name to create model from. Only for mssql and postgres.' }) - .option('ssl',{ - boolean:true, - default:false + .option('ssl', { + boolean: true, + default: false + }) + .option('noConfig', { + boolean: true, + describe: `Doesn't create tsconfig.json and ormconfig.json`, + default: false }) .argv; @@ -79,9 +86,12 @@ switch (argv.e) { driver = new MysqlDriver(); standardPort = 3306; break; + case 'oracle': + driver = new OracleDriver(); + standardPort = 1521; + break; default: - console.error('Database engine not recognized.') - process.abort(); + TomgUtils.LogFatalError('Database engine not recognized.', false) throw new Error('Database engine not recognized.'); } @@ -95,11 +105,11 @@ let engine = new Engine( databaseType: argv.e, resultsPath: argv.o, schemaName: argv.s || standardSchema, - ssl:argv.ssl + ssl: argv.ssl, + noConfigs: argv.noConfig }); console.log(`[${new Date().toLocaleTimeString()}] Starting creation of model classes.`); engine.createModelFromDatabase().then(() => { console.info(`[${new Date().toLocaleTimeString()}] Typeorm model classes created.`) }) - diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index 3c241c2..97997e5 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -22,5 +22,3 @@ export class ColumnInfo { } } - - diff --git a/src/models/DatabaseModel.ts b/src/models/DatabaseModel.ts index c05eaff..411534e 100644 --- a/src/models/DatabaseModel.ts +++ b/src/models/DatabaseModel.ts @@ -1,4 +1,4 @@ -import {EntityInfo} from './EntityInfo' +import { EntityInfo } from './EntityInfo' export class DatabaseModel { entities: EntityInfo[]; config: { @@ -6,11 +6,11 @@ export class DatabaseModel { cascadeUpdate: boolean, cascadeRemove: boolean, } - relationImports():any{ - let that=this; - return function(text, render) { - if ('l'!=render(text)) return `import {${render(text)}} from "./${render(text)}"` - else return ''; + relationImports(): any { + let that = this; + return function (text, render) { + if ('l' != render(text)) return `import {${render(text)}} from "./${render(text)}"` + else return ''; + } } - } -} \ No newline at end of file +} diff --git a/src/models/EntityInfo.ts b/src/models/EntityInfo.ts index 68c4a3a..f3fe230 100644 --- a/src/models/EntityInfo.ts +++ b/src/models/EntityInfo.ts @@ -8,23 +8,23 @@ export class EntityInfo { Indexes: IndexInfo[]; relationImports(): any { - var returnString = ""; - var imports: string[] = []; - this.Columns.forEach((column) => { - column.relations.forEach( - (relation) => { - if (this.EntityName!=relation.relatedTable) + var returnString = ""; + var imports: string[] = []; + this.Columns.forEach((column) => { + column.relations.forEach( + (relation) => { + if (this.EntityName != relation.relatedTable) imports.push(relation.relatedTable); - } - ) - }); - imports.filter(function (elem, index, self) { - return index == self.indexOf(elem); - }).forEach((imp)=>{ - returnString+=`import {${imp}} from './${imp}'\n` - }) + } + ) + }); + imports.filter(function (elem, index, self) { + return index == self.indexOf(elem); + }).forEach((imp) => { + returnString += `import {${imp}} from './${imp}'\n` + }) - return returnString; + return returnString; } - -} \ No newline at end of file + +} diff --git a/src/models/IndexColumnInfo.ts b/src/models/IndexColumnInfo.ts index 1d9e579..5513189 100644 --- a/src/models/IndexColumnInfo.ts +++ b/src/models/IndexColumnInfo.ts @@ -1,5 +1,5 @@ -interface IndexColumnInfo{ - name:string, +interface IndexColumnInfo { + name: string, //isDescending:boolean, // isIncludedColumn:boolean -} \ No newline at end of file +} diff --git a/src/models/IndexInfo.ts b/src/models/IndexInfo.ts index ea9b74a..3fc7540 100644 --- a/src/models/IndexInfo.ts +++ b/src/models/IndexInfo.ts @@ -2,8 +2,8 @@ * IndexInfo */ interface IndexInfo { - name:string, - columns:IndexColumnInfo[], - isUnique:boolean, - isPrimaryKey:boolean, + name: string, + columns: IndexColumnInfo[], + isUnique: boolean, + isPrimaryKey: boolean, } diff --git a/src/models/RelationInfo.ts b/src/models/RelationInfo.ts index eb7d0b7..f68ffce 100644 --- a/src/models/RelationInfo.ts +++ b/src/models/RelationInfo.ts @@ -1,4 +1,5 @@ -export class RelationInfo { [x: string]: any; +export class RelationInfo { + [x: string]: any; isOwner: boolean relationType: "OneToOne" | "OneToMany" | "ManyToOne" @@ -13,4 +14,4 @@ export class RelationInfo { [x: string]: any; return this.relationType == "OneToMany" } -} \ No newline at end of file +} diff --git a/src/models/RelationTempInfo.ts b/src/models/RelationTempInfo.ts index 0837f6e..94a82ec 100644 --- a/src/models/RelationTempInfo.ts +++ b/src/models/RelationTempInfo.ts @@ -1,9 +1,9 @@ -interface RelationTempInfo{ - ownerTable:string, - ownerColumnsNames:string[], - referencedTable:string, - referencedColumnsNames:string[], - actionOnDelete:"RESTRICT"|"CASCADE"|"SET NULL"|"NO ACTION", - actionOnUpdate:"RESTRICT"|"CASCADE"|"SET NULL"|"NO ACTION", - object_id:number|string -} \ No newline at end of file +interface RelationTempInfo { + ownerTable: string, + ownerColumnsNames: string[], + referencedTable: string, + referencedColumnsNames: string[], + actionOnDelete: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION", + actionOnUpdate: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION", + object_id: number | string +} diff --git a/src/typings.d.ts b/src/typings.d.ts new file mode 100644 index 0000000..4b3471f --- /dev/null +++ b/src/typings.d.ts @@ -0,0 +1,4 @@ +declare module "*.json" { + const value: any; + export default value; +} diff --git a/test/drivers/MssqlDriver.test.ts b/test/drivers/MssqlDriver.test.ts index bbcb22a..70a547f 100644 --- a/test/drivers/MssqlDriver.test.ts +++ b/test/drivers/MssqlDriver.test.ts @@ -7,19 +7,19 @@ 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{ +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{ + toTable(): Table { return new Table(); } - } +} describe('MssqlDriver', function () { let driver: MssqlDriver @@ -48,10 +48,10 @@ describe('MssqlDriver', function () { .returns( { query: (q) => { - - let response=new fakeResponse(); - - response.recordset=new fakeRecordset(); + + let response = new fakeResponse(); + + response.recordset = new fakeRecordset(); response.recordset.push({ TABLE_SCHEMA: 'schema', TABLE_NAME: 'name' }) return response; } @@ -71,13 +71,13 @@ describe('MssqlDriver', function () { .returns( { query: (q) => { - let response=new fakeResponse(); - response.recordset=new fakeRecordset(); + 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, - IsIdentity:1 + IsIdentity: 1 }) return response; } @@ -97,7 +97,7 @@ describe('MssqlDriver', function () { default: 'a', is_nullable: true, isPrimary: false, - is_generated:true, + is_generated: true, name: 'name', numericPrecision: null, numericScale: null, @@ -105,10 +105,10 @@ describe('MssqlDriver', function () { ts_type: 'number', relations: [] }) - let result = await driver.GetCoulmnsFromEntity(entities,'schema'); + let result = await driver.GetCoulmnsFromEntity(entities, 'schema'); expect(result).to.be.deep.equal(expected) }) it('should find primary indexes') it('should get indexes info') it('should get relations info') -}) \ No newline at end of file +}) diff --git a/test/integration/entityTypes.test.ts b/test/integration/entityTypes.test.ts index 6102403..6e33b2c 100644 --- a/test/integration/entityTypes.test.ts +++ b/test/integration/entityTypes.test.ts @@ -30,9 +30,9 @@ describe("Platform specyfic types", async function () { let examplesPathTS = path.resolve(process.cwd(), 'test/integration/entityTypes') let files = fs.readdirSync(examplesPathTS) - for (let folder of files) { + for (let dbDriver of dbDrivers) { - for (let dbDriver of dbDrivers) { + for (let folder of files) { if (dbDriver == folder) { it(dbDriver, async function () { diff --git a/test/integration/entityTypes/mariadb/entity/Post.ts b/test/integration/entityTypes/mariadb/entity/Post.ts index 2b25f57..61d4028 100644 --- a/test/integration/entityTypes/mariadb/entity/Post.ts +++ b/test/integration/entityTypes/mariadb/entity/Post.ts @@ -91,4 +91,4 @@ export class Post { // @Column("simple-array") // simpleArray: string[]; -} \ No newline at end of file +} diff --git a/test/integration/entityTypes/mssql/entity/Post.ts b/test/integration/entityTypes/mssql/entity/Post.ts index 43b4c19..39311cf 100644 --- a/test/integration/entityTypes/mssql/entity/Post.ts +++ b/test/integration/entityTypes/mssql/entity/Post.ts @@ -118,4 +118,4 @@ export class Post { // @Column("simple-array") // simpleArray: string[]; -} \ No newline at end of file +} diff --git a/test/integration/entityTypes/mysql/entity/Post.ts b/test/integration/entityTypes/mysql/entity/Post.ts index 8149e01..16a217e 100644 --- a/test/integration/entityTypes/mysql/entity/Post.ts +++ b/test/integration/entityTypes/mysql/entity/Post.ts @@ -90,4 +90,4 @@ export class Post { // @Column("simple-array") // simpleArray: string[]; -} \ No newline at end of file +} diff --git a/test/integration/entityTypes/postgres/entity/Post.ts b/test/integration/entityTypes/postgres/entity/Post.ts index 9acf3ea..fb81185 100644 --- a/test/integration/entityTypes/postgres/entity/Post.ts +++ b/test/integration/entityTypes/postgres/entity/Post.ts @@ -237,4 +237,4 @@ export class Post { // @Column("simple-array") // simpleArray: string[]; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample1-simple-entity/entity/Post.ts b/test/integration/examples/sample1-simple-entity/entity/Post.ts index 6c208ff..acc4bc1 100644 --- a/test/integration/examples/sample1-simple-entity/entity/Post.ts +++ b/test/integration/examples/sample1-simple-entity/entity/Post.ts @@ -1,4 +1,4 @@ -import {Column, Entity,PrimaryGeneratedColumn,Index,Generated} from "typeorm"; +import { Column, Entity, PrimaryGeneratedColumn, Index, Generated } from "typeorm"; @Entity("Post") export class Post { @@ -17,4 +17,4 @@ export class Post { }) likesCount: number; -} \ No newline at end of file +} 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 a2eb712..a627625 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 + //TODO: change to check column types per database engine @PrimaryGeneratedColumn() id: number; @@ -69,4 +69,4 @@ export class EverythingEntity { // @UpdateDateColumn() // updatedDate: Date; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample16-indexes/entity/Post.ts b/test/integration/examples/sample16-indexes/entity/Post.ts index 531fcfa..cf25a35 100644 --- a/test/integration/examples/sample16-indexes/entity/Post.ts +++ b/test/integration/examples/sample16-indexes/entity/Post.ts @@ -1,8 +1,8 @@ -import { Column, Entity, Index, PrimaryGeneratedColumn } from "typeorm" +import { Column, Entity, Index, PrimaryGeneratedColumn } from "typeorm" @Entity("Post") -@Index("my_index_with_id_and_text", ["id", "text"], {unique:true}) -@Index("my_index_with_id_and_title", (post: Post) => [post.id, post.title], {unique:true}) +@Index("my_index_with_id_and_text", ["id", "text"], { unique: true }) +@Index("my_index_with_id_and_title", (post: Post) => [post.id, post.title], { unique: true }) export class Post { @PrimaryGeneratedColumn() @@ -23,4 +23,4 @@ export class Post { @Index() likesCount: number; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample17-versioning/entity/Post.ts b/test/integration/examples/sample17-versioning/entity/Post.ts index 60b8d24..e9f1bc1 100644 --- a/test/integration/examples/sample17-versioning/entity/Post.ts +++ b/test/integration/examples/sample17-versioning/entity/Post.ts @@ -1,4 +1,4 @@ -import { Column, Entity, Index, PrimaryGeneratedColumn, VersionColumn } from "typeorm" +import { Column, Entity, Index, PrimaryGeneratedColumn, VersionColumn } from "typeorm" @Entity("Post") export class Post { @@ -14,5 +14,5 @@ export class Post { @VersionColumn() version: number; - -} \ No newline at end of file + +} diff --git a/test/integration/examples/sample2-one-to-one/entity/Post.ts b/test/integration/examples/sample2-one-to-one/entity/Post.ts index 7a8efe0..f715c0a 100644 --- a/test/integration/examples/sample2-one-to-one/entity/Post.ts +++ b/test/integration/examples/sample2-one-to-one/entity/Post.ts @@ -1,10 +1,10 @@ -import {PrimaryGeneratedColumn, Column, Entity, OneToOne,JoinColumn,Index} from "typeorm"; -import {PostDetails} from "./PostDetails"; -import {PostCategory} from "./PostCategory"; -import {PostAuthor} from "./PostAuthor"; -import {PostInformation} from "./PostInformation"; -import {PostImage} from "./PostImage"; -import {PostMetadata} from "./PostMetadata"; +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn, Index } from "typeorm"; +import { PostDetails } from "./PostDetails"; +import { PostCategory } from "./PostCategory"; +import { PostAuthor } from "./PostAuthor"; +import { PostInformation } from "./PostInformation"; +import { PostImage } from "./PostImage"; +import { PostMetadata } from "./PostMetadata"; @Entity("Post") export class Post { @@ -20,18 +20,17 @@ export class Post { // post has relation with category, however inverse relation is not set (category does not have relation with post set) @OneToOne(type => PostCategory, { - cascadeInsert: true, - cascadeUpdate: true, - cascadeRemove: true + cascade: true, + onDelete: 'CASCADE' }) @JoinColumn() @Index({ unique: true }) category: PostCategory; - // post has relation with details. cascade inserts here means if new PostDetails instance will be set to this + // 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 @OneToOne(type => PostDetails, details => details.post, { - cascadeInsert: true + cascade: true }) @JoinColumn() @Index({ unique: true }) @@ -40,7 +39,7 @@ export class Post { // 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 @OneToOne(type => PostImage, image => image.post, { - cascadeUpdate: true + cascade: true, }) @JoinColumn() @Index({ unique: true }) @@ -49,17 +48,16 @@ export class Post { // 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 @OneToOne(type => PostMetadata, metadata => metadata.post, { - cascadeRemove: true + onDelete: 'CASCADE' }) @JoinColumn() @Index({ unique: true }) - metadata: PostMetadata|null; + metadata: PostMetadata | null; // post has relation with details. full cascades here @OneToOne(type => PostInformation, information => information.post, { - cascadeInsert: true, - cascadeUpdate: true, - cascadeRemove: true + cascade: true, + onDelete: 'CASCADE' }) @JoinColumn() @Index({ unique: true }) @@ -71,4 +69,4 @@ export class Post { @Index({ unique: true }) author: PostAuthor; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample2-one-to-one/entity/PostAuthor.ts b/test/integration/examples/sample2-one-to-one/entity/PostAuthor.ts index 9dfb66e..d80d803 100644 --- a/test/integration/examples/sample2-one-to-one/entity/PostAuthor.ts +++ b/test/integration/examples/sample2-one-to-one/entity/PostAuthor.ts @@ -1,5 +1,5 @@ -import {PrimaryGeneratedColumn, Column, Entity, OneToOne,JoinColumn} from "typeorm"; -import {Post} from "./Post"; +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn } from "typeorm"; +import { Post } from "./Post"; @Entity("PostAuthor") export class PostAuthor { @@ -13,4 +13,4 @@ export class PostAuthor { @OneToOne(type => Post, post => post.author) post: Post; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample2-one-to-one/entity/PostCategory.ts b/test/integration/examples/sample2-one-to-one/entity/PostCategory.ts index 6b302b0..c7b2311 100644 --- a/test/integration/examples/sample2-one-to-one/entity/PostCategory.ts +++ b/test/integration/examples/sample2-one-to-one/entity/PostCategory.ts @@ -1,4 +1,4 @@ -import {PrimaryGeneratedColumn, Column, Entity, OneToOne,JoinColumn} from "typeorm"; +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn } from "typeorm"; @Entity("PostCategory") export class PostCategory { @@ -9,4 +9,4 @@ export class PostCategory { @Column() name: string; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample2-one-to-one/entity/PostDetails.ts b/test/integration/examples/sample2-one-to-one/entity/PostDetails.ts index ca47932..b68e075 100644 --- a/test/integration/examples/sample2-one-to-one/entity/PostDetails.ts +++ b/test/integration/examples/sample2-one-to-one/entity/PostDetails.ts @@ -1,5 +1,5 @@ -import {PrimaryGeneratedColumn, Column, Entity, OneToOne,JoinColumn} from "typeorm"; -import {Post} from "./Post"; +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn } from "typeorm"; +import { Post } from "./Post"; @Entity("PostDetails") export class PostDetails { @@ -15,12 +15,11 @@ export class PostDetails { @Column() metadata: string; - + @OneToOne(type => Post, post => post.details, { - cascadeInsert: true, - cascadeUpdate: true, - cascadeRemove: true + // cascade: true, + onDelete: 'CASCADE' }) post: Post; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample2-one-to-one/entity/PostImage.ts b/test/integration/examples/sample2-one-to-one/entity/PostImage.ts index afea4c8..6e71d4e 100644 --- a/test/integration/examples/sample2-one-to-one/entity/PostImage.ts +++ b/test/integration/examples/sample2-one-to-one/entity/PostImage.ts @@ -1,5 +1,5 @@ -import {PrimaryGeneratedColumn, Column, Entity, OneToOne,JoinColumn} from "typeorm"; -import {Post} from "./Post"; +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn } from "typeorm"; +import { Post } from "./Post"; @Entity("PostImage") export class PostImage { @@ -13,4 +13,4 @@ export class PostImage { @OneToOne(type => Post, post => post.image) post: Post; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample2-one-to-one/entity/PostInformation.ts b/test/integration/examples/sample2-one-to-one/entity/PostInformation.ts index 60229c4..f71ef43 100644 --- a/test/integration/examples/sample2-one-to-one/entity/PostInformation.ts +++ b/test/integration/examples/sample2-one-to-one/entity/PostInformation.ts @@ -1,5 +1,5 @@ -import {PrimaryGeneratedColumn, Column, Entity, OneToOne,JoinColumn} from "typeorm"; -import {Post} from "./Post"; +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn } from "typeorm"; +import { Post } from "./Post"; @Entity("PostInformation") export class PostInformation { @@ -9,10 +9,8 @@ export class PostInformation { @Column() text: string; - - @OneToOne(type => Post, post => post.information, { - cascadeUpdate: true, - }) + + @OneToOne(type => Post, post => post.information) post: Post; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample2-one-to-one/entity/PostMetadata.ts b/test/integration/examples/sample2-one-to-one/entity/PostMetadata.ts index c2f75d1..da7eee3 100644 --- a/test/integration/examples/sample2-one-to-one/entity/PostMetadata.ts +++ b/test/integration/examples/sample2-one-to-one/entity/PostMetadata.ts @@ -1,5 +1,5 @@ -import {PrimaryGeneratedColumn, Column, Entity, OneToOne,JoinColumn} from "typeorm"; -import {Post} from "./Post"; +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn } from "typeorm"; +import { Post } from "./Post"; @Entity("PostMetadata") export class PostMetadata { @@ -13,4 +13,4 @@ export class PostMetadata { @OneToOne(type => Post, post => post.metadata) post: Post; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample27-composite-primary-keys/entity/Post.ts b/test/integration/examples/sample27-composite-primary-keys/entity/Post.ts index 26d9d80..6e716e5 100644 --- a/test/integration/examples/sample27-composite-primary-keys/entity/Post.ts +++ b/test/integration/examples/sample27-composite-primary-keys/entity/Post.ts @@ -1,4 +1,4 @@ -import {Column, Entity, PrimaryColumn} from "typeorm"; +import { Column, Entity, PrimaryColumn } from "typeorm"; @Entity("Post") export class Post { @@ -12,4 +12,4 @@ export class Post { @Column() text: string; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample3-many-to-one/entity/Post.ts b/test/integration/examples/sample3-many-to-one/entity/Post.ts index 89a3aa5..4505194 100644 --- a/test/integration/examples/sample3-many-to-one/entity/Post.ts +++ b/test/integration/examples/sample3-many-to-one/entity/Post.ts @@ -1,10 +1,10 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; -import {PostDetails} from "./PostDetails"; -import {PostCategory} from "./PostCategory"; -import {PostAuthor} from "./PostAuthor"; -import {PostInformation} from "./PostInformation"; -import {PostImage} from "./PostImage"; -import {PostMetadata} from "./PostMetadata"; +import { PostDetails } from "./PostDetails"; +import { PostCategory } from "./PostCategory"; +import { PostAuthor } from "./PostAuthor"; +import { PostInformation } from "./PostInformation"; +import { PostImage } from "./PostImage"; +import { PostMetadata } from "./PostMetadata"; @Entity("Post") export class Post { @@ -20,38 +20,36 @@ export class Post { // post has relation with category, however inverse relation is not set (category does not have relation with post set) @ManyToOne(type => PostCategory, { - cascadeInsert: true, - cascadeUpdate: true, - cascadeRemove: true + cascade: true, + onDelete: 'CASCADE' }) category: PostCategory; - // post has relation with details. cascade inserts here means if new PostDetails instance will be set to this + // 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 @ManyToOne(type => PostDetails, details => details.posts, { - cascadeInsert: true + cascade: true, }) details: PostDetails; // 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 @ManyToOne(type => PostImage, image => image.posts, { - cascadeUpdate: true + cascade: true, }) image: 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 @ManyToOne(type => PostMetadata, metadata => metadata.posts, { - cascadeRemove: true + cascade: true, }) - metadata: PostMetadata|null; + metadata: PostMetadata | null; // post has relation with details. full cascades here @ManyToOne(type => PostInformation, information => information.posts, { - cascadeInsert: true, - cascadeUpdate: true, - cascadeRemove: true + cascade: true, + onDelete: 'CASCADE' }) information: PostInformation; @@ -59,4 +57,4 @@ export class Post { @ManyToOne(type => PostAuthor, author => author.posts) author: PostAuthor; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample3-many-to-one/entity/PostAuthor.ts b/test/integration/examples/sample3-many-to-one/entity/PostAuthor.ts index 90b0d38..bc8b77e 100644 --- a/test/integration/examples/sample3-many-to-one/entity/PostAuthor.ts +++ b/test/integration/examples/sample3-many-to-one/entity/PostAuthor.ts @@ -1,5 +1,5 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; -import {Post} from "./Post"; +import { Post } from "./Post"; @Entity("PostAuthor") export class PostAuthor { @@ -13,4 +13,4 @@ export class PostAuthor { @OneToMany(type => Post, post => post.author) posts: Post[]; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample3-many-to-one/entity/PostCategory.ts b/test/integration/examples/sample3-many-to-one/entity/PostCategory.ts index bae28e4..c92df8f 100644 --- a/test/integration/examples/sample3-many-to-one/entity/PostCategory.ts +++ b/test/integration/examples/sample3-many-to-one/entity/PostCategory.ts @@ -9,4 +9,4 @@ export class PostCategory { @Column() name: string; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample3-many-to-one/entity/PostDetails.ts b/test/integration/examples/sample3-many-to-one/entity/PostDetails.ts index 0f96397..3c1a2f6 100644 --- a/test/integration/examples/sample3-many-to-one/entity/PostDetails.ts +++ b/test/integration/examples/sample3-many-to-one/entity/PostDetails.ts @@ -1,5 +1,5 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; -import {Post} from "./Post"; +import { Post } from "./Post"; @Entity("PostDetails") export class PostDetails { @@ -21,11 +21,8 @@ export class PostDetails { nullable: true }) metadata: string; - - @OneToMany(type => Post, post => post.details, { - cascadeInsert: true, - cascadeUpdate: true - }) + + @OneToMany(type => Post, post => post.details) posts: Post[]; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample3-many-to-one/entity/PostImage.ts b/test/integration/examples/sample3-many-to-one/entity/PostImage.ts index 2965712..dad410d 100644 --- a/test/integration/examples/sample3-many-to-one/entity/PostImage.ts +++ b/test/integration/examples/sample3-many-to-one/entity/PostImage.ts @@ -13,4 +13,4 @@ export class PostImage { @OneToMany(type => Post, post => post.image) posts: Post[]; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample3-many-to-one/entity/PostInformation.ts b/test/integration/examples/sample3-many-to-one/entity/PostInformation.ts index a2b9b20..5e427e3 100644 --- a/test/integration/examples/sample3-many-to-one/entity/PostInformation.ts +++ b/test/integration/examples/sample3-many-to-one/entity/PostInformation.ts @@ -1,5 +1,5 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; -import {Post} from "./Post"; +import { Post } from "./Post"; @Entity("PostInformation") export class PostInformation { @@ -9,10 +9,8 @@ export class PostInformation { @Column() text: string; - - @OneToMany(type => Post, post => post.information, { - cascadeUpdate: true, - }) + + @OneToMany(type => Post, post => post.information) posts: Post[]; -} \ No newline at end of file +} diff --git a/test/integration/examples/sample3-many-to-one/entity/PostMetadata.ts b/test/integration/examples/sample3-many-to-one/entity/PostMetadata.ts index ce724db..3b2fb19 100644 --- a/test/integration/examples/sample3-many-to-one/entity/PostMetadata.ts +++ b/test/integration/examples/sample3-many-to-one/entity/PostMetadata.ts @@ -1,5 +1,5 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, OneToMany, ManyToOne, JoinColumn } from "typeorm"; -import {Post} from "./Post"; +import { Post } from "./Post"; @Entity("PostMetadata") export class PostMetadata { @@ -13,4 +13,4 @@ export class PostMetadata { @OneToMany(type => Post, post => post.metadata) posts: Post[]; -} \ No newline at end of file +} diff --git a/test/integration/github-issues/12/entity/Post.ts b/test/integration/github-issues/12/entity/Post.ts index 79d2472..3a94f13 100644 --- a/test/integration/github-issues/12/entity/Post.ts +++ b/test/integration/github-issues/12/entity/Post.ts @@ -13,4 +13,4 @@ export class Post { @ManyToOne(type => PostAuthor, author => author.posts2) author2: PostAuthor; -} \ No newline at end of file +} diff --git a/test/integration/github-issues/12/entity/PostAuthor.ts b/test/integration/github-issues/12/entity/PostAuthor.ts index 9d5a433..d203269 100644 --- a/test/integration/github-issues/12/entity/PostAuthor.ts +++ b/test/integration/github-issues/12/entity/PostAuthor.ts @@ -13,4 +13,4 @@ export class PostAuthor { @OneToMany(type => Post, post => post.author2) posts2: Post[]; -} \ No newline at end of file +} diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts index 1a9395d..fe7c24f 100644 --- a/test/integration/integration.test.ts +++ b/test/integration/integration.test.ts @@ -25,6 +25,7 @@ describe("TypeOrm examples", async function () { 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') @@ -55,6 +56,9 @@ describe("TypeOrm examples", async function () { case 'mariadb': engine = await GTU.createMariaDBModels(filesOrgPathJS, resultsPath) break; + case 'oracle': + engine = await GTU.createOracleDBModels(filesOrgPathJS, resultsPath) + break; default: console.log(`Unknown engine type`); diff --git a/test/utils/EntityFileToJson.ts b/test/utils/EntityFileToJson.ts index 0d09b92..22f9a42 100644 --- a/test/utils/EntityFileToJson.ts +++ b/test/utils/EntityFileToJson.ts @@ -21,6 +21,7 @@ export class EntityFileToJson { // if (!x.endsWith('[]')) { // x = x + '[]'// can't distinguish OneTwoMany from OneToOne without indexes // } + x = x.trim(); return x; }); } else { @@ -92,7 +93,7 @@ export class EntityFileToJson { for (let line of lines) { let trimmedLine = line.trim(); if (trimmedLine.startsWith('//')) { - continue; //commented line + continue; //commented line } if (isMultilineStatement) trimmedLine = priorPartOfMultilineStatement + ' ' + trimmedLine @@ -101,7 +102,7 @@ export class EntityFileToJson { else if (!isInClassBody) { if (trimmedLine.startsWith('import')) { - continue; //import statement is not part of entity definition + continue; //import statement is not part of entity definition } else if (trimmedLine.startsWith('@Entity')) { continue; //TODO:entity options } else if (trimmedLine.startsWith('export class')) { @@ -243,6 +244,7 @@ export class EntityFileToJson { // if (!x.endsWith('[]')) { // x = x + '[]'// can't distinguish OneTwoMany from OneToOne without indexes // } + x = x.trim(); return x; }); @@ -272,15 +274,15 @@ export class EntityFileToJson { console.log(`${trimmedLine}`) } - retVal.columns=retVal.columns.map(col=>{ + retVal.columns = retVal.columns.map(col => { if (col.columnName.endsWith('Id')) - col.columnName=col.columnName.substr(0,col.columnName.length-2) + col.columnName = col.columnName.substr(0, col.columnName.length - 2) return col; }) - retVal.indicies=retVal.indicies.map(ind=>{ - ind.columnNames=ind.columnNames.map(colName=>{ + retVal.indicies = retVal.indicies.map(ind => { + ind.columnNames = ind.columnNames.map(colName => { if (colName.endsWith('Id')) - colName=colName.substr(0,colName.length-2) + colName = colName.substr(0, colName.length - 2) return colName; }) return ind; @@ -312,4 +314,4 @@ class EntityIndex { indexName: string columnNames: string[] = [] isUnique: boolean = false -} \ No newline at end of file +} diff --git a/test/utils/GeneralTestUtils.ts b/test/utils/GeneralTestUtils.ts index 5226f77..fb00ae1 100644 --- a/test/utils/GeneralTestUtils.ts +++ b/test/utils/GeneralTestUtils.ts @@ -4,6 +4,7 @@ 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 { OracleDriver } from "../../src/drivers/OracleDriver"; import { Engine } from "../../src/Engine"; import { createConnection, ConnectionOptions, Connection } from "typeorm"; import * as yn from "yn" @@ -48,7 +49,8 @@ export async function createMSSQLModels(filesOrgPath: string, resultsPath: strin databaseType: 'mssql', resultsPath: resultsPath, schemaName: 'dbo', - ssl: yn(process.env.MSSQL_SSL) + ssl: yn(process.env.MSSQL_SSL), + noConfigs: false }); @@ -91,7 +93,8 @@ export async function createPostgresModels(filesOrgPath: string, resultsPath: st databaseType: 'postgres', resultsPath: resultsPath, schemaName: 'public', - ssl: yn(process.env.POSTGRES_SSL) + ssl: yn(process.env.POSTGRES_SSL), + noConfigs: false }); @@ -135,7 +138,8 @@ export async function createMysqlModels(filesOrgPath: string, resultsPath: strin databaseType: 'mysql', resultsPath: resultsPath, schemaName: 'ignored', - ssl: yn(process.env.MYSQL_SSL) + ssl: yn(process.env.MYSQL_SSL), + noConfigs: false }); @@ -179,7 +183,55 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str databaseType: 'mariadb', resultsPath: resultsPath, schemaName: 'ignored', - ssl: yn(process.env.MARIADB_SSL) + ssl: yn(process.env.MARIADB_SSL), + noConfigs: false + }); + + + + return engine; +} + +export async function createOracleDBModels(filesOrgPath: string, resultsPath: 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_Username), String(process.env.ORACLE_Password), yn(process.env.ORACLE_SSL)); + + if (! await driver.CheckIfDBExists(String(process.env.ORACLE_Database))) + await driver.CreateDB(String(process.env.ORACLE_Database)); + await driver.DisconnectFromServer(); + + let connOpt: ConnectionOptions = { + + database: String(process.env.ORACLE_Database), + sid: String(process.env.ORACLE_Database), + host: String(process.env.ORACLE_Host), + password: String(process.env.ORACLE_Password), + type: 'oracle', + username: String(process.env.ORACLE_Username), + port: Number(process.env.ORACLE_Port), + // dropSchema: true, + synchronize: true, + entities: [path.resolve(filesOrgPath, '*.js')], + } + let conn = await createConnection(connOpt) + + if (conn.isConnected) + await conn.close() + + driver = new OracleDriver(); + let 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: resultsPath, + schemaName: String(process.env.ORACLE_Username), + ssl: yn(process.env.ORACLE_SSL), + noConfigs: false }); @@ -203,4 +255,4 @@ export function compileTsFiles(fileNames: string[], options: ts.CompilerOptions) }); return compileErrors; -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index 09773a7..d8e44e0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,8 +14,9 @@ "moduleResolution": "node", "outDir": "dist", "newLine": "LF" - }, "include": [ + }, + "include": [ "src", "test" ] -} \ No newline at end of file +} diff --git a/typings.json b/typings.json index 82bf57c..91fce6a 100644 --- a/typings.json +++ b/typings.json @@ -1,10 +1,10 @@ { - "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" - } + "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" + } }