From 9830f489ee4fdab01149cda0e18777aa0caa6182 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 11 Mar 2020 22:26:53 +0100 Subject: [PATCH 01/17] fix #252 --- src/drivers/OracleDriver.ts | 2 +- src/index.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 9518d54..81d4ad2 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -409,7 +409,7 @@ export default class OracleDriver extends AbstractDriver { private static ReturnDefaultValueFunction( defVal: string | null ): string | undefined { - let defaultVal = defVal; + let defaultVal = defVal?.trim(); if (!defaultVal) { return undefined; } diff --git a/src/index.ts b/src/index.ts index 15e34c8..2ac00ef 100644 --- a/src/index.ts +++ b/src/index.ts @@ -300,7 +300,11 @@ function checkYargsParameters(options: options): options { : standardSchema; options.connectionOptions.ssl = argv.ssl; options.connectionOptions.user = argv.u || standardUser; - options.connectionOptions.skipTables = argv.skipTables.split(","); + let skipTables = argv.skipTables.split(","); + if (skipTables.length === 1 && skipTables[0] === "") { + skipTables = []; // #252 + } + options.connectionOptions.skipTables = skipTables; options.generationOptions.activeRecord = argv.a; options.generationOptions.generateConstructor = argv.generateConstructor; options.generationOptions.convertCaseEntity = argv.ce as IGenerationOptions["convertCaseEntity"]; From 37a63c769a9aa4d5bceacfe089c44198f4bfc4f5 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 12 Mar 2020 18:48:26 +0100 Subject: [PATCH 02/17] changelog, readme --- CHANGELOG.md | 8 ++++++++ README.md | 2 ++ 2 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70d553b..1651db3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.4.1 + +* Fixed model generation on oracle database (#252) +* New option to define line ending character (#241) +* Fixed model generation for two table with same name, different schema on mssql (#246) +* Proper naming strategy typings (#249) +* Release version without installed db drivers + ## 0.4.0 ### BREAKING CHANGES diff --git a/README.md b/README.md index 24f0c87..146257e 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ Supported db engines: ## Installation +### Versions +Typeorm-model-generator comes with preinstalled driver for each supported db(except for oracle). However if you want to use it as a dev-dependency you may want to install your db driver manually to reduce dependency footprint, reduce time spent in the CI. In such case you can use version without preinstalled db drivers - `npm i typeorm-model-generator@no-engines`. ### Global module To install module globally simply type `npm i -g typeorm-model-generator` in your console. ### Npx way From a4e50187751209053ff1faeb20a7433e55dd90ab Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 12 Mar 2020 19:13:53 +0100 Subject: [PATCH 03/17] 0.4.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 62567af..9180312 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 0cde93f..3a9348c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-model-generator", - "version": "0.4.0", + "version": "0.4.1", "description": "Generates models for TypeORM from existing databases.", "bin": "bin/typeorm-model-generator", "main": "./dist/src/library.js", From 6c8758751f74a1c363082ca68b659352015abb50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2020 23:24:02 +0000 Subject: [PATCH 04/17] Bump acorn from 7.1.0 to 7.1.1 Bumps [acorn](https://github.com/acornjs/acorn) from 7.1.0 to 7.1.1. - [Release notes](https://github.com/acornjs/acorn/releases) - [Commits](https://github.com/acornjs/acorn/compare/7.1.0...7.1.1) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9180312..f7e5d27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -736,9 +736,9 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", "dev": true }, "acorn-jsx": { From e0a35280c3943efc5e16fcab432942f06d6f5268 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 14 Mar 2020 15:11:42 +0100 Subject: [PATCH 05/17] update dependencies --- .eslintrc.js | 2 +- package-lock.json | 1913 ++++++++++----------- package.json | 66 +- src/drivers/MssqlDriver.ts | 9 +- test/integration/runTestsFromPath.test.ts | 2 +- 5 files changed, 924 insertions(+), 1068 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index fc4df69..2df8b35 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,7 +20,7 @@ module.exports = { "@typescript-eslint/prefer-interface": ["off"], "import/no-extraneous-dependencies": [ "error", - { devDependencies: ["**/*.test.ts"] } + { devDependencies: ["test/**/*.ts"] } ], "@typescript-eslint/no-floating-promises": ["error"], "no-use-before-define": ["error", "nofunc"], diff --git a/package-lock.json b/package-lock.json index f7e5d27..c7f36c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -175,12 +175,12 @@ "dev": true }, "@babel/runtime": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", - "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "@babel/template": { @@ -302,32 +302,6 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", "dev": true }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -338,41 +312,42 @@ } }, "@sinonjs/commons": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.0.tgz", - "integrity": "sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.1.tgz", + "integrity": "sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, + "@sinonjs/fake-timers": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.0.tgz", + "integrity": "sha512-atR1J/jRXvQAb47gfzSK8zavXy7BcpnYq21ALon0U99etu99vsir0trzIO3wpeLtW+LLVY6X7EkfVTbjGSH8Ww==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-5.0.1.tgz", + "integrity": "sha512-KaiQ5pBf1MpS09MuA0kp6KBQt2JUOQycqVG1NZXvzeaXe5LGFqAKueIS0bw4w0P9r7KuBSVdUk5QjXsUdu2CxQ==", "dev": true, "requires": { "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" + "@sinonjs/samsam": "^5.0.2" } }, "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.0.3.tgz", + "integrity": "sha512-QucHkc2uMJ0pFGjJUDP3F9dq5dx8QIaqISl9QgwLOh6P9yv877uONPGXh/OH/0zmM3tW1JjuJltAZV2l7zU+uQ==", "dev": true, "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, "@sinonjs/text-encoding": { @@ -388,15 +363,15 @@ "dev": true }, "@types/array.prototype.flatmap": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/array.prototype.flatmap/-/array.prototype.flatmap-1.2.0.tgz", - "integrity": "sha512-sMRMigmTCA1EVX46F0jPhSFo51uFNo83GkeYlp7r4xKkXwfjkDpTm13vB9Tba4Ey+0rUXX3QjSWHAIwSb3qzrA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz", + "integrity": "sha512-AtzC715z/5InlwWFzlxzdoV3Wovzbd3+60uWgDHdI0N+S6XiHU+syXHMhJQIYH1sv/xrrGVsLvMTSEBxmm6qlA==", "dev": true }, "@types/chai": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.7.tgz", - "integrity": "sha512-luq8meHGYwvky0O7u0eQZdA7B4Wd9owUCqvbw2m3XCrCU8mplYOujMBbvyS547AxJkC+pGnd0Cm15eNxEUNU8g==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", + "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", "dev": true }, "@types/chai-as-promised": { @@ -423,9 +398,9 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, "@types/eslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-6.1.3.tgz", - "integrity": "sha512-llYf1QNZaDweXtA7uY6JczcwHmFwJL9TpK3E6sY0B18l6ulDT6VWNMAdEjYccFHiDfxLPxffd8QmSDV4QUUspA==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-6.1.8.tgz", + "integrity": "sha512-CJBhm9pYdUS8cFVbXACWlLxZWFBTQMiM0eI6RYxng3u9oQ9gHdQ5PN89DHPrK4RISRzX62nRsteUlbBgEIdSug==", "dev": true, "requires": { "@types/estree": "*", @@ -439,37 +414,20 @@ "dev": true }, "@types/estree": { - "version": "0.0.41", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.41.tgz", - "integrity": "sha512-rIAmXyJlqw4KEBO7+u9gxZZSQHaCNnIzYrnNmYVpgfJhxTqO0brCX0SYpqUTkVI5mwwUwzmtspLBGBKroMeynA==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.42.tgz", + "integrity": "sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ==", "dev": true }, "@types/fs-extra": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.1.tgz", - "integrity": "sha512-J00cVDALmi/hJOYsunyT52Hva5TnJeKP5yd1r+mH/ZU0mbYZflR0Z5kw5kITtKTRYMhm1JMClOFYdHnQszEvqw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg==", "dev": true, "requires": { "@types/node": "*" } }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, "@types/handlebars": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", @@ -490,21 +448,15 @@ } }, "@types/json-schema": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", - "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", "dev": true }, "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", + "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", "dev": true }, "@types/mssql": { @@ -518,35 +470,27 @@ } }, "@types/mysql": { - "version": "2.15.8", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.8.tgz", - "integrity": "sha512-l0TUdg6KDEaLO75/yjdjksobJDRWv8iZlpRfv/WW1lQZCQDKdTDnKCkeH10oapzP/JTuKiTy6Cvq/sm/0GgcUw==", + "version": "2.15.9", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.9.tgz", + "integrity": "sha512-rB3w3/YEV11oIoL56iP4OPt6uLkcuu6oIqbUy8T2bSm/ZUYN0fvyyzzrZBDNYL//zRStdmSsUPZDtHXjdR1hTA==", "dev": true, "requires": { "@types/node": "*" } }, "@types/node": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz", - "integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==" + "version": "13.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", + "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" }, "@types/oracledb": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@types/oracledb/-/oracledb-4.1.1.tgz", - "integrity": "sha512-Vjk5RLENuQKzgqjoIyGH9wZCGOxc4r4j2nh7jKo32+yJ4zwwPiKp808YZh0iRPgXOZeqFVaQYHB0xpEFuV4lug==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/oracledb/-/oracledb-4.2.0.tgz", + "integrity": "sha512-1wG9cvpByyOCxyQXYSnoBdqzojFuFfBhuAl6X59ikSm0Du9i5iQoL6W0loByvMymWQDBl6U8F2xGi4xuaAmsKg==", "dev": true, "requires": { "@types/node": "*", "dotenv": "^8.2.0" - }, - "dependencies": { - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", - "dev": true - } } }, "@types/parse-json": { @@ -556,9 +500,9 @@ "dev": true }, "@types/pg": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.14.1.tgz", - "integrity": "sha512-gQgg4bLuykokypx4O1fwEzl5e6UjjyaBtN3znn5zhm0YB9BnKyHDw+e4cQY9rAPzpdM2qpJbn9TNzUazbmTsdw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.14.3.tgz", + "integrity": "sha512-go5zddQ1FrUQHeBvqPzQ1svKo4KKucSwvqLsvwc/EIuQ9sxDA21b68xc/RwhzAK5pPCnez8NrkYatFIGdJBVvA==", "dev": true, "requires": { "@types/node": "*", @@ -593,9 +537,9 @@ } }, "@types/sinon": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.5.1.tgz", - "integrity": "sha512-EZQUP3hSZQyTQRfiLqelC9NMWd1kqLcmQE0dMiklxBkgi84T+cHOhnKpgk4NnOWpGX863yE6+IaGnOXUNFqDnQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.5.2.tgz", + "integrity": "sha512-T+m89VdXj/eidZyejvmoP9jivXgBDdkOSBVQjU9kF349NEx10QdPNGxHeZUaj1IlJ32/ewdyXJjnJxyxJroYwg==", "dev": true }, "@types/sqlite3": { @@ -634,27 +578,27 @@ } }, "@types/yargs": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.4.tgz", - "integrity": "sha512-Ke1WmBbIkVM8bpvsNEcGgQM70XcEh/nbpxQhW7FhrsbCsXSY9BmLB1+LHtD7r9zrsOcFlLiF+a/UeJsdfw3C5A==", + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz", + "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.15.0.tgz", - "integrity": "sha512-XRJFznI5v4K1WvIrWmjFjBAdQWaUTz4xJEdqR7+wAFsv6Q9dP3mOlE6BMNT3pdlp9eF1+bC5m5LZTmLMqffCVw==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.23.0.tgz", + "integrity": "sha512-8iA4FvRsz8qTjR0L/nK9RcRUN3QtIHQiOm69FzV7WS3SE+7P7DyGGwh3k4UNR2JBbk+Ej2Io+jLAaqKibNhmtw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "2.15.0", + "@typescript-eslint/experimental-utils": "2.23.0", "eslint-utils": "^1.4.3", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", @@ -662,39 +606,39 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.15.0.tgz", - "integrity": "sha512-Qkxu5zndY5hqlcQkmA88gfLvqQulMpX/TN91XC7OuXsRf4XG5xLGie0sbpX97o/oeccjeZYRMipIsjKk/tjDHA==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.23.0.tgz", + "integrity": "sha512-OswxY59RcXH3NNPmq+4Kis2CYZPurRU6mG5xPcn24CjFyfdVli5mySwZz/g/xDbJXgDsYqNGq7enV0IziWGXVQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.15.0", + "@typescript-eslint/typescript-estree": "2.23.0", "eslint-scope": "^5.0.0" } }, "@typescript-eslint/parser": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.15.0.tgz", - "integrity": "sha512-6iSgQsqAYTaHw59t0tdjzZJluRAjswdGltzKEdLtcJOxR2UVTPHYvZRqkAVGCkaMVb6Fpa60NnuozNCvsSpA9g==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.23.0.tgz", + "integrity": "sha512-k61pn/Nepk43qa1oLMiyqApC6x5eP5ddPz6VUYXCAuXxbmRLqkPYzkFRKl42ltxzB2luvejlVncrEpflgQoSUg==", "dev": true, "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.15.0", - "@typescript-eslint/typescript-estree": "2.15.0", + "@typescript-eslint/experimental-utils": "2.23.0", + "@typescript-eslint/typescript-estree": "2.23.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.15.0.tgz", - "integrity": "sha512-L6Pog+w3VZzXkAdyqA0VlwybF8WcwZX+mufso86CMxSdWmcizJ38lgBdpqTbc9bo92iyi0rOvmATKiwl+amjxg==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.23.0.tgz", + "integrity": "sha512-pmf7IlmvXdlEXvE/JWNNJpEvwBV59wtJqA8MLAxMKLXNKVRC3HZBXR/SlZLPWTCcwOSg9IM7GeRSV3SIerGVqw==", "dev": true, "requires": { "debug": "^4.1.1", "eslint-visitor-keys": "^1.1.0", "glob": "^7.1.6", "is-glob": "^4.0.1", - "lodash.unescape": "4.0.1", + "lodash": "^4.17.15", "semver": "^6.3.0", "tsutils": "^3.17.1" }, @@ -722,10 +666,10 @@ "path-is-absolute": "^1.0.0" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true } } @@ -892,9 +836,9 @@ } }, "arg": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", - "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { @@ -911,66 +855,17 @@ "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", "dev": true }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, "array-includes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.0.tgz", - "integrity": "sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", - "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, "array.prototype.flat": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", @@ -979,44 +874,6 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", - "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } } }, "array.prototype.flatmap": { @@ -1094,9 +951,9 @@ "dev": true }, "async": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", - "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, "asynckit": { "version": "0.4.0", @@ -1114,12 +971,11 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" + "follow-redirects": "1.5.10" } }, "balanced-match": { @@ -1141,9 +997,9 @@ } }, "bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" }, "binary-extensions": { "version": "2.0.0", @@ -1160,9 +1016,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -1196,9 +1052,9 @@ "dev": true }, "buffer": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", - "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" @@ -1232,32 +1088,6 @@ "write-file-atomic": "^3.0.0" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1617,7 +1447,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "optional": true }, "commondir": { "version": "1.0.1", @@ -1625,15 +1455,21 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "confusing-browser-globals": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz", - "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, "console-control-strings": { @@ -1679,31 +1515,22 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" }, "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true } } @@ -1808,32 +1635,9 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "del": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", "dev": true, "requires": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - } + "object-keys": "^1.0.12" } }, "delayed-stream": { @@ -1862,23 +1666,6 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1957,23 +1744,71 @@ } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -2076,33 +1911,33 @@ } }, "eslint-config-airbnb-base": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz", - "integrity": "sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.1.0.tgz", + "integrity": "sha512-+XCcfGyCnbzOnktDVhwsCAx+9DmrzEmuwxyHUJpw+kqBVT744OUBrB09khgFKlK1lshVww6qXGsYPZpavoNjJw==", "dev": true, "requires": { - "confusing-browser-globals": "^1.0.7", + "confusing-browser-globals": "^1.0.9", "object.assign": "^4.1.0", - "object.entries": "^1.1.0" + "object.entries": "^1.1.1" } }, "eslint-config-prettier": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.9.0.tgz", - "integrity": "sha512-k4E14HBtcLv0uqThaI6I/n1LEqROp8XaPu6SO9Z32u5NlGRC07Enu1Bh2KEFw4FNHbekH8yzbIU9kUGxbiGmCA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz", + "integrity": "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==", "dev": true, "requires": { "get-stdin": "^6.0.0" } }, "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", + "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", "dev": true, "requires": { "debug": "^2.6.9", - "resolve": "^1.5.0" + "resolve": "^1.13.1" }, "dependencies": { "debug": { @@ -2123,9 +1958,9 @@ } }, "eslint-module-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz", - "integrity": "sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", + "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", "dev": true, "requires": { "debug": "^2.6.9", @@ -2150,9 +1985,9 @@ } }, "eslint-plugin-import": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz", - "integrity": "sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", + "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -2188,64 +2023,11 @@ "isarray": "^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=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "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=", - "dev": true, - "requires": { - "p-limit": "^1.1.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=", - "dev": true - }, - "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=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } } } }, @@ -2320,6 +2102,67 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2345,19 +2188,6 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, - "fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" - } - }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -2369,19 +2199,10 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", - "dev": true, - "requires": { - "reusify": "^1.0.0" - } - }, "figlet": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.2.4.tgz", - "integrity": "sha512-mv8YA9RruB4C5QawPaD29rEVx3N97ZTyNrE4DAfbhuo6tpcMdKnPVo8MlyT3RP5uPcg5M14bEJBq7kjFf4kAWg==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.3.0.tgz", + "integrity": "sha512-f7A8aOJAfyehLJ7lQ6rEA8WJw7kOk3lfWRi5piSjkzbK5YkI5sqO8eiLHz1ehO+DM0QYB85i8VfA6XIGUbU1dg==" }, "figures": { "version": "1.7.0", @@ -2468,11 +2289,21 @@ } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "requires": { + "semver-regex": "^2.0.0" } }, "flat": { @@ -2649,7 +2480,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", @@ -2728,6 +2560,15 @@ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -2764,30 +2605,6 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - } - } - }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", @@ -2800,9 +2617,9 @@ "dev": true }, "handlebars": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", - "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.3.tgz", + "integrity": "sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg==", "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -2828,6 +2645,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -2855,7 +2673,8 @@ "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "has-unicode": { "version": "2.0.1", @@ -2909,17 +2728,14 @@ } }, "highlight.js": { - "version": "9.17.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.17.1.tgz", - "integrity": "sha512-TA2/doAur5Ol8+iM3Ov7qy3jYcr/QiJ2eDTdRF4dfbjG7AaaB99J5G+zSl11ljbl6cIcahgPY6SKb3sC3EJ0fw==", - "requires": { - "handlebars": "^4.5.3" - } + "version": "9.18.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz", + "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==" }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, "html-escaper": { @@ -2987,16 +2803,23 @@ } } }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, "husky": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.0.1.tgz", - "integrity": "sha512-x2wzNz3mra5rSYBPb9w59Bg3d5HnJZ+DBAALbMl/1K15Yv8zhcAxhrS792nMyjkxLsoPZtNpmnX+RqLtIKxpDQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz", + "integrity": "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==", "dev": true, "requires": { "chalk": "^3.0.0", "ci-info": "^2.0.0", + "compare-versions": "^3.5.1", "cosmiconfig": "^6.0.0", - "get-stdin": "^7.0.0", + "find-versions": "^3.2.0", "opencollective-postinstall": "^2.0.2", "pkg-dir": "^4.2.0", "please-upgrade-node": "^3.2.0", @@ -3062,12 +2885,6 @@ "path-exists": "^4.0.0" } }, - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3110,6 +2927,12 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -3199,31 +3022,31 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.3.tgz", - "integrity": "sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", + "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.15", "mute-stream": "0.0.8", - "run-async": "^2.2.0", + "run-async": "^2.4.0", "rxjs": "^6.5.3", "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" }, "dependencies": { "ansi-escapes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", - "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.11.0" } }, "ansi-regex": { @@ -3231,6 +3054,24 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -3239,19 +3080,37 @@ "restore-cursor": "^3.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3287,22 +3146,23 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -3324,22 +3184,19 @@ "is-buffer": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, "is-extglob": { @@ -3383,18 +3240,6 @@ "symbol-observable": "^1.1.0" } }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -3404,6 +3249,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, "requires": { "has": "^1.0.1" } @@ -3415,15 +3261,22 @@ "dev": true }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", "dev": true }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -3633,9 +3486,9 @@ } }, "jsbi": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.1.1.tgz", - "integrity": "sha512-+HQESPaV0mRiH614z4JPVPAftcRC2p53x92lySPzUzFwJbJTMpzHz8OYUkcXPN3fOcHUe0NdVcHnCtX/1+eCrA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.1.2.tgz", + "integrity": "sha512-5nDXo1X9QVaXK/Cpb5VECV9ss1QPbjUuk1qSruHB1PK/g39Sd414K4nci99ElFDZv0vzxDEnKn3o49/Tn9Yagw==" }, "jsbn": { "version": "0.1.1", @@ -3712,9 +3565,9 @@ } }, "just-extend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.0.tgz", + "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==", "dev": true }, "jwa": { @@ -3753,38 +3606,67 @@ "dev": true }, "lint-staged": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.5.0.tgz", - "integrity": "sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.8.tgz", + "integrity": "sha512-Oa9eS4DJqvQMVdywXfEor6F4vP+21fPHF8LUXgBbVWUSWBddjqsvO6Bv1LwMChmgQZZqwUvgJSHlu8HFHAPZmA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "commander": "^2.20.0", - "cosmiconfig": "^5.2.1", + "chalk": "^3.0.0", + "commander": "^4.0.1", + "cosmiconfig": "^6.0.0", "debug": "^4.1.1", "dedent": "^0.7.0", - "del": "^5.0.0", - "execa": "^2.0.3", + "execa": "^3.4.0", "listr": "^0.14.3", "log-symbols": "^3.0.0", "micromatch": "^4.0.2", "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "string-argv": "^0.3.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", "stringify-object": "^3.3.0" }, "dependencies": { - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -3794,81 +3676,19 @@ "ms": "^2.1.1" } }, - "execa": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", - "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "path-key": "^3.0.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" + "has-flag": "^4.0.0" } } } @@ -3890,6 +3710,12 @@ "rxjs": "^6.3.3" }, "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, "p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", @@ -4000,12 +3826,36 @@ } } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "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=", + "dev": true, "requires": { - "p-locate": "^3.0.0", + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, @@ -4021,10 +3871,10 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "log-symbols": { @@ -4047,12 +3897,6 @@ "wrap-ansi": "^3.0.1" } }, - "lolex": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", - "dev": true - }, "lower-case": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", @@ -4086,9 +3930,9 @@ } }, "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "merge-stream": { @@ -4097,12 +3941,6 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", @@ -4184,9 +4022,9 @@ } }, "mocha": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.0.tgz", - "integrity": "sha512-CirsOPbO3jU86YKjjMzFLcXIb5YiGLUrjrXFHoJ3e2z9vWiaZVCZQ2+gtRGMPWF+nFhN6AWwLM/juzAQ6KRkbA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.0.tgz", + "integrity": "sha512-MymHK8UkU0K15Q/zX7uflZgVoRWiTjy0fXE/QjKts6mowUvGxOdPhZ2qj3b0iZdUrNZlW9LAIMFHB4IW+2b3EQ==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -4200,7 +4038,7 @@ "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.13.1", - "log-symbols": "2.2.0", + "log-symbols": "3.0.0", "minimatch": "3.0.4", "mkdirp": "0.5.1", "ms": "2.1.1", @@ -4215,6 +4053,15 @@ "yargs-unparser": "1.6.0" }, "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -4229,13 +4076,23 @@ "path-is-absolute": "^1.0.0" } }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "chalk": "^2.0.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" } }, "string-width": { @@ -4290,16 +4147,6 @@ "y18n": "^4.0.0", "yargs-parser": "^13.1.1" } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, @@ -4309,9 +4156,9 @@ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "mssql": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/mssql/-/mssql-6.0.1.tgz", - "integrity": "sha512-7oPhbQjotFJBgMPlzLmPwWlnrryxrDltjCNCD9BK7Df7TA9wc6Mb/0Bcx04NJyHCMAhw8C/iWjbJoeDyUfRNUA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-6.2.0.tgz", + "integrity": "sha512-C1WcvpiyGGoNyA+rNae/87V4O47S1P75zqmITutxzamocccY8BsZA+cljXJvpnYbbGlmMB5eoSaVUSqR9NyLCg==", "requires": { "debug": "^4", "tarn": "^1.1.5", @@ -4334,16 +4181,30 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "mysql": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.17.1.tgz", - "integrity": "sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA==", + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", "requires": { - "bignumber.js": "7.2.1", - "readable-stream": "2.3.6", + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", "safe-buffer": "5.1.2", "sqlstring": "2.3.1" }, "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4405,27 +4266,16 @@ "dev": true }, "nise": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nise/-/nise-4.0.3.tgz", + "integrity": "sha512-EGlhjm7/4KvmmE6B/UFsKh7eHykRl9VH+au8dduHLCyWUO/hr7+N+WtTvDUwc9zHuM1IaIJs/0lQ6Ag1jDkQSg==", "dev": true, "requires": { - "@sinonjs/formatio": "^3.2.1", + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^5.0.1", "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - } } }, "no-case": { @@ -4530,14 +4380,11 @@ "validate-npm-package-license": "^3.0.1" }, "dependencies": { - "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -4569,6 +4416,23 @@ "npm-bundled": "^1.0.1" } }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + }, + "dependencies": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + } + } + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -4696,17 +4560,20 @@ "object-inspect": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -4715,13 +4582,13 @@ } }, "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz", + "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" } @@ -4730,44 +4597,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", - "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - } } }, "object.values": { @@ -4780,44 +4613,6 @@ "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", - "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } } }, "once": { @@ -4884,6 +4679,12 @@ "os-tmpdir": "^1.0.0" } }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, "p-limit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", @@ -4893,11 +4694,29 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^1.1.0" + }, + "dependencies": { + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.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=", + "dev": true + } } }, "p-map": { @@ -4962,13 +4781,15 @@ "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=" }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" } }, "parse5": { @@ -5056,10 +4877,13 @@ } }, "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } }, "pathval": { "version": "1.1.0", @@ -5073,18 +4897,25 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.17.0.tgz", - "integrity": "sha512-70Q4ZzIdPgwMPb3zUIzAUwigNJ4v5vsWdMED6OzXMfOECeYTvTm7iSC3FpKizu/R1BHL8Do3bLs6ltGfOTAnqg==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.18.2.tgz", + "integrity": "sha512-Mvt0dGYMwvEADNKy5PMQGlzPudKcKKzJds/VbOeZJpb6f/pI3mmoXX0JksPgI3l3JPP/2Apq7F36O63J7mgveA==", "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", "pg-connection-string": "0.1.3", "pg-packet-stream": "^1.1.0", - "pg-pool": "^2.0.9", + "pg-pool": "^2.0.10", "pg-types": "^2.1.0", "pgpass": "1.x", "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": { @@ -5103,9 +4934,9 @@ "integrity": "sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg==" }, "pg-pool": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.9.tgz", - "integrity": "sha512-gNiuIEKNCT3OnudQM2kvgSnXsLkSpd6mS/fRnqs6ANtrke6j8OY5l9mnAryf1kgwJMWLg0C1N1cYTZG1xmEYHQ==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.10.tgz", + "integrity": "sha512-qdwzY92bHf3nwzIUcj+zJ0Qo5lpG/YxchahxIN8+ZVmXqkahKXsnl2aiJPHLYN9o5mB/leG+Xh6XKxtP7e0sjg==" }, "pg-types": { "version": "2.2.0", @@ -5133,6 +4964,12 @@ "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -5140,51 +4977,6 @@ "dev": true, "requires": { "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "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=", - "dev": true, - "requires": { - "p-limit": "^1.1.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=", - "dev": true - } } }, "please-upgrade-node": { @@ -5235,6 +5027,11 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -5307,44 +5104,16 @@ "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", "path-type": "^2.0.0" - }, - "dependencies": { - "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=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + } + }, + "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=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { @@ -5383,9 +5152,9 @@ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", "dev": true }, "regexpp": { @@ -5489,35 +5258,23 @@ } } }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, "rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", "requires": { "is-promise": "^2.1.0" } }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, "rxjs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", @@ -5543,9 +5300,10 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", - "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, "semver-compare": { "version": "1.0.0", @@ -5553,6 +5311,12 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true + }, "sentence-case": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.3.tgz", @@ -5575,6 +5339,15 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -5596,24 +5369,47 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sinon": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", - "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.1.tgz", + "integrity": "sha512-iTTyiQo5T94jrOx7X7QLBZyucUJ2WvL9J13+96HMfm2CGoJYbIPqRfl6wgNcqmzk0DI28jeGx5bUTXizkrqBmg==", "dev": true, "requires": { - "@sinonjs/commons": "^1.4.0", - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.3", - "diff": "^3.5.0", - "lolex": "^4.2.0", - "nise": "^1.5.2", - "supports-color": "^5.5.0" + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", + "@sinonjs/formatio": "^5.0.1", + "@sinonjs/samsam": "^5.0.3", + "diff": "^4.0.2", + "nise": "^4.0.1", + "supports-color": "^7.1.0" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "sinon-chai": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.4.0.tgz", - "integrity": "sha512-BpVxsjEkGi6XPbDXrgWUe7Cb1ZzIfxKUbu/MmH5RoUnS7AXpKo3aIYIyQUg0FMvlUL05aPt7VZuAdaeQhEnWxg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.5.0.tgz", + "integrity": "sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg==", "dev": true }, "slash": { @@ -5716,9 +5512,9 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "split": { @@ -5803,6 +5599,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1" @@ -5812,6 +5609,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1" @@ -5953,12 +5751,12 @@ "integrity": "sha512-PMtJ3HCLAZeedWjJPgGnCvcphbCOMbtZpjKgLq3qM5Qq9aQud+XHrL0WlrlgnTyS8U+jrjGbEXprFcQrxPy52g==" }, "tedious": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-6.6.2.tgz", - "integrity": "sha512-0Yziuys2h66dVlqMPJpNFciQ/N2VrgwY8o8TXyj4OZBaxrvqRPeMuTKZZVBFTGOjt/J15fR0fX0HBnCHjm7QWA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-6.7.0.tgz", + "integrity": "sha512-8qr7+sB0h4SZVQBRWUgHmYuOEflAOl2eihvxk0fVNvpvGJV4V5UC/YmSvebyfgyfwWcPO22/AnSbYVZZqf9wuQ==", "requires": { "@azure/ms-rest-nodeauth": "2.0.2", - "@types/node": "^12.7.11", + "@types/node": "^12.12.17", "@types/readable-stream": "^2.3.5", "bl": "^3.0.0", "depd": "^2.0.0", @@ -5971,22 +5769,22 @@ }, "dependencies": { "@types/node": { - "version": "12.12.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.24.tgz", - "integrity": "sha512-1Ciqv9pqwVtW6FsIUKSZNB82E5Cu1I2bBTj1xuIHXLe/1zYLl3956Nbhg2MzSYHVfl9/rmanjbQIb7LibfCnug==" + "version": "12.12.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.30.tgz", + "integrity": "sha512-sz9MF/zk6qVr3pAnM0BSQvYIBK44tS75QC5N+VbWSE4DjCV/pJ+UzCW/F+vVnl7TkOPcuwQureKNtSSwjBTaMg==" }, "iconv-lite": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", - "integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz", + "integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6091,22 +5889,22 @@ } }, "ts-node": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz", - "integrity": "sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.6.2.tgz", + "integrity": "sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==", "dev": true, "requires": { "arg": "^4.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.6", - "yn": "^3.0.0" + "yn": "3.1.1" }, "dependencies": { "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "yn": { @@ -6164,6 +5962,11 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -6174,9 +5977,9 @@ } }, "typeorm": { - "version": "0.2.22", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.22.tgz", - "integrity": "sha512-mDEnMtzRwX4zMYbyzM9xDn7jvGs8hfQ2ymOBq36Zxq1RVM642numwlRbr4W8dU7ZYx8CQUE9rmk+sU0baHD9Rw==", + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.24.tgz", + "integrity": "sha512-L9tQv6nNLRyh+gex/qc8/CyLs8u0kXKqk1OjYGF13k/KOg6N2oibwkuGgv0FuoTGYx2ta2NmqvuMUAMrHIY5ew==", "requires": { "app-root-path": "^3.0.0", "buffer": "^5.1.0", @@ -6188,6 +5991,7 @@ "js-yaml": "^3.13.1", "mkdirp": "^0.5.1", "reflect-metadata": "^0.1.13", + "sha.js": "^2.4.11", "tslib": "^1.9.0", "xml2js": "^0.4.17", "yargonaut": "^1.1.2", @@ -6207,6 +6011,31 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -6218,9 +6047,9 @@ } }, "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -6231,13 +6060,13 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -6246,32 +6075,25 @@ } }, "typescript": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", - "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==" + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", + "dev": true }, "uglify-js": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.2.tgz", - "integrity": "sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.0.tgz", + "integrity": "sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ==", "optional": true, "requires": { "commander": "~2.20.3", "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "optional": true - } } }, "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", + "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==" }, "universalify": { "version": "0.1.2", @@ -6327,15 +6149,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -6454,12 +6267,11 @@ } }, "xml2js": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", - "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "requires": { "sax": ">=0.6.0", - "util.promisify": "~1.0.0", "xmlbuilder": "~11.0.0" } }, @@ -6469,9 +6281,9 @@ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.3.0.tgz", + "integrity": "sha512-z9s6k3wxE+aZHgXYxSTpGDo7BYOUfJsIRyoZiX6HTjwpwfS2wpQBQKa2fD+ShLyPkqDYo5ud7KitmLZ2Cd6r0g==" }, "xpath.js": { "version": "1.1.0", @@ -6494,12 +6306,12 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yaml": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", - "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", + "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", "dev": true, "requires": { - "@babel/runtime": "^7.6.3" + "@babel/runtime": "^7.8.7" } }, "yargonaut": { @@ -6550,9 +6362,9 @@ } }, "yargs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz", - "integrity": "sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", + "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -6564,7 +6376,7 @@ "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^16.1.0" + "yargs-parser": "^18.1.0" }, "dependencies": { "ansi-regex": { @@ -6673,9 +6485,9 @@ } }, "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.0.tgz", + "integrity": "sha512-o/Jr6JBOv6Yx3pL+5naWSoIA2jJ+ZkMYQG/ie9qFbukBe4uzmBatlXFOiu/tNKRWEtyf+n5w7jc/O16ufqOTdQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -6683,6 +6495,16 @@ } } }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "yargs-unparser": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", @@ -6694,12 +6516,40 @@ "yargs": "^13.3.0" }, "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -6712,9 +6562,9 @@ } }, "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "cliui": "^5.0.0", @@ -6726,13 +6576,13 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -6742,9 +6592,10 @@ } }, "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz", + "integrity": "sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==", + "dev": true } } } diff --git a/package.json b/package.json index 3a9348c..d6156ea 100644 --- a/package.json +++ b/package.json @@ -28,43 +28,41 @@ "dependencies": { "change-case": "^4.1.1", "fs-extra": "^8.1.0", - "handlebars": "^4.5.3", - "inquirer": "^7.0.3", - "mssql": "^6.0.1", - "mysql": "^2.17.1", - "pg": "^7.17.0", + "handlebars": "^4.7.3", + "inquirer": "^7.1.0", + "mssql": "^6.2.0", + "mysql": "^2.18.1", + "pg": "^7.18.2", "pluralize": "^8.0.0", "prettier": "^1.19.1", "reflect-metadata": "^0.1.13", "sqlite3": "^4.1.1", - "typeorm": "^0.2.22", - "typescript": "^3.7.4", - "yargs": "^15.1.0", - "yn": "^3.1.1" + "typeorm": "^0.2.24", + "yargs": "^15.3.0" }, "devDependencies": { - "@types/array.prototype.flatmap": "^1.2.0", - "@types/chai": "^4.2.7", + "@types/array.prototype.flatmap": "^1.2.1", + "@types/chai": "^4.2.11", "@types/chai-as-promised": "^7.1.2", "@types/chai-subset": "^1.3.3", - "@types/eslint": "^6.1.3", - "@types/fs-extra": "^8.0.1", + "@types/eslint": "^6.1.8", + "@types/fs-extra": "^8.1.0", "@types/handlebars": "^4.1.0", "@types/inquirer": "^6.5.0", - "@types/mocha": "^5.2.7", + "@types/mocha": "^7.0.2", "@types/mssql": "^6.0.0", - "@types/mysql": "^2.15.8", - "@types/node": "^13.1.4", - "@types/oracledb": "^4.1.1", - "@types/pg": "^7.14.1", + "@types/mysql": "^2.15.9", + "@types/node": "^13.9.1", + "@types/oracledb": "^4.2.0", + "@types/pg": "^7.14.3", "@types/pluralize": "0.0.29", "@types/prettier": "^1.19.0", - "@types/sinon": "^7.5.1", + "@types/sinon": "^7.5.2", "@types/sqlite3": "^3.1.6", - "@types/yargs": "^13.0.4", - "@typescript-eslint/eslint-plugin": "^2.15.0", - "@typescript-eslint/parser": "^2.15.0", - "@typescript-eslint/typescript-estree": "^2.15.0", + "@types/yargs": "^15.0.4", + "@typescript-eslint/eslint-plugin": "^2.23.0", + "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/typescript-estree": "^2.23.0", "array.prototype.flatmap": "^1.2.3", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", @@ -72,18 +70,20 @@ "codecov": "^3.6.1", "dotenv": "^8.2.0", "eslint": "^6.8.0", - "eslint-config-airbnb-base": "^14.0.0", - "eslint-config-prettier": "^6.9.0", - "eslint-plugin-import": "^2.19.1", - "husky": "^4.0.1", - "lint-staged": "^9.5.0", - "mocha": "^7.0.0", + "eslint-config-airbnb-base": "^14.1.0", + "eslint-config-prettier": "^6.10.0", + "eslint-plugin-import": "^2.20.1", + "husky": "^4.2.3", + "lint-staged": "^10.0.8", + "mocha": "^7.1.0", "ncp": "^2.0.0", "nyc": "^15.0.0", - "rimraf": "^3.0.0", - "sinon": "^7.5.0", - "sinon-chai": "^3.4.0", - "ts-node": "^8.5.4" + "rimraf": "^3.0.2", + "sinon": "^9.0.1", + "sinon-chai": "^3.5.0", + "ts-node": "^8.6.2", + "typescript": "^3.8.3", + "yn": "^4.0.0" }, "husky": { "hooks": { diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 14709e1..23eb1ff 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -89,7 +89,10 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG entities.forEach(ent => { response .filter(filterVal => { - return filterVal.TABLE_NAME === ent.tscName && filterVal.TABLE_SCHEMA === ent.schema; + return ( + filterVal.TABLE_NAME === ent.tscName && + filterVal.TABLE_SCHEMA === ent.schema + ); }) .forEach(resp => { const tscName = resp.COLUMN_NAME; @@ -298,7 +301,9 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG entities.forEach(ent => { const entityIndices = response.filter( - filterVal => filterVal.TableName === ent.tscName && filterVal.TableSchema === ent.schema + filterVal => + filterVal.TableName === ent.tscName && + filterVal.TableSchema === ent.schema ); const indexNames = new Set(entityIndices.map(v => v.IndexName)); indexNames.forEach(indexName => { diff --git a/test/integration/runTestsFromPath.test.ts b/test/integration/runTestsFromPath.test.ts index 9b52340..0381109 100644 --- a/test/integration/runTestsFromPath.test.ts +++ b/test/integration/runTestsFromPath.test.ts @@ -5,7 +5,7 @@ import * as fs from "fs-extra"; import * as path from "path"; import * as chaiSubset from "chai-subset"; import * as flatMap from "array.prototype.flatmap"; -import yn from "yn"; +import * as yn from "yn"; import { CLIEngine } from "eslint"; import EntityFileToJson from "../utils/EntityFileToJson"; import { createDriver, dataCollectionPhase } from "../../src/Engine"; From c84798e8bf65a316a970ec918413aedf637fa361 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 15 Mar 2020 00:41:35 +0100 Subject: [PATCH 06/17] load db drivers on demand --- package.json | 2 +- src/drivers/MssqlDriver.ts | 33 +++++++++---- src/drivers/MysqlDriver.ts | 17 ++++++- src/drivers/OracleDriver.ts | 89 ++++++++++++++++++----------------- src/drivers/PostgresDriver.ts | 18 ++++++- src/drivers/SqliteDriver.ts | 22 +++++++-- src/index.ts | 2 + 7 files changed, 120 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index d6156ea..0fa8b09 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "test": "nyc --reporter=lcov ts-node ./node_modules/mocha/bin/_mocha test/**/*.test.ts -- --bail", "posttest": "eslint ./src/**/*.ts ./test/**/*.ts", "clean": "rimraf coverage output dist", - "prettier": "prettier --write ./src/*.ts ./src/**/*.ts" + "prettier": "echo Disabled until import type syntax is supported. || prettier --write ./src/*.ts ./src/**/*.ts" }, "repository": { "type": "git", diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 23eb1ff..c4a104e 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -1,4 +1,4 @@ -import * as MSSQL from "mssql"; +import type * as MSSQL from "mssql"; import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/sqlserver/SqlServerDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; @@ -22,14 +22,27 @@ export default class MssqlDriver extends AbstractDriver { public readonly standardUser = "sa"; + private MSSQL: typeof MSSQL; + private Connection: MSSQL.ConnectionPool; + public constructor() { + super(); + try { + // eslint-disable-next-line import/no-extraneous-dependencies, global-require, import/no-unresolved + this.MSSQL = require("mssql"); + } catch (error) { + TomgUtils.LogError("", false, error); + throw error; + } + } + public GetAllTablesQuery = async ( schema: string, dbNames: string, tableNames: string[] ) => { - const request = new MSSQL.Request(this.Connection); + const request = new this.MSSQL.Request(this.Connection); const tableCondition = tableNames.length > 0 ? ` AND NOT TABLE_NAME IN ('${tableNames.join("','")}')` @@ -54,7 +67,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG schema: string, dbNames: string ): Promise { - const request = new MSSQL.Request(this.Connection); + const request = new this.MSSQL.Request(this.Connection); const response: { TABLE_NAME: string; COLUMN_NAME: string; @@ -253,7 +266,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG schema: string, dbNames: string ): Promise { - const request = new MSSQL.Request(this.Connection); + const request = new this.MSSQL.Request(this.Connection); const response: { TableName: string; TableSchema: string; @@ -333,7 +346,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG dbNames: string, generationOptions: IGenerationOptions ): Promise { - const request = new MSSQL.Request(this.Connection); + const request = new this.MSSQL.Request(this.Connection); const response: { TableWithForeignKey: string; FK_PartNo: number; @@ -469,7 +482,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG }; const promise = new Promise((resolve, reject) => { - this.Connection = new MSSQL.ConnectionPool(config, err => { + this.Connection = new this.MSSQL.ConnectionPool(config, err => { if (!err) { resolve(true); } else { @@ -487,22 +500,22 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG } public async CreateDB(dbName: string) { - const request = new MSSQL.Request(this.Connection); + const request = new this.MSSQL.Request(this.Connection); await request.query(`CREATE DATABASE ${dbName}; `); } public async UseDB(dbName: string) { - const request = new MSSQL.Request(this.Connection); + const request = new this.MSSQL.Request(this.Connection); await request.query(`USE ${dbName}; `); } public async DropDB(dbName: string) { - const request = new MSSQL.Request(this.Connection); + const request = new this.MSSQL.Request(this.Connection); await request.query(`DROP DATABASE ${dbName}; `); } public async CheckIfDBExists(dbName: string): Promise { - const request = new MSSQL.Request(this.Connection); + const request = new this.MSSQL.Request(this.Connection); const resp = await request.query( `SELECT name FROM master.sys.databases WHERE name = N'${dbName}' ` ); diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 59a5e33..a21df74 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -1,4 +1,4 @@ -import * as MYSQL from "mysql"; +import type * as MYSQL from "mysql"; import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/mysql/MysqlDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; @@ -24,8 +24,21 @@ export default class MysqlDriver extends AbstractDriver { public readonly standardSchema = ""; + private MYSQL: typeof MYSQL; + private Connection: MYSQL.Connection; + public constructor() { + super(); + try { + // eslint-disable-next-line import/no-extraneous-dependencies, global-require, import/no-unresolved + this.MYSQL = require("mysql"); + } catch (error) { + TomgUtils.LogError("", false, error); + throw error; + } + } + public GetAllTablesQuery = async ( schema: string, dbNames: string, @@ -458,7 +471,7 @@ export default class MysqlDriver extends AbstractDriver { } const promise = new Promise((resolve, reject) => { - this.Connection = MYSQL.createConnection(config); + this.Connection = this.MYSQL.createConnection(config); this.Connection.connect(err => { if (!err) { diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 81d4ad2..9411762 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -1,3 +1,5 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +import type * as Oracle from "oracledb" import * as TypeormDriver from "typeorm/driver/oracle/OracleDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import * as TomgUtils from "../Utils"; @@ -20,16 +22,16 @@ export default class OracleDriver extends AbstractDriver { public readonly standardSchema = ""; - public Oracle: any; + private Oracle: typeof Oracle; - private Connection: any /* Oracle.IConnection */; + private Connection: Oracle.Connection; public constructor() { super(); try { // eslint-disable-next-line import/no-extraneous-dependencies, global-require, import/no-unresolved this.Oracle = require("oracledb"); - this.Oracle.outFormat = this.Oracle.OBJECT; + this.Oracle.outFormat = (this.Oracle as any).OBJECT; } catch (error) { TomgUtils.LogError("", false, error); throw error; @@ -45,12 +47,11 @@ export default class OracleDriver extends AbstractDriver { tableNames.length > 0 ? ` AND NOT TABLE_NAME IN ('${tableNames.join("','")}')` : ""; - const response: { - TABLE_SCHEMA: string; + const response= ( + await this.Connection.execute<{ + TABLE_SCHEMA: string; TABLE_NAME: string; - DB_NAME: string; - }[] = ( - await this.Connection.execute( + DB_NAME: string;}>( `SELECT NULL AS TABLE_SCHEMA, TABLE_NAME, NULL AS DB_NAME FROM all_tables WHERE owner = (select user from dual) ${tableCondition}` ) ).rows!; @@ -58,20 +59,20 @@ export default class OracleDriver extends AbstractDriver { }; public async GetCoulmnsFromEntity(entities: Entity[]): Promise { - const response: { - TABLE_NAME: string; - COLUMN_NAME: string; - DATA_DEFAULT: string; - NULLABLE: string; - DATA_TYPE: string; - DATA_LENGTH: number; - DATA_PRECISION: number; - DATA_SCALE: number; - IDENTITY_COLUMN: string; // doesn't exist in old oracle versions (#195) - IS_UNIQUE: number; - }[] = ( + const response = ( await this.Connection - .execute(`SELECT utc.*, (select count(*) from USER_CONS_COLUMNS ucc + .execute<{ + TABLE_NAME: string; + COLUMN_NAME: string; + DATA_DEFAULT: string; + NULLABLE: string; + DATA_TYPE: string; + DATA_LENGTH: number; + DATA_PRECISION: number; + DATA_SCALE: number; + IDENTITY_COLUMN: string; // doesn't exist in old oracle versions (#195) + IS_UNIQUE: number; + }>(`SELECT utc.*, (select count(*) from USER_CONS_COLUMNS ucc JOIN USER_CONSTRAINTS uc ON uc.CONSTRAINT_NAME = ucc.CONSTRAINT_NAME and uc.CONSTRAINT_TYPE='U' where ucc.column_name = utc.COLUMN_NAME AND ucc.table_name = utc.TABLE_NAME) IS_UNIQUE FROM USER_TAB_COLUMNS utc`) @@ -226,15 +227,15 @@ export default class OracleDriver extends AbstractDriver { } public async GetIndexesFromEntity(entities: Entity[]): Promise { - const response: { - COLUMN_NAME: string; - TABLE_NAME: string; - INDEX_NAME: string; - UNIQUENESS: string; - ISPRIMARYKEY: number; - }[] = ( + const response = ( await this.Connection - .execute(`SELECT ind.TABLE_NAME, ind.INDEX_NAME, col.COLUMN_NAME,ind.UNIQUENESS, CASE WHEN uc.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END ISPRIMARYKEY + .execute<{ + COLUMN_NAME: string; + TABLE_NAME: string; + INDEX_NAME: string; + UNIQUENESS: string; + ISPRIMARYKEY: number; + }>(`SELECT ind.TABLE_NAME, ind.INDEX_NAME, col.COLUMN_NAME,ind.UNIQUENESS, CASE WHEN uc.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END ISPRIMARYKEY FROM USER_INDEXES ind JOIN USER_IND_COLUMNS col ON ind.INDEX_NAME=col.INDEX_NAME LEFT JOIN USER_CONSTRAINTS uc ON uc.INDEX_NAME = ind.INDEX_NAME @@ -274,17 +275,17 @@ export default class OracleDriver extends AbstractDriver { dbNames: string, generationOptions: IGenerationOptions ): Promise { - const response: { - OWNER_TABLE_NAME: string; - OWNER_POSITION: string; - OWNER_COLUMN_NAME: string; - CHILD_TABLE_NAME: string; - CHILD_COLUMN_NAME: string; - DELETE_RULE: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; - CONSTRAINT_NAME: string; - }[] = ( + const response = ( await this.Connection - .execute(`select owner.TABLE_NAME OWNER_TABLE_NAME,ownCol.POSITION OWNER_POSITION,ownCol.COLUMN_NAME OWNER_COLUMN_NAME, + .execute<{ + OWNER_TABLE_NAME: string; + OWNER_POSITION: string; + OWNER_COLUMN_NAME: string; + CHILD_TABLE_NAME: string; + CHILD_COLUMN_NAME: string; + DELETE_RULE: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; + CONSTRAINT_NAME: string; + }>(`select owner.TABLE_NAME OWNER_TABLE_NAME,ownCol.POSITION OWNER_POSITION,ownCol.COLUMN_NAME OWNER_COLUMN_NAME, child.TABLE_NAME CHILD_TABLE_NAME ,childCol.COLUMN_NAME CHILD_COLUMN_NAME, owner.DELETE_RULE, owner.CONSTRAINT_NAME @@ -345,9 +346,9 @@ export default class OracleDriver extends AbstractDriver { } public async ConnectToServer(connectionOptions: IConnectionOptions) { - let config: any; + let config: Oracle.ConnectionAttributes; if (connectionOptions.user === String(process.env.ORACLE_UsernameSys)) { - config /* Oracle.IConnectionAttributes */ = { + config = { connectString: `${connectionOptions.host}:${connectionOptions.port}/${connectionOptions.databaseName}`, externalAuth: connectionOptions.ssl, password: connectionOptions.password, @@ -355,7 +356,7 @@ export default class OracleDriver extends AbstractDriver { user: connectionOptions.user }; } else { - config /* Oracle.IConnectionAttributes */ = { + config = { connectString: `${connectionOptions.host}:${connectionOptions.port}/${connectionOptions.databaseName}`, externalAuth: connectionOptions.ssl, password: connectionOptions.password, @@ -400,10 +401,10 @@ export default class OracleDriver extends AbstractDriver { } public async CheckIfDBExists(dbName: string): Promise { - const x = await this.Connection.execute( + const {rows} = await this.Connection.execute( `select count(*) as CNT from dba_users where username='${dbName.toUpperCase()}'` ); - return x.rows[0][0] > 0 || x.rows[0].CNT; + return rows![0][0] > 0 || rows![0].CNT; } private static ReturnDefaultValueFunction( diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 174becb..a7bcc36 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -1,4 +1,4 @@ -import * as PG from "pg"; +import type * as PG from "pg"; import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/postgres/PostgresDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; @@ -22,8 +22,22 @@ export default class PostgresDriver extends AbstractDriver { public readonly standardSchema = "public"; + private PG: typeof PG; + private Connection: PG.Client; + public constructor() { + super(); + try { + // eslint-disable-next-line import/no-extraneous-dependencies, global-require, import/no-unresolved + this.PG = require("pg"); + } catch (error) { + TomgUtils.LogError("", false, error); + throw error; + } + } + + public GetAllTablesQuery = async ( schema: string, dbNames: string, @@ -599,7 +613,7 @@ export default class PostgresDriver extends AbstractDriver { } public async ConnectToServer(connectionOptons: IConnectionOptions) { - this.Connection = new PG.Client({ + this.Connection = new this.PG.Client({ database: connectionOptons.databaseName, host: connectionOptons.host, password: connectionOptons.password, diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 2eee238..e429a0f 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -1,7 +1,7 @@ import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/sqlite/SqliteDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; -import * as sqliteLib from "sqlite3"; +import type * as sqliteLib from "sqlite3"; import * as TomgUtils from "../Utils"; import AbstractDriver from "./AbstractDriver"; import IConnectionOptions from "../IConnectionOptions"; @@ -22,14 +22,28 @@ export default class SqliteDriver extends AbstractDriver { public readonly standardSchema = ""; - public sqlite = sqliteLib.verbose(); + private sqliteLib:typeof sqliteLib; - public db: sqliteLib.Database; + private sqlite:sqliteLib.sqlite3; - public tablesWithGeneratedPrimaryKey: string[] = new Array(); + private db: sqliteLib.Database; + + private tablesWithGeneratedPrimaryKey: string[] = new Array(); public GetAllTablesQuery: any; + public constructor() { + super(); + try { + // eslint-disable-next-line import/no-extraneous-dependencies, global-require, import/no-unresolved + this.sqliteLib = require("sqlite3"); + this.sqlite= this.sqliteLib.verbose() + } catch (error) { + TomgUtils.LogError("", false, error); + throw error; + } + } + public async GetAllTables( schema: string, dbNames: string, diff --git a/src/index.ts b/src/index.ts index 2ac00ef..e42802f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,4 @@ +// TODO: Enable prettier once import type syntax is supported import * as Yargs from "yargs"; import { createDriver, createModelFromDatabase } from "./Engine"; import * as TomgUtils from "./Utils"; @@ -11,6 +12,7 @@ import IGenerationOptions, { import fs = require("fs-extra"); import inquirer = require("inquirer"); import path = require("path"); + // eslint-disable-next-line @typescript-eslint/no-floating-promises CliLogic(); From 1f928d34c2315224f287f70727dc6be125e4cad7 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 15 Mar 2020 16:48:57 +0100 Subject: [PATCH 07/17] #243 Use statement not available on Azure SQL --- src/drivers/MssqlDriver.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index c4a104e..d091063 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -277,7 +277,9 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG }[] = []; await Promise.all( dbNames.split(",").map(async dbName => { - await this.UseDB(dbName); + if (dbNames.length>1) { + await this.UseDB(dbName); + } const resp: { TableName: string; TableSchema: string; @@ -359,7 +361,9 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG }[] = []; await Promise.all( dbNames.split(",").map(async dbName => { - await this.UseDB(dbName); + if (dbNames.length>1) { + await this.UseDB(dbName); + } const resp: { TableWithForeignKey: string; FK_PartNo: number; From fa85567d5a2e0104f01f3e6b271a8027a5e08df5 Mon Sep 17 00:00:00 2001 From: nguyenkimbang Date: Tue, 17 Mar 2020 15:55:35 +0700 Subject: [PATCH 08/17] ignore error table --- src/ModelGeneration.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/ModelGeneration.ts b/src/ModelGeneration.ts index af573e9..b94d06b 100644 --- a/src/ModelGeneration.ts +++ b/src/ModelGeneration.ts @@ -80,13 +80,18 @@ function generateModels( ) : rendered ); - const formatted = Prettier.format(withImportStatements, { - parser: "typescript" - }); - fs.writeFileSync(resultFilePath, formatted, { - encoding: "UTF-8", - flag: "w" - }); + try { + const formatted = Prettier.format(withImportStatements, { + parser: 'typescript', + }); + fs.writeFileSync(resultFilePath, formatted, { + encoding: 'UTF-8', + flag: 'w', + }); + } catch (error) { + console.log('Trouble when generate for table: ', element.sqlName); + console.log(error); + } }); } From e513895060d1f5cf6d3195bcbde5d8a2abf710d1 Mon Sep 17 00:00:00 2001 From: Konuch Date: Tue, 17 Mar 2020 21:19:20 +0100 Subject: [PATCH 09/17] Export MySQL and MariaDB column comments. --- src/drivers/MysqlDriver.ts | 4 +++- src/models/Column.ts | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index a21df74..07b8d88 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -78,9 +78,10 @@ export default class MysqlDriver extends AbstractDriver { IsIdentity: number; COLUMN_TYPE: string; COLUMN_KEY: string; + COLUMN_COMMENT: string; }>(`SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE, DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE, - CASE WHEN EXTRA like '%auto_increment%' THEN 1 ELSE 0 END IsIdentity, COLUMN_TYPE, COLUMN_KEY + CASE WHEN EXTRA like '%auto_increment%' THEN 1 ELSE 0 END IsIdentity, COLUMN_TYPE, COLUMN_KEY, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA IN (${MysqlDriver.escapeCommaSeparatedList( dbNames )}) @@ -102,6 +103,7 @@ export default class MysqlDriver extends AbstractDriver { let columnType = resp.DATA_TYPE; if (resp.IS_NULLABLE === "YES") options.nullable = true; if (resp.COLUMN_KEY === "UNI") options.unique = true; + if (resp.COLUMN_COMMENT) options.comment = resp.COLUMN_COMMENT; if (resp.COLUMN_TYPE.endsWith(" unsigned")) options.unsigned = true; switch (resp.DATA_TYPE) { diff --git a/src/models/Column.ts b/src/models/Column.ts index f62271e..cc1e1f6 100644 --- a/src/models/Column.ts +++ b/src/models/Column.ts @@ -21,5 +21,6 @@ export type Column = { unsigned?: boolean; enum?: string[]; array?: boolean; // ? + comment?: string; }; }; From 6b27de1d44125c8409b6c559c3132a1b911492b1 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 17 Mar 2020 22:00:36 +0100 Subject: [PATCH 10/17] update Travis CI config --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9af7e5c..5d3491d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,11 +4,13 @@ node_js: - 12 - 10 cache: npm -sudo: required +branches: + except: + - no-engines services: - docker env: - matrix: + jobs: - POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=test POSTGRES_Password=test POSTGRES_Database=test POSTGRES_SSL=0 MYSQL_Skip=0 MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=admin @@ -47,5 +49,3 @@ after_success: after_failure: - docker ps - docker-compose logs -dd: - secure: lONUbDz2a1LWId+Z2tTaxajK7MilX/XbQ875FYD6EE09DQ0xcoPdq2/KW5/pxuN1tz4QzTG7izMwra3XWtkBySxqFwJDUOibsgYVgn+EMMuPWNMNnQgXqTTmHbtbm1L1aSMHu4bCu4cJkJBX6503R0Kv4Hbdr2LFnSUI/9KqrevA1cVyksN71BlNBdRtvnHInwB5wNNvGULSLT+DR6qGytLGjq4ZF+pW7dH3A1LNGfDY4ivGPHt9eAWGHcVuESmudO1ADmf6XTZAJVdKqDy5eJguK48XyAqRmTc1vBxDJmCNDaU/mV6fkUoEkCjn9XfG5nJLOKviycc1j/OCuuWuqojmTlRInPGV8GDT8lNivwqLBMzvKoKgSQQROEVus4xzo64M808dFbUS30et3++O589X/7P9Wjmt+6HawcEsSq5TQfEutyB+tM9OwedTkB5Fwwmymuqx23zCAJ2orP7WoIG/ApmnKu6LmpoM340UxxSGkurztQP1OqFrf4u8kDVp9/xzqnd7qSfEd8iKvvb1bOykWGxx6dhyThCdSNyT5GQL3aub3LV6g0UB37lbhB+BVSrOAhN0r1cIWT2wr2mRxwoepObmrcNQ+AOUUXE/RcONsiEQr+STsEIjJb7bTANljRYMKpiPdsAdhvDaUZRyu8KBArTCDPotanzwQFERcw8= From f36c6ff84808103522dee3cffd4298f33f4a66da Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 18 Mar 2020 22:52:12 +0100 Subject: [PATCH 11/17] disable full logging on failure --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5d3491d..38c1d84 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,6 +46,6 @@ script: - travis_retry sh -c 'sleep 90 && npm t -- --colors' after_success: - codecov -after_failure: -- docker ps -- docker-compose logs +# after_failure: +# - docker ps +# - docker-compose logs From d9459ab85edb2391c52f47309920acd196ff0b54 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 19 Mar 2020 17:11:36 +0100 Subject: [PATCH 12/17] fix eslint warning on PRs --- .travis.yml | 6 +++--- src/drivers/OracleDriver.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 38c1d84..86b5acd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,6 +46,6 @@ script: - travis_retry sh -c 'sleep 90 && npm t -- --colors' after_success: - codecov -# after_failure: -# - docker ps -# - docker-compose logs +after_failure: + - docker-compose logs + - docker ps diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 9411762..7d27726 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -1,4 +1,4 @@ -// eslint-disable-next-line import/no-extraneous-dependencies +// eslint-disable-next-line import/no-extraneous-dependencies, import/no-unresolved import type * as Oracle from "oracledb" import * as TypeormDriver from "typeorm/driver/oracle/OracleDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; From 4a7b1338f0c12fbaace66f14b397b238793daa60 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 19 Mar 2020 17:37:00 +0100 Subject: [PATCH 13/17] Allow models which don't generate properly to be saved --- src/ModelGeneration.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/ModelGeneration.ts b/src/ModelGeneration.ts index b94d06b..97420f7 100644 --- a/src/ModelGeneration.ts +++ b/src/ModelGeneration.ts @@ -80,18 +80,22 @@ function generateModels( ) : rendered ); + let formatted = ""; try { - const formatted = Prettier.format(withImportStatements, { - parser: 'typescript', - }); - fs.writeFileSync(resultFilePath, formatted, { - encoding: 'UTF-8', - flag: 'w', + formatted = Prettier.format(withImportStatements, { + parser: "typescript" }); } catch (error) { - console.log('Trouble when generate for table: ', element.sqlName); + console.log( + "There were some problems with model generation for table: ", + element.sqlName + ); console.log(error); } + fs.writeFileSync(resultFilePath, formatted, { + encoding: "UTF-8", + flag: "w" + }); }); } From 4fad41cd103f00d072294f53e720585fbb3aacb6 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 19 Mar 2020 18:28:12 +0100 Subject: [PATCH 14/17] proper fix of models which don't generate properly --- src/ModelGeneration.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ModelGeneration.ts b/src/ModelGeneration.ts index 97420f7..c72c91b 100644 --- a/src/ModelGeneration.ts +++ b/src/ModelGeneration.ts @@ -86,11 +86,12 @@ function generateModels( parser: "typescript" }); } catch (error) { - console.log( + console.error( "There were some problems with model generation for table: ", element.sqlName ); - console.log(error); + console.error(error); + formatted = withImportStatements; } fs.writeFileSync(resultFilePath, formatted, { encoding: "UTF-8", From f35e212dabaff4d034156eafefcc052bafd7286d Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 19 Mar 2020 23:26:22 +0100 Subject: [PATCH 15/17] test for generating column comment(#93,#260) --- .../github-issues/93/entity/Post.ts | 22 +++++++++++++++++++ test/integration/runTestsFromPath.test.ts | 5 +++++ 2 files changed, 27 insertions(+) create mode 100644 test/integration/github-issues/93/entity/Post.ts diff --git a/test/integration/github-issues/93/entity/Post.ts b/test/integration/github-issues/93/entity/Post.ts new file mode 100644 index 0000000..9796313 --- /dev/null +++ b/test/integration/github-issues/93/entity/Post.ts @@ -0,0 +1,22 @@ +import { + Index, + Entity, + PrimaryColumn, + Column, + OneToOne, + OneToMany, + ManyToOne, + JoinColumn +} from "typeorm"; + +@Entity("Post") +export class Post { + @Column("integer", { + primary: true, + name: "id" + }) + id: number; + + @Column({ comment: "comment" }) + body: string; +} diff --git a/test/integration/runTestsFromPath.test.ts b/test/integration/runTestsFromPath.test.ts index 0381109..2462b5d 100644 --- a/test/integration/runTestsFromPath.test.ts +++ b/test/integration/runTestsFromPath.test.ts @@ -128,6 +128,11 @@ function runTestForMultipleDrivers( dbDriver ) ); + case "93": + return dbDrivers.filter( + dbDriver => + ["mysql", "mariadb"].includes(dbDriver) // Only db engines supported by typeorm at the time of writing + ); case "144": return dbDrivers.filter(dbDriver => ["mysql", "mariadb"].includes(dbDriver) From 4035794ab8b0f7c208a533f85851f9da6f6376a1 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Fri, 20 Mar 2020 08:49:51 +0100 Subject: [PATCH 16/17] typos --- src/drivers/MysqlDriver.ts | 14 +++++++------- src/drivers/PostgresDriver.ts | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 07b8d88..8e7f237 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -56,8 +56,8 @@ export default class MysqlDriver extends AbstractDriver { FROM information_schema.tables WHERE table_type='BASE TABLE' AND table_schema IN (${MysqlDriver.escapeCommaSeparatedList( - dbNames - )}) ${tableCondition}`); + dbNames + )}) ${tableCondition}`); return response; }; @@ -83,8 +83,8 @@ export default class MysqlDriver extends AbstractDriver { DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE, CASE WHEN EXTRA like '%auto_increment%' THEN 1 ELSE 0 END IsIdentity, COLUMN_TYPE, COLUMN_KEY, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA IN (${MysqlDriver.escapeCommaSeparatedList( - dbNames - )}) + dbNames + )}) order by ordinal_position`); entities.forEach(ent => { response @@ -317,8 +317,8 @@ export default class MysqlDriver extends AbstractDriver { CASE WHEN INDEX_NAME='PRIMARY' THEN 1 ELSE 0 END is_primary_key FROM information_schema.statistics sta WHERE table_schema IN (${MysqlDriver.escapeCommaSeparatedList( - dbNames - )})`); + dbNames + )})`); entities.forEach(ent => { const entityIndices = response.filter( filterVal => filterVal.TableName === ent.tscName @@ -433,7 +433,7 @@ export default class MysqlDriver extends AbstractDriver { resolve(true); } else { TomgUtils.LogError( - `Error disconnecting to ${this.EngineName} Server.`, + `Error disconnecting from ${this.EngineName} Server.`, false, err.message ); diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index a7bcc36..5f04ced 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -117,8 +117,8 @@ export default class PostgresDriver extends AbstractDriver { const defaultValue = generated ? undefined : PostgresDriver.ReturnDefaultValueFunction( - resp.column_default - ); + resp.column_default + ); const columnTypes = this.MatchColumnTypes( resp.data_type, @@ -600,7 +600,7 @@ export default class PostgresDriver extends AbstractDriver { resolve(true); } else { TomgUtils.LogError( - "Error connecting to Postgres Server.", + "Error disconnecting from to Postgres Server.", false, err.message ); From 288c159a6f197f434b20c4c27a24778c2baa104d Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 24 Mar 2020 22:57:34 +0100 Subject: [PATCH 17/17] update dependencies --- package-lock.json | 203 ++++++++++++++++++--------------- package.json | 26 ++--- src/IConnectionOptions.ts | 2 +- src/IGenerationOptions.ts | 4 +- src/ModelCustomization.ts | 82 ++++++------- src/ModelGeneration.ts | 43 +++---- src/Utils.ts | 6 +- src/drivers/AbstractDriver.ts | 91 +++++++-------- src/drivers/MssqlDriver.ts | 60 +++++----- src/drivers/MysqlDriver.ts | 75 ++++++------ src/drivers/OracleDriver.ts | 124 ++++++++++---------- src/drivers/PostgresDriver.ts | 65 +++++------ src/drivers/SqliteDriver.ts | 56 ++++----- src/index.ts | 171 ++++++++++++++------------- src/library.ts | 2 +- test/utils/EntityFileToJson.ts | 22 ++-- 16 files changed, 532 insertions(+), 500 deletions(-) diff --git a/package-lock.json b/package-lock.json index c7f36c1..3b4e60b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -479,9 +479,9 @@ } }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" + "version": "13.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.3.tgz", + "integrity": "sha512-01s+ac4qerwd6RHD+mVbOEsraDHSgUaefQlEdBbUolnQFjKwCr7luvAlEwW1RFojh67u0z4OUTjPn9LEl4zIkA==" }, "@types/oracledb": { "version": "4.2.0", @@ -522,9 +522,9 @@ "dev": true }, "@types/prettier": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.0.tgz", - "integrity": "sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", "dev": true }, "@types/readable-stream": { @@ -593,45 +593,56 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.23.0.tgz", - "integrity": "sha512-8iA4FvRsz8qTjR0L/nK9RcRUN3QtIHQiOm69FzV7WS3SE+7P7DyGGwh3k4UNR2JBbk+Ej2Io+jLAaqKibNhmtw==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.25.0.tgz", + "integrity": "sha512-W2YyMtjmlrOjtXc+FtTelVs9OhuR6OlYc4XKIslJ8PUJOqgYYAPRJhAqkYRQo3G4sjvG8jSodsNycEn4W2gHUw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "2.23.0", - "eslint-utils": "^1.4.3", + "@typescript-eslint/experimental-utils": "2.25.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.23.0.tgz", - "integrity": "sha512-OswxY59RcXH3NNPmq+4Kis2CYZPurRU6mG5xPcn24CjFyfdVli5mySwZz/g/xDbJXgDsYqNGq7enV0IziWGXVQ==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.25.0.tgz", + "integrity": "sha512-0IZ4ZR5QkFYbaJk+8eJ2kYeA+1tzOE1sBjbwwtSV85oNWYUBep+EyhlZ7DLUCyhMUGuJpcCCFL0fDtYAP1zMZw==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.23.0", - "eslint-scope": "^5.0.0" + "@typescript-eslint/typescript-estree": "2.25.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + } } }, "@typescript-eslint/parser": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.23.0.tgz", - "integrity": "sha512-k61pn/Nepk43qa1oLMiyqApC6x5eP5ddPz6VUYXCAuXxbmRLqkPYzkFRKl42ltxzB2luvejlVncrEpflgQoSUg==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.25.0.tgz", + "integrity": "sha512-mccBLaBSpNVgp191CP5W+8U1crTyXsRziWliCqzj02kpxdjKMvFHGJbK33NroquH3zB/gZ8H511HEsJBa2fNEg==", "dev": true, "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.23.0", - "@typescript-eslint/typescript-estree": "2.23.0", + "@typescript-eslint/experimental-utils": "2.25.0", + "@typescript-eslint/typescript-estree": "2.25.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.23.0.tgz", - "integrity": "sha512-pmf7IlmvXdlEXvE/JWNNJpEvwBV59wtJqA8MLAxMKLXNKVRC3HZBXR/SlZLPWTCcwOSg9IM7GeRSV3SIerGVqw==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.25.0.tgz", + "integrity": "sha512-VUksmx5lDxSi6GfmwSK7SSoIKSw9anukWWNitQPqt58LuYrKalzsgeuignbqnB+rK/xxGlSsCy8lYnwFfB6YJg==", "dev": true, "requires": { "debug": "^4.1.1", @@ -960,6 +971,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1922,9 +1938,9 @@ } }, "eslint-config-prettier": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz", - "integrity": "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz", + "integrity": "sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -2441,19 +2457,20 @@ "dev": true }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" }, "dependencies": { "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" } } }, @@ -3538,19 +3555,20 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" } }, "jsprim": { @@ -3606,9 +3624,9 @@ "dev": true }, "lint-staged": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.8.tgz", - "integrity": "sha512-Oa9eS4DJqvQMVdywXfEor6F4vP+21fPHF8LUXgBbVWUSWBddjqsvO6Bv1LwMChmgQZZqwUvgJSHlu8HFHAPZmA==", + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.9.tgz", + "integrity": "sha512-NKJHYgRa8oI9c4Ic42ZtF2XA6Ps7lFbXwg3q0ZEP0r55Tw3YWykCW1RzW6vu+QIGqbsy7DxndvKu93Wtr5vPQw==", "dev": true, "requires": { "chalk": "^3.0.0", @@ -4022,9 +4040,9 @@ } }, "mocha": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.0.tgz", - "integrity": "sha512-MymHK8UkU0K15Q/zX7uflZgVoRWiTjy0fXE/QjKts6mowUvGxOdPhZ2qj3b0iZdUrNZlW9LAIMFHB4IW+2b3EQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz", + "integrity": "sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -4040,7 +4058,7 @@ "js-yaml": "3.13.1", "log-symbols": "3.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.1", + "mkdirp": "0.5.3", "ms": "2.1.1", "node-environment-flags": "1.0.6", "object.assign": "4.1.0", @@ -4048,8 +4066,8 @@ "supports-color": "6.0.0", "which": "1.3.1", "wide-align": "1.1.3", - "yargs": "13.3.0", - "yargs-parser": "13.1.1", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", "yargs-unparser": "1.6.0" }, "dependencies": { @@ -4086,6 +4104,21 @@ "path-exists": "^3.0.0" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", + "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -4131,9 +4164,9 @@ } }, "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "cliui": "^5.0.0", @@ -4145,7 +4178,7 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "yargs-parser": "^13.1.2" } } } @@ -4959,9 +4992,9 @@ } }, "picomatch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", - "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, "pify": { @@ -5023,9 +5056,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.2.tgz", + "integrity": "sha512-5xJQIPT8BraI7ZnaDwSbu5zLrB6vvi8hVV58yHQ+QK64qrY40dULy0HSRlQ2/2IdzeBpjhDkqdcFBnFeDEMVdg==" }, "process-nextick-args": { "version": "2.0.1", @@ -5084,9 +5117,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "strip-json-comments": { "version": "2.0.1", @@ -5889,9 +5922,9 @@ } }, "ts-node": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.6.2.tgz", - "integrity": "sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.8.1.tgz", + "integrity": "sha512-10DE9ONho06QORKAaCBpPiFCdW+tZJuY/84tyypGtl6r+/C7Asq0dhqbRZURuUlLQtZxxDvT8eoj8cGW0ha6Bg==", "dev": true, "requires": { "arg": "^4.1.0", @@ -6096,9 +6129,9 @@ "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==" }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" }, "upper-case": { "version": "2.0.1", @@ -6362,9 +6395,9 @@ } }, "yargs": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", - "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -6376,7 +6409,7 @@ "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^18.1.0" + "yargs-parser": "^18.1.1" }, "dependencies": { "ansi-regex": { @@ -6485,9 +6518,9 @@ } }, "yargs-parser": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.0.tgz", - "integrity": "sha512-o/Jr6JBOv6Yx3pL+5naWSoIA2jJ+ZkMYQG/ie9qFbukBe4uzmBatlXFOiu/tNKRWEtyf+n5w7jc/O16ufqOTdQ==", + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.1.tgz", + "integrity": "sha512-KRHEsOM16IX7XuLnMOqImcPNbLVXMNHYAoFc3BKR8Ortl5gzDbtXvvEoGx9imk5E+X1VeNKNlcHr8B8vi+7ipA==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -6496,9 +6529,9 @@ } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -6578,16 +6611,6 @@ "y18n": "^4.0.0", "yargs-parser": "^13.1.2" } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, diff --git a/package.json b/package.json index 0fa8b09..d61b666 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "test": "nyc --reporter=lcov ts-node ./node_modules/mocha/bin/_mocha test/**/*.test.ts -- --bail", "posttest": "eslint ./src/**/*.ts ./test/**/*.ts", "clean": "rimraf coverage output dist", - "prettier": "echo Disabled until import type syntax is supported. || prettier --write ./src/*.ts ./src/**/*.ts" + "prettier": "prettier --write ./src/*.ts ./src/**/*.ts" }, "repository": { "type": "git", @@ -27,18 +27,18 @@ "homepage": "https://github.com/Kononnable/typeorm-model-generator#readme", "dependencies": { "change-case": "^4.1.1", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.0", "handlebars": "^4.7.3", "inquirer": "^7.1.0", "mssql": "^6.2.0", "mysql": "^2.18.1", "pg": "^7.18.2", "pluralize": "^8.0.0", - "prettier": "^1.19.1", + "prettier": "^2.0.2", "reflect-metadata": "^0.1.13", "sqlite3": "^4.1.1", "typeorm": "^0.2.24", - "yargs": "^15.3.0" + "yargs": "^15.3.1" }, "devDependencies": { "@types/array.prototype.flatmap": "^1.2.1", @@ -52,17 +52,17 @@ "@types/mocha": "^7.0.2", "@types/mssql": "^6.0.0", "@types/mysql": "^2.15.9", - "@types/node": "^13.9.1", + "@types/node": "^13.9.3", "@types/oracledb": "^4.2.0", "@types/pg": "^7.14.3", "@types/pluralize": "0.0.29", - "@types/prettier": "^1.19.0", + "@types/prettier": "^1.19.1", "@types/sinon": "^7.5.2", "@types/sqlite3": "^3.1.6", "@types/yargs": "^15.0.4", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", - "@typescript-eslint/typescript-estree": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^2.25.0", + "@typescript-eslint/parser": "^2.25.0", + "@typescript-eslint/typescript-estree": "^2.25.0", "array.prototype.flatmap": "^1.2.3", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", @@ -71,17 +71,17 @@ "dotenv": "^8.2.0", "eslint": "^6.8.0", "eslint-config-airbnb-base": "^14.1.0", - "eslint-config-prettier": "^6.10.0", + "eslint-config-prettier": "^6.10.1", "eslint-plugin-import": "^2.20.1", "husky": "^4.2.3", - "lint-staged": "^10.0.8", - "mocha": "^7.1.0", + "lint-staged": "^10.0.9", + "mocha": "^7.1.1", "ncp": "^2.0.0", "nyc": "^15.0.0", "rimraf": "^3.0.2", "sinon": "^9.0.1", "sinon-chai": "^3.5.0", - "ts-node": "^8.6.2", + "ts-node": "^8.8.1", "typescript": "^3.8.3", "yn": "^4.0.0" }, diff --git a/src/IConnectionOptions.ts b/src/IConnectionOptions.ts index 5aef82d..b3299e3 100644 --- a/src/IConnectionOptions.ts +++ b/src/IConnectionOptions.ts @@ -29,7 +29,7 @@ export function getDefaultConnectionOptions(): IConnectionOptions { databaseType: undefined as any, schemaName: "", ssl: false, - skipTables: [] + skipTables: [], }; return connectionOptions; } diff --git a/src/IGenerationOptions.ts b/src/IGenerationOptions.ts index 684494d..13bb2d8 100644 --- a/src/IGenerationOptions.ts +++ b/src/IGenerationOptions.ts @@ -27,7 +27,7 @@ export default interface IGenerationOptions { export const eolConverter = { LF: "\n", - CRLF: "\r\n" + CRLF: "\r\n", }; export function getDefaultGenerationOptions(): IGenerationOptions { @@ -48,7 +48,7 @@ export function getDefaultGenerationOptions(): IGenerationOptions { strictMode: "none", skipSchema: false, indexFile: false, - exportType: "named" + exportType: "named", }; return generationOptions; } diff --git a/src/ModelCustomization.ts b/src/ModelCustomization.ts index befd219..5973f02 100644 --- a/src/ModelCustomization.ts +++ b/src/ModelCustomization.ts @@ -15,7 +15,7 @@ export default function modelCustomizationPhase( columnName: NamingStrategy.columnName, entityName: NamingStrategy.entityName, relationIdName: NamingStrategy.relationIdName, - relationName: NamingStrategy.relationName + relationName: NamingStrategy.relationName, }; if ( generationOptions.customNamingStrategyPath && @@ -87,19 +87,19 @@ export default function modelCustomizationPhase( function removeIndicesGeneratedByTypeorm(dbModel: Entity[]): Entity[] { // TODO: Support typeorm CustomNamingStrategy const namingStrategy = new DefaultNamingStrategy(); - dbModel.forEach(entity => { + dbModel.forEach((entity) => { entity.indices = entity.indices.filter( - v => + (v) => !( v.name.startsWith(`sqlite_autoindex_`) || (v.primary && v.name === "PRIMARY") ) ); const primaryColumns = entity.columns - .filter(v => v.primary) - .map(v => v.tscName); + .filter((v) => v.primary) + .map((v) => v.tscName); entity.indices = entity.indices.filter( - v => + (v) => !( v.primary && v.name === @@ -110,9 +110,9 @@ function removeIndicesGeneratedByTypeorm(dbModel: Entity[]): Entity[] { ) ); entity.relations - .filter(v => v.joinColumnOptions) - .forEach(rel => { - const columnNames = rel.joinColumnOptions!.map(v => v.name); + .filter((v) => v.joinColumnOptions) + .forEach((rel) => { + const columnNames = rel.joinColumnOptions!.map((v) => v.name); const idxName = namingStrategy.relationConstraintName( entity.tscName, columnNames @@ -122,20 +122,20 @@ function removeIndicesGeneratedByTypeorm(dbModel: Entity[]): Entity[] { columnNames ); entity.indices = entity.indices.filter( - v => v.name !== idxName && v.name !== fkName + (v) => v.name !== idxName && v.name !== fkName ); }); }); return dbModel; } function removeColumnsInRelation(dbModel: Entity[]): Entity[] { - dbModel.forEach(entity => { + dbModel.forEach((entity) => { entity.columns = entity.columns.filter( - col => + (col) => !col.isUsedInRelationAsOwner || col.isUsedInRelationAsReferenced || - entity.indices.some(idx => - idx.columns.some(v => v === col.tscName) + entity.indices.some((idx) => + idx.columns.some((v) => v === col.tscName) ) || col.primary ); @@ -149,8 +149,8 @@ function removeColumnDefaultProperties( if (!defaultValues) { return dbModel; } - dbModel.forEach(entity => { - entity.columns.forEach(column => { + dbModel.forEach((entity) => { + entity.columns.forEach((column) => { const defVal = defaultValues[column.tscType]; if (defVal) { if ( @@ -185,11 +185,11 @@ function removeColumnDefaultProperties( } function findFileImports(dbModel: Entity[]) { - dbModel.forEach(entity => { - entity.relations.forEach(relation => { + dbModel.forEach((entity) => { + entity.relations.forEach((relation) => { if ( relation.relatedTable !== entity.tscName && - !entity.fileImports.some(v => v === relation.relatedTable) + !entity.fileImports.some((v) => v === relation.relatedTable) ) { entity.fileImports.push(relation.relatedTable); } @@ -203,8 +203,8 @@ function addImportsAndGenerationOptions( generationOptions: IGenerationOptions ): Entity[] { dbModel = findFileImports(dbModel); - dbModel.forEach(entity => { - entity.relations.forEach(relation => { + dbModel.forEach((entity) => { + entity.relations.forEach((relation) => { if (generationOptions.lazy) { if (!relation.relationOptions) { relation.relationOptions = {}; @@ -237,11 +237,11 @@ function applyNamingStrategy( return retVal; function changeRelationIdNames(model: Entity[]): Entity[] { - model.forEach(entity => { - entity.relationIds.forEach(relationId => { + model.forEach((entity) => { + entity.relationIds.forEach((relationId) => { const oldName = relationId.fieldName; const relation = entity.relations.find( - v => v.fieldName === relationId.relationField + (v) => v.fieldName === relationId.relationField )!; let newName = namingStrategy.relationIdName( relationId, @@ -253,8 +253,8 @@ function applyNamingStrategy( entity, oldName ); - entity.indices.forEach(index => { - index.columns = index.columns.map(column2 => + entity.indices.forEach((index) => { + index.columns = index.columns.map((column2) => column2 === oldName ? newName : column2 ); }); @@ -266,8 +266,8 @@ function applyNamingStrategy( } function changeRelationNames(model: Entity[]): Entity[] { - model.forEach(entity => { - entity.relations.forEach(relation => { + model.forEach((entity) => { + entity.relations.forEach((relation) => { const oldName = relation.fieldName; let newName = namingStrategy.relationName(relation, entity); newName = TomgUtils.findNameForNewField( @@ -277,15 +277,15 @@ function applyNamingStrategy( ); const relatedEntity = model.find( - v => v.tscName === relation.relatedTable + (v) => v.tscName === relation.relatedTable )!; const relation2 = relatedEntity.relations.find( - v => v.fieldName === relation.relatedField + (v) => v.fieldName === relation.relatedField )!; entity.relationIds - .filter(v => v.relationField === oldName) - .forEach(v => { + .filter((v) => v.relationField === oldName) + .forEach((v) => { v.relationField = newName; }); @@ -293,8 +293,8 @@ function applyNamingStrategy( relation2.relatedField = newName; if (relation.relationOptions) { - entity.indices.forEach(ind => { - ind.columns.map(column2 => + entity.indices.forEach((ind) => { + ind.columns.map((column2) => column2 === oldName ? newName : column2 ); }); @@ -305,8 +305,8 @@ function applyNamingStrategy( } function changeColumnNames(model: Entity[]): Entity[] { - model.forEach(entity => { - entity.columns.forEach(column => { + model.forEach((entity) => { + entity.columns.forEach((column) => { const oldName = column.tscName; let newName = namingStrategy.columnName(column.tscName, column); newName = TomgUtils.findNameForNewField( @@ -314,8 +314,8 @@ function applyNamingStrategy( entity, oldName ); - entity.indices.forEach(index => { - index.columns = index.columns.map(column2 => + entity.indices.forEach((index) => { + index.columns = index.columns.map((column2) => column2 === oldName ? newName : column2 ); }); @@ -326,10 +326,10 @@ function applyNamingStrategy( return model; } function changeEntityNames(entities: Entity[]): Entity[] { - entities.forEach(entity => { + entities.forEach((entity) => { const newName = namingStrategy.entityName(entity.tscName, entity); - entities.forEach(entity2 => { - entity2.relations.forEach(relation => { + entities.forEach((entity2) => { + entity2.relations.forEach((relation) => { if (relation.relatedTable === entity.tscName) { relation.relatedTable = newName; } diff --git a/src/ModelGeneration.ts b/src/ModelGeneration.ts index c72c91b..7709ff5 100644 --- a/src/ModelGeneration.ts +++ b/src/ModelGeneration.ts @@ -9,6 +9,11 @@ import IGenerationOptions, { eolConverter } from "./IGenerationOptions"; import { Entity } from "./models/Entity"; import { Relation } from "./models/Relation"; +const prettierOptions: Prettier.Options = { + parser: "typescript", + endOfLine: "auto", +}; + export default function modelGenerationPhase( connectionOptions: IConnectionOptions, generationOptions: IGenerationOptions, @@ -47,9 +52,9 @@ function generateModels( ); const entityTemplate = fs.readFileSync(entityTemplatePath, "UTF-8"); const entityCompliedTemplate = Handlebars.compile(entityTemplate, { - noEscape: true + noEscape: true, }); - databaseModel.forEach(element => { + databaseModel.forEach((element) => { let casedFileName = ""; switch (generationOptions.convertCaseFile) { case "camel": @@ -82,9 +87,7 @@ function generateModels( ); let formatted = ""; try { - formatted = Prettier.format(withImportStatements, { - parser: "typescript" - }); + formatted = Prettier.format(withImportStatements, prettierOptions); } catch (error) { console.error( "There were some problems with model generation for table: ", @@ -95,7 +98,7 @@ function generateModels( } fs.writeFileSync(resultFilePath, formatted, { encoding: "UTF-8", - flag: "w" + flag: "w", }); }); } @@ -108,12 +111,10 @@ function createIndexFile( const templatePath = path.resolve(__dirname, "templates", "index.mst"); const template = fs.readFileSync(templatePath, "UTF-8"); const compliedTemplate = Handlebars.compile(template, { - noEscape: true + noEscape: true, }); const rendered = compliedTemplate({ entities: databaseModel }); - const formatted = Prettier.format(rendered, { - parser: "typescript" - }); + const formatted = Prettier.format(rendered, prettierOptions); let fileName = "index"; switch (generationOptions.convertCaseFile) { case "camel": @@ -130,7 +131,7 @@ function createIndexFile( const resultFilePath = path.resolve(entitiesPath, `${fileName}.ts`); fs.writeFileSync(resultFilePath, formatted, { encoding: "UTF-8", - flag: "w" + flag: "w", }); } @@ -142,7 +143,7 @@ function removeUnusedImports(rendered: string) { .split(","); const restOfEntityDefinition = rendered.substring(closeBracketIndex); const distinctImports = imports.filter( - v => + (v) => restOfEntityDefinition.indexOf(`@${v}(`) !== -1 || (v === "BaseEntity" && restOfEntityDefinition.indexOf(v) !== -1) ); @@ -152,12 +153,12 @@ function removeUnusedImports(rendered: string) { } function createHandlebarsHelpers(generationOptions: IGenerationOptions): void { - Handlebars.registerHelper("json", context => { + Handlebars.registerHelper("json", (context) => { const json = JSON.stringify(context); const withoutQuotes = json.replace(/"([^(")"]+)":/g, "$1:"); return withoutQuotes.slice(1, withoutQuotes.length - 1); }); - Handlebars.registerHelper("toEntityName", str => { + Handlebars.registerHelper("toEntityName", (str) => { let retStr = ""; switch (generationOptions.convertCaseEntity) { case "camel": @@ -174,7 +175,7 @@ function createHandlebarsHelpers(generationOptions: IGenerationOptions): void { } return retStr; }); - Handlebars.registerHelper("toFileName", str => { + Handlebars.registerHelper("toFileName", (str) => { let retStr = ""; switch (generationOptions.convertCaseFile) { case "camel": @@ -199,7 +200,7 @@ function createHandlebarsHelpers(generationOptions: IGenerationOptions): void { ? `${generationOptions.propertyVisibility} ` : "" ); - Handlebars.registerHelper("toPropertyName", str => { + Handlebars.registerHelper("toPropertyName", (str) => { let retStr = ""; switch (generationOptions.convertCaseProperty) { case "camel": @@ -250,7 +251,7 @@ function createHandlebarsHelpers(generationOptions: IGenerationOptions): void { lt: (v1, v2) => v1 < v2, lte: (v1, v2) => v1 <= v2, ne: (v1, v2) => v1 !== v2, - or: (v1, v2) => v1 || v2 + or: (v1, v2) => v1 || v2, }); } @@ -258,14 +259,14 @@ function createTsConfigFile(outputPath: string): void { const templatePath = path.resolve(__dirname, "templates", "tsconfig.mst"); const template = fs.readFileSync(templatePath, "UTF-8"); const compliedTemplate = Handlebars.compile(template, { - noEscape: true + noEscape: true, }); const rendered = compliedTemplate({}); const formatted = Prettier.format(rendered, { parser: "json" }); const resultFilePath = path.resolve(outputPath, "tsconfig.json"); fs.writeFileSync(resultFilePath, formatted, { encoding: "UTF-8", - flag: "w" + flag: "w", }); } function createTypeOrmConfig( @@ -275,13 +276,13 @@ function createTypeOrmConfig( const templatePath = path.resolve(__dirname, "templates", "ormconfig.mst"); const template = fs.readFileSync(templatePath, "UTF-8"); const compliedTemplate = Handlebars.compile(template, { - noEscape: true + noEscape: true, }); const rendered = compliedTemplate(connectionOptions); const formatted = Prettier.format(rendered, { parser: "json" }); const resultFilePath = path.resolve(outputPath, "ormconfig.json"); fs.writeFileSync(resultFilePath, formatted, { encoding: "UTF-8", - flag: "w" + flag: "w", }); } diff --git a/src/Utils.ts b/src/Utils.ts index d121435..de32d35 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -33,17 +33,17 @@ export function findNameForNewField( let fieldName = _fieldName; const validNameCondition = () => (entity.columns.every( - v => + (v) => changeCase.camelCase(v.tscName) !== changeCase.camelCase(fieldName) ) && entity.relations.every( - v => + (v) => changeCase.camelCase(v.fieldName) !== changeCase.camelCase(fieldName) ) && entity.relationIds.every( - v => + (v) => changeCase.camelCase(v.fieldName) !== changeCase.camelCase(fieldName) )) || diff --git a/src/drivers/AbstractDriver.ts b/src/drivers/AbstractDriver.ts index 07a08f3..7db7feb 100644 --- a/src/drivers/AbstractDriver.ts +++ b/src/drivers/AbstractDriver.ts @@ -1,7 +1,7 @@ import { WithLengthColumnType, WithPrecisionColumnType, - WithWidthColumnType + WithWidthColumnType, } from "typeorm/driver/types/ColumnTypes"; import { JoinColumnOptions, RelationOptions } from "typeorm"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; @@ -27,7 +27,7 @@ export default abstract class AbstractDriver { "smallint", "mediumint", "int", - "bigint" + "bigint", ]; public ColumnTypesWithPrecision: WithPrecisionColumnType[] = [ @@ -48,7 +48,7 @@ export default abstract class AbstractDriver { "timestamp", "timestamp without time zone", "timestamp with time zone", - "timestamp with local time zone" + "timestamp with local time zone", ]; public ColumnTypesWithLength: WithLengthColumnType[] = [ @@ -64,7 +64,7 @@ export default abstract class AbstractDriver { "nvarchar2", "raw", "binary", - "varbinary" + "varbinary", ]; public abstract GetAllTablesQuery: ( @@ -82,42 +82,43 @@ export default abstract class AbstractDriver { public static FindManyToManyRelations(dbModel: Entity[]) { let retVal = dbModel; const manyToManyEntities = retVal.filter( - entity => + (entity) => entity.relations.length === 2 && entity.relations.every( - v => v.joinColumnOptions && v.relationType !== "ManyToMany" + (v) => + v.joinColumnOptions && v.relationType !== "ManyToMany" ) && entity.relations[0].relatedTable !== entity.relations[1].relatedTable && entity.relations[0].joinColumnOptions!.length === entity.relations[1].joinColumnOptions!.length && entity.columns.length === - entity.columns.filter(c => c.primary).length && + entity.columns.filter((c) => c.primary).length && entity.columns - .map(v => v.tscName) + .map((v) => v.tscName) .filter( - v => + (v) => !entity.relations[0] - .joinColumnOptions!.map(x => x.name) - .some(jc => jc === v) && + .joinColumnOptions!.map((x) => x.name) + .some((jc) => jc === v) && !entity.relations[1] - .joinColumnOptions!.map(x => x.name) - .some(jc => jc === v) + .joinColumnOptions!.map((x) => x.name) + .some((jc) => jc === v) ).length === 0 ); - manyToManyEntities.forEach(junctionEntity => { + manyToManyEntities.forEach((junctionEntity) => { const firstEntity = dbModel.find( - v => v.tscName === junctionEntity.relations[0].relatedTable + (v) => v.tscName === junctionEntity.relations[0].relatedTable )!; const secondEntity = dbModel.find( - v => v.tscName === junctionEntity.relations[1].relatedTable + (v) => v.tscName === junctionEntity.relations[1].relatedTable )!; const firstRelation = firstEntity.relations.find( - v => v.relatedTable === junctionEntity.tscName + (v) => v.relatedTable === junctionEntity.tscName )!; const secondRelation = secondEntity.relations.find( - v => v.relatedTable === junctionEntity.tscName + (v) => v.relatedTable === junctionEntity.tscName )!; firstRelation.relationType = "ManyToMany"; @@ -143,7 +144,7 @@ export default abstract class AbstractDriver { return { referencedColumnName: v.referencedColumnName, name: junctionEntity.relations[0] - .joinColumnOptions![i].name + .joinColumnOptions![i].name, }; } ), @@ -152,10 +153,10 @@ export default abstract class AbstractDriver { return { referencedColumnName: v.referencedColumnName, name: junctionEntity.relations[1] - .joinColumnOptions![i].name + .joinColumnOptions![i].name, }; } - ) + ), }; if (junctionEntity.database) { firstRelation.joinTableOptions.database = @@ -169,7 +170,7 @@ export default abstract class AbstractDriver { secondRelation.relationOptions = undefined; firstRelation.joinColumnOptions = undefined; secondRelation.joinColumnOptions = undefined; - retVal = retVal.filter(ent => { + retVal = retVal.filter((ent) => { return ent.tscName !== junctionEntity.tscName; }); }); @@ -225,7 +226,7 @@ export default abstract class AbstractDriver { tableNames ); const ret: Entity[] = [] as Entity[]; - response.forEach(val => { + response.forEach((val) => { ret.push({ columns: [], indices: [], @@ -235,7 +236,7 @@ export default abstract class AbstractDriver { tscName: val.TABLE_NAME, database: dbNames.includes(",") ? val.DB_NAME : "", schema: val.TABLE_SCHEMA, - fileImports: [] + fileImports: [], }); }); return ret; @@ -246,9 +247,9 @@ export default abstract class AbstractDriver { entities: Entity[], generationOptions: IGenerationOptions ) { - relationsTemp.forEach(relationTmp => { + relationsTemp.forEach((relationTmp) => { const ownerEntity = entities.find( - entity => entity.tscName === relationTmp.ownerTable.tscName + (entity) => entity.tscName === relationTmp.ownerTable.tscName ); if (!ownerEntity) { TomgUtils.LogError( @@ -257,7 +258,7 @@ export default abstract class AbstractDriver { return; } const referencedEntity = entities.find( - entity => entity.tscName === relationTmp.relatedTable.tscName + (entity) => entity.tscName === relationTmp.relatedTable.tscName ); if (!referencedEntity) { TomgUtils.LogError( @@ -274,7 +275,7 @@ export default abstract class AbstractDriver { relationColumnIndex++ ) { const ownerColumn = ownerEntity.columns.find( - column => + (column) => column.tscName === relationTmp.ownerColumns[relationColumnIndex] ); @@ -285,7 +286,7 @@ export default abstract class AbstractDriver { return; } const relatedColumn = referencedEntity.columns.find( - column => + (column) => column.tscName === relationTmp.relatedColumns[relationColumnIndex] ); @@ -301,19 +302,19 @@ export default abstract class AbstractDriver { let isOneToMany: boolean; isOneToMany = false; const index = ownerEntity.indices.find( - ind => + (ind) => ind.options.unique && ind.columns.length === ownerColumns.length && - ownerColumns.every(ownerColumn => - ind.columns.some(col => col === ownerColumn.tscName) + ownerColumns.every((ownerColumn) => + ind.columns.some((col) => col === ownerColumn.tscName) ) ); isOneToMany = !index; - ownerColumns.forEach(column => { + ownerColumns.forEach((column) => { column.isUsedInRelationAsOwner = true; }); - relatedColumns.forEach(column => { + relatedColumns.forEach((column) => { column.isUsedInRelationAsReferenced = true; }); let fieldName = ""; @@ -331,7 +332,7 @@ export default abstract class AbstractDriver { const relationOptions: RelationOptions = { onDelete: relationTmp.onDelete, - onUpdate: relationTmp.onUpdate + onUpdate: relationTmp.onUpdate, }; const ownerRelation: Relation = { @@ -343,12 +344,12 @@ export default abstract class AbstractDriver { joinColumnOptions: relationTmp.ownerColumns.map((v, idx) => { const retVal: Required = { name: v, - referencedColumnName: relationTmp.relatedColumns[idx] + referencedColumnName: relationTmp.relatedColumns[idx], }; return retVal; }), relatedTable: relationTmp.relatedTable.tscName, - relationType: isOneToMany ? "ManyToOne" : "OneToOne" + relationType: isOneToMany ? "ManyToOne" : "OneToOne", }; if (JSON.stringify(relationOptions) !== "{}") { ownerRelation.relationOptions = relationOptions; @@ -357,7 +358,7 @@ export default abstract class AbstractDriver { fieldName: ownerRelation.relatedField, relatedField: ownerRelation.fieldName, relatedTable: relationTmp.ownerTable.tscName, - relationType: isOneToMany ? "OneToMany" : "OneToOne" + relationType: isOneToMany ? "OneToMany" : "OneToOne", }; ownerEntity.relations.push(ownerRelation); @@ -383,7 +384,7 @@ export default abstract class AbstractDriver { ownerEntity.relationIds.push({ fieldName: relationIdFieldName, fieldType, - relationField: ownerRelation.fieldName + relationField: ownerRelation.fieldName, }); // TODO: RelationId on ManyToMany } @@ -411,17 +412,17 @@ export default abstract class AbstractDriver { ): Promise; public static FindPrimaryColumnsFromIndexes(dbModel: Entity[]) { - dbModel.forEach(entity => { - const primaryIndex = entity.indices.find(v => v.primary); + dbModel.forEach((entity) => { + const primaryIndex = entity.indices.find((v) => v.primary); entity.columns .filter( - col => + (col) => primaryIndex && primaryIndex.columns.some( - cIndex => cIndex === col.tscName + (cIndex) => cIndex === col.tscName ) ) - .forEach(col => { + .forEach((col) => { // eslint-disable-next-line no-param-reassign col.primary = true; if ( @@ -432,7 +433,7 @@ export default abstract class AbstractDriver { } }); if ( - !entity.columns.some(v => { + !entity.columns.some((v) => { return !!v.primary; }) ) { diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index d091063..215afb6 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -1,4 +1,4 @@ -import type * as MSSQL from "mssql"; +import type * as MSSQL from "mssql"; import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/sqlserver/SqlServerDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; @@ -13,7 +13,7 @@ import { RelationInternal } from "../models/RelationInternal"; export default class MssqlDriver extends AbstractDriver { public defaultValues: DataTypeDefaults = new TypeormDriver.SqlServerDriver({ - options: { replication: undefined } as ConnectionOptions + options: { replication: undefined } as ConnectionOptions, } as any).dataTypeDefaults; public readonly standardPort = 1433; @@ -99,18 +99,18 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG )}) order by ordinal_position`) ).recordset; - entities.forEach(ent => { + entities.forEach((ent) => { response - .filter(filterVal => { + .filter((filterVal) => { return ( filterVal.TABLE_NAME === ent.tscName && filterVal.TABLE_SCHEMA === ent.schema ); }) - .forEach(resp => { + .forEach((resp) => { const tscName = resp.COLUMN_NAME; const options: Column["options"] = { - name: resp.COLUMN_NAME + name: resp.COLUMN_NAME, }; if (resp.IS_NULLABLE === "YES") options.nullable = true; if (resp.IsUnique === 1) options.unique = true; @@ -230,7 +230,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG if ( this.ColumnTypesWithPrecision.some( - v => v === columnType + (v) => v === columnType ) ) { if (resp.NUMERIC_PRECISION !== null) { @@ -241,7 +241,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG } } if ( - this.ColumnTypesWithLength.some(v => v === columnType) + this.ColumnTypesWithLength.some((v) => v === columnType) ) { options.length = resp.CHARACTER_MAXIMUM_LENGTH > 0 @@ -254,7 +254,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG default: defaultValue, options, tscName, - tscType + tscType, }); }); }); @@ -276,8 +276,8 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG is_primary_key: boolean; }[] = []; await Promise.all( - dbNames.split(",").map(async dbName => { - if (dbNames.length>1) { + dbNames.split(",").map(async (dbName) => { + if (dbNames.length > 1) { await this.UseDB(dbName); } const resp: { @@ -314,25 +314,25 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG }) ); - entities.forEach(ent => { + entities.forEach((ent) => { const entityIndices = response.filter( - filterVal => + (filterVal) => filterVal.TableName === ent.tscName && filterVal.TableSchema === ent.schema ); - const indexNames = new Set(entityIndices.map(v => v.IndexName)); - indexNames.forEach(indexName => { + const indexNames = new Set(entityIndices.map((v) => v.IndexName)); + indexNames.forEach((indexName) => { const records = entityIndices.filter( - v => v.IndexName === indexName + (v) => v.IndexName === indexName ); const indexInfo: Index = { columns: [], options: {}, - name: records[0].IndexName + name: records[0].IndexName, }; if (records[0].is_primary_key) indexInfo.primary = true; if (records[0].is_unique) indexInfo.options.unique = true; - records.forEach(record => { + records.forEach((record) => { indexInfo.columns.push(record.ColumnName); }); ent.indices.push(indexInfo); @@ -360,8 +360,8 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG objectId: number; }[] = []; await Promise.all( - dbNames.split(",").map(async dbName => { - if (dbNames.length>1) { + dbNames.split(",").map(async (dbName) => { + if (dbNames.length > 1) { await this.UseDB(dbName); } const resp: { @@ -406,15 +406,15 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG }) ); const relationsTemp: RelationInternal[] = [] as RelationInternal[]; - const relationKeys = new Set(response.map(v => v.objectId)); + const relationKeys = new Set(response.map((v) => v.objectId)); - relationKeys.forEach(relationId => { - const rows = response.filter(v => v.objectId === relationId); + relationKeys.forEach((relationId) => { + const rows = response.filter((v) => v.objectId === relationId); const ownerTable = entities.find( - v => v.sqlName === rows[0].TableWithForeignKey + (v) => v.sqlName === rows[0].TableWithForeignKey ); const relatedTable = entities.find( - v => v.sqlName === rows[0].TableReferenced + (v) => v.sqlName === rows[0].TableReferenced ); if (!ownerTable || !relatedTable) { TomgUtils.LogError( @@ -427,7 +427,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG ownerColumns: [], relatedColumns: [], ownerTable, - relatedTable + relatedTable, }; switch (rows[0].onDelete) { case "NO_ACTION": @@ -449,7 +449,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG internal.onUpdate = rows[0].onUpdate; break; } - rows.forEach(row => { + rows.forEach((row) => { internal.ownerColumns.push(row.ForeignKeyColumn); internal.relatedColumns.push(row.ForeignKeyColumnReferenced); }); @@ -476,17 +476,17 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG database: databaseName, options: { appName: "typeorm-model-generator", - encrypt: connectionOptons.ssl + encrypt: connectionOptons.ssl, }, password: connectionOptons.password, port: connectionOptons.port, requestTimeout: 60 * 60 * 1000, server: connectionOptons.host, - user: connectionOptons.user + user: connectionOptons.user, }; const promise = new Promise((resolve, reject) => { - this.Connection = new this.MSSQL.ConnectionPool(config, err => { + this.Connection = new this.MSSQL.ConnectionPool(config, (err) => { if (!err) { resolve(true); } else { diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 8e7f237..81b5928 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -13,7 +13,7 @@ import IGenerationOptions from "../IGenerationOptions"; export default class MysqlDriver extends AbstractDriver { public defaultValues: DataTypeDefaults = new TypeormDriver.MysqlDriver({ - options: { replication: undefined } as ConnectionOptions + options: { replication: undefined } as ConnectionOptions, } as any).dataTypeDefaults; public readonly EngineName: string = "MySQL"; @@ -56,8 +56,8 @@ export default class MysqlDriver extends AbstractDriver { FROM information_schema.tables WHERE table_type='BASE TABLE' AND table_schema IN (${MysqlDriver.escapeCommaSeparatedList( - dbNames - )}) ${tableCondition}`); + dbNames + )}) ${tableCondition}`); return response; }; @@ -83,17 +83,17 @@ export default class MysqlDriver extends AbstractDriver { DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE, CASE WHEN EXTRA like '%auto_increment%' THEN 1 ELSE 0 END IsIdentity, COLUMN_TYPE, COLUMN_KEY, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA IN (${MysqlDriver.escapeCommaSeparatedList( - dbNames - )}) + dbNames + )}) order by ordinal_position`); - entities.forEach(ent => { + entities.forEach((ent) => { response - .filter(filterVal => filterVal.TABLE_NAME === ent.tscName) - .forEach(resp => { + .filter((filterVal) => filterVal.TABLE_NAME === ent.tscName) + .forEach((resp) => { const tscName = resp.COLUMN_NAME; let tscType = ""; const options: Column["options"] = { - name: resp.COLUMN_NAME + name: resp.COLUMN_NAME, }; const generated = resp.IsIdentity === 1 ? true : undefined; const defaultValue = MysqlDriver.ReturnDefaultValueFunction( @@ -103,7 +103,8 @@ export default class MysqlDriver extends AbstractDriver { let columnType = resp.DATA_TYPE; if (resp.IS_NULLABLE === "YES") options.nullable = true; if (resp.COLUMN_KEY === "UNI") options.unique = true; - if (resp.COLUMN_COMMENT) options.comment = resp.COLUMN_COMMENT; + if (resp.COLUMN_COMMENT) + options.comment = resp.COLUMN_COMMENT; if (resp.COLUMN_TYPE.endsWith(" unsigned")) options.unsigned = true; switch (resp.DATA_TYPE) { @@ -260,7 +261,7 @@ export default class MysqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithPrecision.some( - v => v === columnType + (v) => v === columnType ) ) { if (resp.NUMERIC_PRECISION !== null) { @@ -271,7 +272,7 @@ export default class MysqlDriver extends AbstractDriver { } } if ( - this.ColumnTypesWithLength.some(v => v === columnType) + this.ColumnTypesWithLength.some((v) => v === columnType) ) { options.length = resp.CHARACTER_MAXIMUM_LENGTH > 0 @@ -280,7 +281,7 @@ export default class MysqlDriver extends AbstractDriver { } if ( this.ColumnTypesWithWidth.some( - v => v === columnType && tscType !== "boolean" + (v) => v === columnType && tscType !== "boolean" ) ) { options.width = @@ -295,7 +296,7 @@ export default class MysqlDriver extends AbstractDriver { default: defaultValue, options, tscName, - tscType + tscType, }); }); }); @@ -317,27 +318,27 @@ export default class MysqlDriver extends AbstractDriver { CASE WHEN INDEX_NAME='PRIMARY' THEN 1 ELSE 0 END is_primary_key FROM information_schema.statistics sta WHERE table_schema IN (${MysqlDriver.escapeCommaSeparatedList( - dbNames - )})`); - entities.forEach(ent => { + dbNames + )})`); + entities.forEach((ent) => { const entityIndices = response.filter( - filterVal => filterVal.TableName === ent.tscName + (filterVal) => filterVal.TableName === ent.tscName ); - const indexNames = new Set(entityIndices.map(v => v.IndexName)); - indexNames.forEach(indexName => { + const indexNames = new Set(entityIndices.map((v) => v.IndexName)); + indexNames.forEach((indexName) => { const records = entityIndices.filter( - v => v.IndexName === indexName + (v) => v.IndexName === indexName ); const indexInfo: Index = { name: indexName, columns: [], - options: {} + options: {}, }; if (records[0].is_primary_key === 1) indexInfo.primary = true; if (records[0].is_unique === 1) indexInfo.options.unique = true; - records.forEach(record => { + records.forEach((record) => { indexInfo.columns.push(record.ColumnName); }); ent.indices.push(indexInfo); @@ -381,15 +382,15 @@ export default class MysqlDriver extends AbstractDriver { AND CU.REFERENCED_TABLE_NAME IS NOT NULL; `); const relationsTemp: RelationInternal[] = [] as RelationInternal[]; - const relationKeys = new Set(response.map(v => v.object_id)); + const relationKeys = new Set(response.map((v) => v.object_id)); - relationKeys.forEach(relationId => { - const rows = response.filter(v => v.object_id === relationId); + relationKeys.forEach((relationId) => { + const rows = response.filter((v) => v.object_id === relationId); const ownerTable = entities.find( - v => v.sqlName === rows[0].TableWithForeignKey + (v) => v.sqlName === rows[0].TableWithForeignKey ); const relatedTable = entities.find( - v => v.sqlName === rows[0].TableReferenced + (v) => v.sqlName === rows[0].TableReferenced ); if (!ownerTable || !relatedTable) { @@ -403,7 +404,7 @@ export default class MysqlDriver extends AbstractDriver { ownerColumns: [], relatedColumns: [], ownerTable, - relatedTable + relatedTable, }; if (rows[0].onDelete !== "NO_ACTION") { internal.onDelete = rows[0].onDelete; @@ -411,7 +412,7 @@ export default class MysqlDriver extends AbstractDriver { if (rows[0].onUpdate !== "NO_ACTION") { internal.onUpdate = rows[0].onUpdate; } - rows.forEach(row => { + rows.forEach((row) => { internal.ownerColumns.push(row.ForeignKeyColumn); internal.relatedColumns.push(row.ForeignKeyColumnReferenced); }); @@ -428,7 +429,7 @@ export default class MysqlDriver extends AbstractDriver { public async DisconnectFromServer() { const promise = new Promise((resolve, reject) => { - this.Connection.end(err => { + this.Connection.end((err) => { if (!err) { resolve(true); } else { @@ -456,10 +457,10 @@ export default class MysqlDriver extends AbstractDriver { password: connectionOptons.password, port: connectionOptons.port, ssl: { - rejectUnauthorized: false + rejectUnauthorized: false, }, timeout: 60 * 60 * 1000, - user: connectionOptons.user + user: connectionOptons.user, }; } else { config = { @@ -468,14 +469,14 @@ export default class MysqlDriver extends AbstractDriver { password: connectionOptons.password, port: connectionOptons.port, timeout: 60 * 60 * 1000, - user: connectionOptons.user + user: connectionOptons.user, }; } const promise = new Promise((resolve, reject) => { this.Connection = this.MYSQL.createConnection(config); - this.Connection.connect(err => { + this.Connection.connect((err) => { if (!err) { resolve(true); } else { @@ -514,10 +515,10 @@ export default class MysqlDriver extends AbstractDriver { const query = this.Connection.query(sql); const stream = query.stream({}); const promise = new Promise((resolve, reject) => { - stream.on("data", chunk => { + stream.on("data", (chunk) => { ret.push((chunk as unknown) as T); }); - stream.on("error", err => reject(err)); + stream.on("error", (err) => reject(err)); stream.on("end", () => resolve(true)); }); await promise; diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 7d27726..3914b06 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -1,5 +1,5 @@ // eslint-disable-next-line import/no-extraneous-dependencies, import/no-unresolved -import type * as Oracle from "oracledb" +import type * as Oracle from "oracledb"; import * as TypeormDriver from "typeorm/driver/oracle/OracleDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; import * as TomgUtils from "../Utils"; @@ -13,7 +13,7 @@ import { RelationInternal } from "../models/RelationInternal"; export default class OracleDriver extends AbstractDriver { public defaultValues: DataTypeDefaults = new TypeormDriver.OracleDriver({ - options: undefined + options: undefined, } as any).dataTypeDefaults; public readonly standardPort = 1521; @@ -47,11 +47,12 @@ export default class OracleDriver extends AbstractDriver { tableNames.length > 0 ? ` AND NOT TABLE_NAME IN ('${tableNames.join("','")}')` : ""; - const response= ( + const response = ( await this.Connection.execute<{ TABLE_SCHEMA: string; - TABLE_NAME: string; - DB_NAME: string;}>( + TABLE_NAME: string; + DB_NAME: string; + }>( `SELECT NULL AS TABLE_SCHEMA, TABLE_NAME, NULL AS DB_NAME FROM all_tables WHERE owner = (select user from dual) ${tableCondition}` ) ).rows!; @@ -60,31 +61,30 @@ export default class OracleDriver extends AbstractDriver { public async GetCoulmnsFromEntity(entities: Entity[]): Promise { const response = ( - await this.Connection - .execute<{ - TABLE_NAME: string; - COLUMN_NAME: string; - DATA_DEFAULT: string; - NULLABLE: string; - DATA_TYPE: string; - DATA_LENGTH: number; - DATA_PRECISION: number; - DATA_SCALE: number; - IDENTITY_COLUMN: string; // doesn't exist in old oracle versions (#195) - IS_UNIQUE: number; - }>(`SELECT utc.*, (select count(*) from USER_CONS_COLUMNS ucc + await this.Connection.execute<{ + TABLE_NAME: string; + COLUMN_NAME: string; + DATA_DEFAULT: string; + NULLABLE: string; + DATA_TYPE: string; + DATA_LENGTH: number; + DATA_PRECISION: number; + DATA_SCALE: number; + IDENTITY_COLUMN: string; // doesn't exist in old oracle versions (#195) + IS_UNIQUE: number; + }>(`SELECT utc.*, (select count(*) from USER_CONS_COLUMNS ucc JOIN USER_CONSTRAINTS uc ON uc.CONSTRAINT_NAME = ucc.CONSTRAINT_NAME and uc.CONSTRAINT_TYPE='U' where ucc.column_name = utc.COLUMN_NAME AND ucc.table_name = utc.TABLE_NAME) IS_UNIQUE FROM USER_TAB_COLUMNS utc`) ).rows!; - entities.forEach(ent => { + entities.forEach((ent) => { response - .filter(filterVal => filterVal.TABLE_NAME === ent.tscName) - .forEach(resp => { + .filter((filterVal) => filterVal.TABLE_NAME === ent.tscName) + .forEach((resp) => { const tscName = resp.COLUMN_NAME; const options: Column["options"] = { - name: resp.COLUMN_NAME + name: resp.COLUMN_NAME, }; if (resp.NULLABLE === "Y") options.nullable = true; if (resp.IS_UNIQUE > 0) options.unique = true; @@ -196,7 +196,7 @@ export default class OracleDriver extends AbstractDriver { } if ( this.ColumnTypesWithPrecision.some( - v => v === columnType + (v) => v === columnType ) ) { if (resp.DATA_PRECISION !== null) { @@ -207,7 +207,7 @@ export default class OracleDriver extends AbstractDriver { } } if ( - this.ColumnTypesWithLength.some(v => v === columnType) + this.ColumnTypesWithLength.some((v) => v === columnType) ) { options.length = resp.DATA_LENGTH > 0 ? resp.DATA_LENGTH : undefined; @@ -219,7 +219,7 @@ export default class OracleDriver extends AbstractDriver { default: defaultValue, options, tscName, - tscType + tscType, }); }); }); @@ -228,38 +228,37 @@ export default class OracleDriver extends AbstractDriver { public async GetIndexesFromEntity(entities: Entity[]): Promise { const response = ( - await this.Connection - .execute<{ - COLUMN_NAME: string; - TABLE_NAME: string; - INDEX_NAME: string; - UNIQUENESS: string; - ISPRIMARYKEY: number; - }>(`SELECT ind.TABLE_NAME, ind.INDEX_NAME, col.COLUMN_NAME,ind.UNIQUENESS, CASE WHEN uc.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END ISPRIMARYKEY + await this.Connection.execute<{ + COLUMN_NAME: string; + TABLE_NAME: string; + INDEX_NAME: string; + UNIQUENESS: string; + ISPRIMARYKEY: number; + }>(`SELECT ind.TABLE_NAME, ind.INDEX_NAME, col.COLUMN_NAME,ind.UNIQUENESS, CASE WHEN uc.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END ISPRIMARYKEY FROM USER_INDEXES ind JOIN USER_IND_COLUMNS col ON ind.INDEX_NAME=col.INDEX_NAME 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 => { + entities.forEach((ent) => { const entityIndices = response.filter( - filterVal => filterVal.TABLE_NAME === ent.tscName + (filterVal) => filterVal.TABLE_NAME === ent.tscName ); - const indexNames = new Set(entityIndices.map(v => v.INDEX_NAME)); - indexNames.forEach(indexName => { + const indexNames = new Set(entityIndices.map((v) => v.INDEX_NAME)); + indexNames.forEach((indexName) => { const records = entityIndices.filter( - v => v.INDEX_NAME === indexName + (v) => v.INDEX_NAME === indexName ); const indexInfo: Index = { columns: [], options: {}, - name: records[0].INDEX_NAME + name: records[0].INDEX_NAME, }; if (records[0].ISPRIMARYKEY === 1) indexInfo.primary = true; if (records[0].UNIQUENESS === "UNIQUE") indexInfo.options.unique = true; - records.forEach(record => { + records.forEach((record) => { indexInfo.columns.push(record.COLUMN_NAME); }); ent.indices.push(indexInfo); @@ -276,16 +275,15 @@ export default class OracleDriver extends AbstractDriver { generationOptions: IGenerationOptions ): Promise { const response = ( - await this.Connection - .execute<{ - OWNER_TABLE_NAME: string; - OWNER_POSITION: string; - OWNER_COLUMN_NAME: string; - CHILD_TABLE_NAME: string; - CHILD_COLUMN_NAME: string; - DELETE_RULE: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; - CONSTRAINT_NAME: string; - }>(`select owner.TABLE_NAME OWNER_TABLE_NAME,ownCol.POSITION OWNER_POSITION,ownCol.COLUMN_NAME OWNER_COLUMN_NAME, + await this.Connection.execute<{ + OWNER_TABLE_NAME: string; + OWNER_POSITION: string; + OWNER_COLUMN_NAME: string; + CHILD_TABLE_NAME: string; + CHILD_COLUMN_NAME: string; + DELETE_RULE: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION"; + CONSTRAINT_NAME: string; + }>(`select owner.TABLE_NAME OWNER_TABLE_NAME,ownCol.POSITION OWNER_POSITION,ownCol.COLUMN_NAME OWNER_COLUMN_NAME, child.TABLE_NAME CHILD_TABLE_NAME ,childCol.COLUMN_NAME CHILD_COLUMN_NAME, owner.DELETE_RULE, owner.CONSTRAINT_NAME @@ -297,15 +295,17 @@ export default class OracleDriver extends AbstractDriver { ).rows!; const relationsTemp: RelationInternal[] = [] as RelationInternal[]; - const relationKeys = new Set(response.map(v => v.CONSTRAINT_NAME)); + const relationKeys = new Set(response.map((v) => v.CONSTRAINT_NAME)); - relationKeys.forEach(relationId => { - const rows = response.filter(v => v.CONSTRAINT_NAME === relationId); + relationKeys.forEach((relationId) => { + const rows = response.filter( + (v) => v.CONSTRAINT_NAME === relationId + ); const ownerTable = entities.find( - v => v.sqlName === rows[0].OWNER_TABLE_NAME + (v) => v.sqlName === rows[0].OWNER_TABLE_NAME ); const relatedTable = entities.find( - v => v.sqlName === rows[0].CHILD_TABLE_NAME + (v) => v.sqlName === rows[0].CHILD_TABLE_NAME ); if (!ownerTable || !relatedTable) { @@ -319,12 +319,12 @@ export default class OracleDriver extends AbstractDriver { ownerColumns: [], relatedColumns: [], ownerTable, - relatedTable + relatedTable, }; if (rows[0].DELETE_RULE !== "NO ACTION") { internal.onDelete = rows[0].DELETE_RULE; } - rows.forEach(row => { + rows.forEach((row) => { internal.ownerColumns.push(row.OWNER_COLUMN_NAME); internal.relatedColumns.push(row.CHILD_COLUMN_NAME); }); @@ -348,19 +348,19 @@ export default class OracleDriver extends AbstractDriver { public async ConnectToServer(connectionOptions: IConnectionOptions) { let config: Oracle.ConnectionAttributes; if (connectionOptions.user === String(process.env.ORACLE_UsernameSys)) { - config = { + config = { connectString: `${connectionOptions.host}:${connectionOptions.port}/${connectionOptions.databaseName}`, externalAuth: connectionOptions.ssl, password: connectionOptions.password, privilege: this.Oracle.SYSDBA, - user: connectionOptions.user + user: connectionOptions.user, }; } else { - config = { + config = { connectString: `${connectionOptions.host}:${connectionOptions.port}/${connectionOptions.databaseName}`, externalAuth: connectionOptions.ssl, password: connectionOptions.password, - user: connectionOptions.user + user: connectionOptions.user, }; } const promise = new Promise((resolve, reject) => { @@ -401,7 +401,7 @@ export default class OracleDriver extends AbstractDriver { } public async CheckIfDBExists(dbName: string): Promise { - const {rows} = await this.Connection.execute( + const { rows } = await this.Connection.execute( `select count(*) as CNT from dba_users where username='${dbName.toUpperCase()}'` ); return rows![0][0] > 0 || rows![0].CNT; diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 5f04ced..6655abb 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -1,4 +1,4 @@ -import type * as PG from "pg"; +import type * as PG from "pg"; import { ConnectionOptions } from "typeorm"; import * as TypeormDriver from "typeorm/driver/postgres/PostgresDriver"; import { DataTypeDefaults } from "typeorm/driver/types/DataTypeDefaults"; @@ -13,7 +13,7 @@ import { RelationInternal } from "../models/RelationInternal"; export default class PostgresDriver extends AbstractDriver { public defaultValues: DataTypeDefaults = new TypeormDriver.PostgresDriver({ - options: { replication: undefined } as ConnectionOptions + options: { replication: undefined } as ConnectionOptions, } as any).dataTypeDefaults; public readonly standardPort = 5432; @@ -37,7 +37,6 @@ export default class PostgresDriver extends AbstractDriver { } } - public GetAllTablesQuery = async ( schema: string, dbNames: string, @@ -101,13 +100,13 @@ export default class PostgresDriver extends AbstractDriver { where table_schema in (${schema}) order by ordinal_position`) ).rows; - entities.forEach(ent => { + entities.forEach((ent) => { response - .filter(filterVal => filterVal.table_name === ent.tscName) - .forEach(resp => { + .filter((filterVal) => filterVal.table_name === ent.tscName) + .forEach((resp) => { const tscName = resp.column_name; const options: Column["options"] = { - name: resp.column_name + name: resp.column_name, }; if (resp.is_nullable === "YES") options.nullable = true; if (resp.isunique === "1") options.unique = true; @@ -117,8 +116,8 @@ export default class PostgresDriver extends AbstractDriver { const defaultValue = generated ? undefined : PostgresDriver.ReturnDefaultValueFunction( - resp.column_default - ); + resp.column_default + ); const columnTypes = this.MatchColumnTypes( resp.data_type, @@ -149,13 +148,13 @@ export default class PostgresDriver extends AbstractDriver { if (options.array) { tscType = tscType .split("|") - .map(x => `${x.replace("|", "").trim()}[]`) + .map((x) => `${x.replace("|", "").trim()}[]`) .join(" | "); } if ( this.ColumnTypesWithPrecision.some( - v => v === columnType + (v) => v === columnType ) ) { if (resp.numeric_precision !== null) { @@ -166,14 +165,16 @@ export default class PostgresDriver extends AbstractDriver { } } if ( - this.ColumnTypesWithLength.some(v => v === columnType) + this.ColumnTypesWithLength.some((v) => v === columnType) ) { options.length = resp.character_maximum_length > 0 ? resp.character_maximum_length : undefined; } - if (this.ColumnTypesWithWidth.some(v => v === columnType)) { + if ( + this.ColumnTypesWithWidth.some((v) => v === columnType) + ) { options.width = resp.character_maximum_length > 0 ? resp.character_maximum_length @@ -186,7 +187,7 @@ export default class PostgresDriver extends AbstractDriver { default: defaultValue, options, tscName, - tscType + tscType, }); }); }); @@ -207,7 +208,7 @@ export default class PostgresDriver extends AbstractDriver { tsType: "", sqlType: dataType, isArray: false, - enumValues: [] + enumValues: [], }; switch (dataType) { case "int2": @@ -462,23 +463,23 @@ export default class PostgresDriver extends AbstractDriver { AND i.oid<>0 ORDER BY c.relname,f.attname;`) ).rows; - entities.forEach(ent => { + entities.forEach((ent) => { const entityIndices = response.filter( - filterVal => filterVal.tablename === ent.tscName + (filterVal) => filterVal.tablename === ent.tscName ); - const indexNames = new Set(entityIndices.map(v => v.indexname)); - indexNames.forEach(indexName => { + const indexNames = new Set(entityIndices.map((v) => v.indexname)); + indexNames.forEach((indexName) => { const records = entityIndices.filter( - v => v.indexname === indexName + (v) => v.indexname === indexName ); const indexInfo: Index = { columns: [], options: {}, - name: records[0].indexname + name: records[0].indexname, }; if (records[0].is_primary_key === 1) indexInfo.primary = true; if (records[0].is_unique === 1) indexInfo.options.unique = true; - records.forEach(record => { + records.forEach((record) => { indexInfo.columns.push(record.columnname); }); ent.indices.push(indexInfo); @@ -548,15 +549,15 @@ export default class PostgresDriver extends AbstractDriver { ).rows; const relationsTemp: RelationInternal[] = [] as RelationInternal[]; - const relationKeys = new Set(response.map(v => v.object_id)); + const relationKeys = new Set(response.map((v) => v.object_id)); - relationKeys.forEach(relationId => { - const rows = response.filter(v => v.object_id === relationId); + relationKeys.forEach((relationId) => { + const rows = response.filter((v) => v.object_id === relationId); const ownerTable = entities.find( - v => v.sqlName === rows[0].tablewithforeignkey + (v) => v.sqlName === rows[0].tablewithforeignkey ); const relatedTable = entities.find( - v => v.sqlName === rows[0].tablereferenced + (v) => v.sqlName === rows[0].tablereferenced ); if (!ownerTable || !relatedTable) { TomgUtils.LogError( @@ -569,7 +570,7 @@ export default class PostgresDriver extends AbstractDriver { ownerColumns: [], relatedColumns: [], ownerTable, - relatedTable + relatedTable, }; if (rows[0].ondelete !== "NO ACTION") { internal.onDelete = rows[0].ondelete; @@ -577,7 +578,7 @@ export default class PostgresDriver extends AbstractDriver { if (rows[0].onupdate !== "NO ACTION") { internal.onUpdate = rows[0].onupdate; } - rows.forEach(row => { + rows.forEach((row) => { internal.ownerColumns.push(row.foreignkeycolumn); internal.relatedColumns.push(row.foreignkeycolumnreferenced); }); @@ -595,7 +596,7 @@ export default class PostgresDriver extends AbstractDriver { public async DisconnectFromServer() { if (this.Connection) { const promise = new Promise((resolve, reject) => { - this.Connection.end(err => { + this.Connection.end((err) => { if (!err) { resolve(true); } else { @@ -621,11 +622,11 @@ export default class PostgresDriver extends AbstractDriver { ssl: connectionOptons.ssl, // eslint-disable-next-line @typescript-eslint/camelcase statement_timeout: 60 * 60 * 1000, - user: connectionOptons.user + user: connectionOptons.user, }); const promise = new Promise((resolve, reject) => { - this.Connection.connect(err => { + this.Connection.connect((err) => { if (!err) { resolve(true); } else { diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index e429a0f..ecadaa3 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -13,7 +13,7 @@ import { RelationInternal } from "../models/RelationInternal"; export default class SqliteDriver extends AbstractDriver { public defaultValues: DataTypeDefaults = new TypeormDriver.SqliteDriver({ - options: { database: "true" } as ConnectionOptions + options: { database: "true" } as ConnectionOptions, } as any).dataTypeDefaults; public readonly standardPort = 0; @@ -22,9 +22,9 @@ export default class SqliteDriver extends AbstractDriver { public readonly standardSchema = ""; - private sqliteLib:typeof sqliteLib; + private sqliteLib: typeof sqliteLib; - private sqlite:sqliteLib.sqlite3; + private sqlite: sqliteLib.sqlite3; private db: sqliteLib.Database; @@ -37,7 +37,7 @@ export default class SqliteDriver extends AbstractDriver { try { // eslint-disable-next-line import/no-extraneous-dependencies, global-require, import/no-unresolved this.sqliteLib = require("sqlite3"); - this.sqlite= this.sqliteLib.verbose() + this.sqlite = this.sqliteLib.verbose(); } catch (error) { TomgUtils.LogError("", false, error); throw error; @@ -57,7 +57,7 @@ export default class SqliteDriver extends AbstractDriver { const rows = await this.ExecQuery<{ tbl_name: string; sql: string }>( `SELECT tbl_name, sql FROM "sqlite_master" WHERE "type" = 'table' AND name NOT LIKE 'sqlite_%' ${tableCondition}` ); - rows.forEach(val => { + rows.forEach((val) => { if (val.sql.includes("AUTOINCREMENT")) { this.tablesWithGeneratedPrimaryKey.push(val.tbl_name); } @@ -68,7 +68,7 @@ export default class SqliteDriver extends AbstractDriver { relationIds: [], sqlName: val.tbl_name, tscName: val.tbl_name, - fileImports: [] + fileImports: [], }); }); return ret; @@ -76,7 +76,7 @@ export default class SqliteDriver extends AbstractDriver { public async GetCoulmnsFromEntity(entities: Entity[]): Promise { await Promise.all( - entities.map(async ent => { + entities.map(async (ent) => { const response = await this.ExecQuery<{ cid: number; name: string; @@ -85,7 +85,7 @@ export default class SqliteDriver extends AbstractDriver { dflt_value: string; pk: number; }>(`PRAGMA table_info('${ent.tscName}');`); - response.forEach(resp => { + response.forEach((resp) => { const tscName = resp.name; let tscType = ""; const options: Column["options"] = { name: resp.name }; @@ -195,7 +195,7 @@ export default class SqliteDriver extends AbstractDriver { const sqlOptions = resp.type.match(/\([0-9 ,]+\)/g); if ( this.ColumnTypesWithPrecision.some( - v => v === columnType + (v) => v === columnType ) && sqlOptions ) { @@ -214,7 +214,7 @@ export default class SqliteDriver extends AbstractDriver { } if ( this.ColumnTypesWithLength.some( - v => v === columnType + (v) => v === columnType ) && sqlOptions ) { @@ -228,7 +228,7 @@ export default class SqliteDriver extends AbstractDriver { } if ( this.ColumnTypesWithWidth.some( - v => v === columnType && tscType !== "boolean" + (v) => v === columnType && tscType !== "boolean" ) && sqlOptions ) { @@ -248,7 +248,7 @@ export default class SqliteDriver extends AbstractDriver { default: defaultValue, options, tscName, - tscType + tscType, }); }); }) @@ -259,7 +259,7 @@ export default class SqliteDriver extends AbstractDriver { public async GetIndexesFromEntity(entities: Entity[]): Promise { await Promise.all( - entities.map(async ent => { + entities.map(async (ent) => { const response = await this.ExecQuery<{ seq: number; name: string; @@ -268,7 +268,7 @@ export default class SqliteDriver extends AbstractDriver { partial: number; }>(`PRAGMA index_list('${ent.tscName}');`); await Promise.all( - response.map(async resp => { + response.map(async (resp) => { const indexColumnsResponse = await this.ExecQuery<{ seqno: number; cid: number; @@ -278,11 +278,11 @@ export default class SqliteDriver extends AbstractDriver { const indexInfo: Index = { name: resp.name, columns: [], - options: {} + options: {}, }; if (resp.unique === 1) indexInfo.options.unique = true; - indexColumnsResponse.forEach(record => { + indexColumnsResponse.forEach((record) => { indexInfo.columns.push(record.name); }); if ( @@ -290,8 +290,10 @@ export default class SqliteDriver extends AbstractDriver { indexInfo.options.unique ) { ent.columns - .filter(v => v.tscName === indexInfo.columns[0]) - .forEach(v => { + .filter( + (v) => v.tscName === indexInfo.columns[0] + ) + .forEach((v) => { // eslint-disable-next-line no-param-reassign v.options.unique = true; }); @@ -313,7 +315,7 @@ export default class SqliteDriver extends AbstractDriver { ): Promise { let retVal = entities; await Promise.all( - retVal.map(async entity => { + retVal.map(async (entity) => { const response = await this.ExecQuery<{ id: number; seq: number; @@ -334,15 +336,15 @@ export default class SqliteDriver extends AbstractDriver { }>(`PRAGMA foreign_key_list('${entity.tscName}');`); const relationsTemp: RelationInternal[] = [] as RelationInternal[]; - const relationKeys = new Set(response.map(v => v.id)); + const relationKeys = new Set(response.map((v) => v.id)); - relationKeys.forEach(relationId => { - const rows = response.filter(v => v.id === relationId); + relationKeys.forEach((relationId) => { + const rows = response.filter((v) => v.id === relationId); const ownerTable = entities.find( - v => v.sqlName === entity.tscName + (v) => v.sqlName === entity.tscName ); const relatedTable = entities.find( - v => v.sqlName === rows[0].table + (v) => v.sqlName === rows[0].table ); if (!ownerTable || !relatedTable) { TomgUtils.LogError( @@ -355,7 +357,7 @@ export default class SqliteDriver extends AbstractDriver { ownerColumns: [], relatedColumns: [], ownerTable, - relatedTable + relatedTable, }; if (rows[0].on_delete !== "NO ACTION") { internal.onDelete = rows[0].on_delete; @@ -363,7 +365,7 @@ export default class SqliteDriver extends AbstractDriver { if (rows[0].on_update !== "NO ACTION") { internal.onUpdate = rows[0].on_update; } - rows.forEach(row => { + rows.forEach((row) => { internal.ownerColumns.push(row.from); internal.relatedColumns.push(row.to); }); @@ -395,7 +397,7 @@ export default class SqliteDriver extends AbstractDriver { public async UseDB(dbName: string) { const promise = new Promise((resolve, reject) => { - this.db = new this.sqlite.Database(dbName, err => { + this.db = new this.sqlite.Database(dbName, (err) => { if (err) { TomgUtils.LogError( "Error connecting to SQLite database.", diff --git a/src/index.ts b/src/index.ts index e42802f..573b635 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,12 +1,11 @@ -// TODO: Enable prettier once import type syntax is supported import * as Yargs from "yargs"; import { createDriver, createModelFromDatabase } from "./Engine"; import * as TomgUtils from "./Utils"; import IConnectionOptions, { - getDefaultConnectionOptions + getDefaultConnectionOptions, } from "./IConnectionOptions"; import IGenerationOptions, { - getDefaultGenerationOptions + getDefaultGenerationOptions, } from "./IGenerationOptions"; import fs = require("fs-extra"); @@ -63,7 +62,7 @@ function makeDefaultConfigs() { const connectionOptions = getDefaultConnectionOptions(); return { generationOptions, - connectionOptions + connectionOptions, }; } function readTOMLConfig( @@ -83,7 +82,7 @@ function readTOMLConfig( let hasUnknownProperties = false; if (loadedConnectionOptions) { - Object.keys(loadedConnectionOptions).forEach(key => { + Object.keys(loadedConnectionOptions).forEach((key) => { if ( Object.prototype.hasOwnProperty.call( options.connectionOptions, @@ -98,7 +97,7 @@ function readTOMLConfig( }); } if (loadedGenerationOptions) { - Object.keys(loadedGenerationOptions).forEach(key => { + Object.keys(loadedGenerationOptions).forEach((key) => { if ( Object.prototype.hasOwnProperty.call( options.generationOptions, @@ -124,7 +123,7 @@ function readTOMLConfig( return { options, - fullConfigFile + fullConfigFile, }; } function checkYargsParameters(options: options): options { @@ -135,7 +134,7 @@ function checkYargsParameters(options: options): options { alias: "host", string: true, default: options.connectionOptions.host, - describe: "IP address/Hostname for database server" + describe: "IP address/Hostname for database server", }, d: { alias: "database", @@ -143,25 +142,25 @@ function checkYargsParameters(options: options): options { demand: true, default: options.connectionOptions.databaseName, describe: - "Database name(or path for sqlite). You can pass multiple values separated by comma." + "Database name(or path for sqlite). You can pass multiple values separated by comma.", }, u: { alias: "user", string: true, default: options.connectionOptions.user, - describe: "Username for database server" + describe: "Username for database server", }, x: { alias: "pass", string: true, default: options.connectionOptions.password, - describe: "Password for database server" + describe: "Password for database server", }, p: { number: true, alias: "port", default: options.connectionOptions.port, - describe: "Port number for database server" + describe: "Port number for database server", }, e: { alias: "engine", @@ -171,121 +170,121 @@ function checkYargsParameters(options: options): options { "mysql", "mariadb", "oracle", - "sqlite" + "sqlite", ], demand: true, default: options.connectionOptions.databaseType, - describe: "Database engine" + describe: "Database engine", }, o: { alias: "output", default: options.generationOptions.resultsPath, - describe: "Where to place generated models" + describe: "Where to place generated models", }, s: { alias: "schema", string: true, default: options.connectionOptions.schemaName, describe: - "Schema name to create model from. Only for mssql and postgres. You can pass multiple values separated by comma eg. -s scheme1,scheme2,scheme3" + "Schema name to create model from. Only for mssql and postgres. You can pass multiple values separated by comma eg. -s scheme1,scheme2,scheme3", }, ssl: { boolean: true, - default: options.connectionOptions.ssl + default: options.connectionOptions.ssl, }, noConfig: { boolean: true, default: options.generationOptions.noConfigs, - describe: `Doesn't create tsconfig.json and ormconfig.json` + describe: `Doesn't create tsconfig.json and ormconfig.json`, }, cf: { alias: "case-file", choices: ["pascal", "param", "camel", "none"], default: options.generationOptions.convertCaseFile, - describe: "Convert file names to specified case" + describe: "Convert file names to specified case", }, ce: { alias: "case-entity", choices: ["pascal", "camel", "none"], default: options.generationOptions.convertCaseEntity, - describe: "Convert class names to specified case" + describe: "Convert class names to specified case", }, cp: { alias: "case-property", choices: ["pascal", "camel", "none"], default: options.generationOptions.convertCaseProperty, - describe: "Convert property names to specified case" + describe: "Convert property names to specified case", }, eol: { choices: ["LF", "CRLF"], default: options.generationOptions.convertEol, - describe: "Force EOL to be LF or CRLF" + describe: "Force EOL to be LF or CRLF", }, pv: { alias: "property-visibility", choices: ["public", "protected", "private", "none"], default: options.generationOptions.propertyVisibility, describe: - "Defines which visibility should have the generated property" + "Defines which visibility should have the generated property", }, lazy: { boolean: true, default: options.generationOptions.lazy, - describe: "Generate lazy relations" + describe: "Generate lazy relations", }, a: { alias: "active-record", boolean: true, default: options.generationOptions.activeRecord, - describe: "Use ActiveRecord syntax for generated models" + describe: "Use ActiveRecord syntax for generated models", }, namingStrategy: { describe: "Use custom naming strategy", default: options.generationOptions.customNamingStrategyPath, - string: true + string: true, }, relationIds: { boolean: true, default: options.generationOptions.relationIds, - describe: "Generate RelationId fields" + describe: "Generate RelationId fields", }, skipSchema: { boolean: true, default: options.generationOptions.skipSchema, - describe: "Omits schema identifier in generated entities" + describe: "Omits schema identifier in generated entities", }, generateConstructor: { boolean: true, default: options.generationOptions.generateConstructor, - describe: "Generate constructor allowing partial initialization" + describe: "Generate constructor allowing partial initialization", }, disablePluralization: { boolean: true, default: !options.generationOptions.pluralizeNames, describe: - "Disable pluralization of OneToMany, ManyToMany relation names" + "Disable pluralization of OneToMany, ManyToMany relation names", }, skipTables: { string: true, default: options.connectionOptions.skipTables.join(","), describe: - "Skip schema generation for specific tables. You can pass multiple values separated by comma" + "Skip schema generation for specific tables. You can pass multiple values separated by comma", }, strictMode: { choices: ["none", "?", "!"], default: options.generationOptions.strictMode, - describe: "Mark fields as optional(?) or non-null(!)" + describe: "Mark fields as optional(?) or non-null(!)", }, index: { boolean: true, default: options.generationOptions.indexFile, - describe: "Generate index file" + describe: "Generate index file", }, defaultExport: { boolean: true, default: options.generationOptions.exportType === "default", - describe: "Generate index file" - } + describe: "Generate index file", + }, }); options.connectionOptions.databaseName = argv.d; @@ -341,13 +340,13 @@ async function useInquirer(options: options): Promise { "mysql", "mariadb", "oracle", - "sqlite" + "sqlite", ], default: options.connectionOptions.databaseType, message: "Choose database engine", name: "engine", - type: "list" - } + type: "list", + }, ]) ).engine; const driver = createDriver(options.connectionOptions.databaseType); @@ -362,7 +361,7 @@ async function useInquirer(options: options): Promise { default: options.connectionOptions.host, message: "Database address:", name: "host", - type: "input" + type: "input", }, { message: "Database port:", @@ -372,32 +371,32 @@ async function useInquirer(options: options): Promise { validate(value) { const valid = !Number.isNaN(parseInt(value, 10)); return valid || "Please enter a valid port number"; - } + }, }, { default: options.connectionOptions.ssl, message: "Use SSL:", name: "ssl", - type: "confirm" + type: "confirm", }, { message: "Database user name:", name: "login", type: "input", - default: options.connectionOptions.user + default: options.connectionOptions.user, }, { message: "Database user password:", name: "password", - type: "password" + type: "password", }, { default: options.connectionOptions.databaseName, message: "Database name: (You can pass multiple values separated by comma)", name: "dbName", - type: "input" - } + type: "input", + }, ]); if ( options.connectionOptions.databaseType === "mssql" || @@ -410,8 +409,8 @@ async function useInquirer(options: options): Promise { message: "Database schema: (You can pass multiple values separated by comma)", name: "schema", - type: "input" - } + type: "input", + }, ]) ).schema; } @@ -428,8 +427,8 @@ async function useInquirer(options: options): Promise { default: options.connectionOptions.databaseName, message: "Path to database file:", name: "dbName", - type: "input" - } + type: "input", + }, ]) ).dbName; } @@ -444,8 +443,8 @@ async function useInquirer(options: options): Promise { message: "Generate schema for tables:", choices: ["All of them", "Ignore specific tables"], name: "specyficTables", - type: "list" - } + type: "list", + }, ]) ).specyficTables; if (ignoreSpecyficTables === "Ignore specific tables") { @@ -453,7 +452,7 @@ async function useInquirer(options: options): Promise { default: options.connectionOptions.skipTables.join(","), message: "Table names(separated by comma)", name: "tableNames", - type: "input" + type: "input", }); options.connectionOptions.skipTables = tableNames.split(","); } else { @@ -466,8 +465,8 @@ async function useInquirer(options: options): Promise { default: options.generationOptions.resultsPath, message: "Path where generated models should be stored:", name: "output", - type: "input" - } + type: "input", + }, ]) ).output; const { customizeGeneration } = await inquirer.prompt([ @@ -475,8 +474,8 @@ async function useInquirer(options: options): Promise { default: false, message: "Do you want to customize generated model?", name: "customizeGeneration", - type: "confirm" - } + type: "confirm", + }, ]); if (customizeGeneration) { const defaultGenerationOptions = getDefaultGenerationOptions(); @@ -487,42 +486,42 @@ async function useInquirer(options: options): Promise { { checked: !options.generationOptions.noConfigs, name: "Generate config files", - value: "config" + value: "config", }, { name: "Generate lazy relations", value: "lazy", - checked: options.generationOptions.lazy + checked: options.generationOptions.lazy, }, { name: "Use ActiveRecord syntax for generated models", value: "activeRecord", - checked: options.generationOptions.activeRecord + checked: options.generationOptions.activeRecord, }, { name: "Use custom naming strategy", value: "namingStrategy", checked: !!options.generationOptions - .customNamingStrategyPath + .customNamingStrategyPath, }, { name: "Generate RelationId fields", value: "relationId", - checked: options.generationOptions.relationIds + checked: options.generationOptions.relationIds, }, { name: "Omits schema identifier in generated entities", value: "skipSchema", - checked: options.generationOptions.skipSchema + checked: options.generationOptions.skipSchema, }, { name: "Generate constructor allowing partial initialization", value: "constructor", checked: - options.generationOptions.generateConstructor + options.generationOptions.generateConstructor, }, { name: "Use specific naming convention", @@ -534,36 +533,36 @@ async function useInquirer(options: options): Promise { .convertCaseProperty !== defaultGenerationOptions.convertCaseProperty || options.generationOptions.convertCaseFile !== - defaultGenerationOptions.convertCaseFile + defaultGenerationOptions.convertCaseFile, }, { name: "Use specific EOL character", value: "converteol", - checked: false + checked: false, }, { name: "Pluralize OneToMany, ManyToMany relation names", value: "pluralize", - checked: options.generationOptions.pluralizeNames + checked: options.generationOptions.pluralizeNames, }, { name: "Generate index file", value: "index", - checked: options.generationOptions.indexFile + checked: options.generationOptions.indexFile, }, { name: "Prefer default exports", value: "defaultExport", checked: options.generationOptions.exportType === - "default" - } + "default", + }, ], message: "Available customizations", name: "selected", - type: "checkbox" - } + type: "checkbox", + }, ]) ).selected; @@ -575,8 +574,8 @@ async function useInquirer(options: options): Promise { "Defines which visibility should have the generated property", name: "propertyVisibility", default: options.generationOptions.propertyVisibility, - type: "list" - } + type: "list", + }, ]) ).propertyVisibility; @@ -587,8 +586,8 @@ async function useInquirer(options: options): Promise { message: "Mark fields as optional(?) or non-null(!)", name: "strictMode", default: options.generationOptions.strictMode, - type: "list" - } + type: "list", + }, ]) ).strictMode; @@ -633,8 +632,8 @@ async function useInquirer(options: options): Promise { valid || "Please enter a a valid path to custom naming strategy file" ); - } - } + }, + }, ]) ).namingStrategy; @@ -651,22 +650,22 @@ async function useInquirer(options: options): Promise { default: options.generationOptions.convertCaseFile, message: "Convert file names to specified case:", name: "fileCase", - type: "list" + type: "list", }, { choices: ["pascal", "camel", "none"], default: options.generationOptions.convertCaseEntity, message: "Convert class names to specified case:", name: "entityCase", - type: "list" + type: "list", }, { choices: ["pascal", "camel", "none"], default: options.generationOptions.convertCaseProperty, message: "Convert property names to specified case:", name: "propertyCase", - type: "list" - } + type: "list", + }, ]); options.generationOptions.convertCaseFile = namingConventions.fileCase; @@ -682,8 +681,8 @@ async function useInquirer(options: options): Promise { default: options.generationOptions.convertEol, message: "Force EOL to be:", name: "eol", - type: "list" - } + type: "list", + }, ]); options.generationOptions.convertEol = eolChoice.eol; } @@ -693,13 +692,13 @@ async function useInquirer(options: options): Promise { choices: [ "Yes, only model customization options", "Yes, with connection details", - "No" + "No", ], default: "No", message: "Save configuration to config file?", name: "saveConfig", - type: "list" - } + type: "list", + }, ]); if (saveConfig === "Yes, with connection details") { await fs.writeJson( diff --git a/src/library.ts b/src/library.ts index a7d8584..8760617 100644 --- a/src/library.ts +++ b/src/library.ts @@ -14,5 +14,5 @@ export { IConnectionOptions, IGenerationOptions, NamingStrategy, - Utils + Utils, }; diff --git a/test/utils/EntityFileToJson.ts b/test/utils/EntityFileToJson.ts index 443aef1..2da8ebd 100644 --- a/test/utils/EntityFileToJson.ts +++ b/test/utils/EntityFileToJson.ts @@ -29,6 +29,10 @@ class EntityIndex { public isUnique = false; } +function removeTrailingComas(input: string) { + return input.replace(/,(?=\s*?[}\]])/g, ""); +} + export default class EntityFileToJson { public static getEntityOptions(trimmedLine: string, ent: EntityJson): void { const decoratorParameters = trimmedLine.slice( @@ -50,7 +54,7 @@ export default class EntityFileToJson { badJSON[badJSON.length - 1]; } ent.entityOptions = JSON.parse( - badJSON.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ') + removeTrailingComas(badJSON.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')) ); } } @@ -90,7 +94,7 @@ export default class EntityFileToJson { `default: $1` ); col.columnOptions = JSON.parse( - badJSON.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ') + removeTrailingComas(badJSON.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')) ); } else if ( decoratorParameters[0] === '"' && @@ -102,8 +106,8 @@ export default class EntityFileToJson { } else { let badJSON = !primaryGeneratedColumn ? decoratorParameters.substring( - decoratorParameters.indexOf(",") + 1 - ) + decoratorParameters.indexOf(",") + 1 + ) : decoratorParameters; badJSON = badJSON.trim(); if (badJSON.lastIndexOf(",") === badJSON.length - 3) { @@ -113,7 +117,7 @@ export default class EntityFileToJson { badJSON[badJSON.length - 1]; } col.columnOptions = JSON.parse( - badJSON.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ') + removeTrailingComas(badJSON.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')) ); } } @@ -143,9 +147,9 @@ export default class EntityFileToJson { badJSON[badJSON.length - 1]; } col.columnOptions = JSON.parse( - badJSON + removeTrailingComas(badJSON .replace(/(')/g, `"`) - .replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ') + .replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')) ); } } @@ -411,7 +415,7 @@ export default class EntityFileToJson { if (decoratorParameters.length > 0) { const column = retVal.columns[retVal.columns.length - 1]; - const options = JSON.parse(decoratorParameters); + const options = JSON.parse(removeTrailingComas(decoratorParameters)); if (Array.isArray(options)) { column.joinOptions = options as any; } else { @@ -437,7 +441,7 @@ export default class EntityFileToJson { if (decoratorParameters.length > 0) { const column = retVal.columns[retVal.columns.length - 1]; - const options = JSON.parse(decoratorParameters); + const options = JSON.parse(removeTrailingComas(decoratorParameters)); if ( options.inverseJoinColumn && !Array.isArray(options.inverseJoinColumn)