From 6a7f24ff751185310bb8eff1badbf3f10f4637ec Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Mon, 9 Nov 2020 11:42:15 +0200 Subject: [PATCH 01/15] Update dependencies. --- .nvmrc | 1 + package-lock.json | 785 +++++++++++++++++++++++++++------------------- package.json | 8 +- 3 files changed, 474 insertions(+), 320 deletions(-) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..301160a --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +8 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index cfa5be0..d9d23a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,40 +4,72 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@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==", + "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==" + }, + "@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==", + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, "@oclif/command": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.6.1.tgz", - "integrity": "sha512-pvmMmfGn+zm4e4RwVw63mg9sIaqKqmVsFbImQoUrCO/43UmWzoSHWNXKdgEGigOezWrkZfFucaeZcSbp149OWg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.0.tgz", + "integrity": "sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw==", "requires": { "@oclif/config": "^1.15.1", - "@oclif/errors": "^1.2.2", + "@oclif/errors": "^1.3.3", "@oclif/parser": "^3.8.3", "@oclif/plugin-help": "^3", "debug": "^4.1.1", - "semver": "^5.6.0" + "semver": "^7.3.2" } }, "@oclif/config": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.15.1.tgz", - "integrity": "sha512-GdyHpEZuWlfU8GSaZoiywtfVBsPcfYn1KuSLT1JTfvZGpPG6vShcGr24YZ3HG2jXUFlIuAqDcYlTzOrqOdTPNQ==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.17.0.tgz", + "integrity": "sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA==", "requires": { - "@oclif/errors": "^1.0.0", + "@oclif/errors": "^1.3.3", "@oclif/parser": "^3.8.0", "debug": "^4.1.1", - "tslib": "^1.9.3" + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + } } }, "@oclif/errors": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.2.2.tgz", - "integrity": "sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.3.tgz", + "integrity": "sha512-EJR6AIOEkt/NnARNIVAskPDVtdhtO5TTNXmhDrGqMoWVsr0R6DkkLrMyq95BmHvlVWM1nduoq4fQPuCyuF2jaA==", "requires": { - "clean-stack": "^1.3.0", - "fs-extra": "^7.0.0", - "indent-string": "^3.2.0", - "strip-ansi": "^5.0.0", - "wrap-ansi": "^4.0.0" + "clean-stack": "^3.0.0", + "fs-extra": "^9.0.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, "@oclif/linewrap": { @@ -57,54 +89,73 @@ } }, "@oclif/plugin-help": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.0.1.tgz", - "integrity": "sha512-Q1OITeUBkkydPf6r5qX75KgE9capr1mNrfHtfD7gkVXmqoTndrbc++z4KfAYNf5nhTCY7N9l52sjbF6BrSGu9w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.0.tgz", + "integrity": "sha512-7jxtpwVWAVbp1r46ZnTK/uF+FeZc6y4p1XcGaIUuPAp7wx6NJhIRN/iMT9UfNFX/Cz7mq+OyJz+E+i0zrik86g==", "requires": { "@oclif/command": "^1.5.20", "@oclif/config": "^1.15.1", "chalk": "^2.4.1", "indent-string": "^4.0.0", "lodash.template": "^4.4.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0", - "widest-line": "^2.0.1", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", "wrap-ansi": "^4.0.0" }, "dependencies": { - "indent-string": { + "wrap-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } } } } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "@sqltools/formatter": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.2.tgz", + "integrity": "sha512-/5O7Fq6Vnv8L6ucmPjaWbVG1XkP4FO+w5glqfkIsq3Xw4oyNAdJddbnYodNDAfjVUvo/rrSCTom4kAND7T1o5Q==", "dev": true }, "@types/node": { - "version": "14.0.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz", - "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==", + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", "dev": true }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { "version": "3.2.1", @@ -135,6 +186,16 @@ "sprintf-js": "~1.0.2" } }, + "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==" + }, + "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==" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -157,14 +218,22 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "camelcase": { @@ -184,9 +253,19 @@ } }, "clean-stack": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz", - "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", + "integrity": "sha512-RHxtgFvXsRQ+1AM7dlozLDY7ssmvUUh0XEnfnyhYgJTO6beNZHBogiaCwGM9Q3rFrUkYxOtsZRC0zAturg5bjg==", + "requires": { + "escape-string-regexp": "4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } }, "cli-highlight": { "version": "2.1.4", @@ -202,19 +281,12 @@ "yargs": "^15.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "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==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -243,57 +315,25 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "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==", - "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 }, - "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", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "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==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { "cliui": "^6.0.0", @@ -306,7 +346,7 @@ "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" + "yargs-parser": "^18.1.2" } } } @@ -322,19 +362,12 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "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==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -353,38 +386,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "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==", - "dev": true - }, - "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", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -431,16 +432,30 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "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==", + "requires": { + "path-type": "^4.0.0" + } + }, "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", "dev": true }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", @@ -453,12 +468,41 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "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", + "picomatch": "^2.2.1" + } + }, + "fastq": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "requires": { + "reusify": "^1.0.4" + } + }, "figlet": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.4.0.tgz", - "integrity": "sha512-CxxIjEKHlqGosgXaIA+sikGDdV6KZOOlzPJnYuPgQlOSHZP5h9WIghYI30fyXnwEVeSH7Hedy72gC6zJrFC+SQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", + "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==", "dev": true }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -470,13 +514,14 @@ } }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" } }, "fs.realpath": { @@ -505,6 +550,27 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -533,21 +599,26 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "highlight.js": { - "version": "9.18.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz", - "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==", + "version": "9.18.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz", + "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==", "dev": true }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "inflight": { "version": "1.0.6", @@ -565,11 +636,42 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, "js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", @@ -581,11 +683,19 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "locate-path": { @@ -619,6 +729,20 @@ "lodash._reinterpolate": "^3.0.0" } }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -722,6 +846,16 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "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==" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, "plantuml-encoder": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", @@ -745,6 +879,11 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -754,6 +893,11 @@ "glob": "^7.1.3" } }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -767,9 +911,9 @@ "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" }, "set-blocking": { "version": "2.0.0", @@ -787,6 +931,11 @@ "safe-buffer": "^5.0.1" } }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -794,35 +943,28 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { + "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" } } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } }, "supports-color": { @@ -834,9 +976,9 @@ } }, "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "requires": { "any-promise": "^1.0.0" @@ -851,44 +993,104 @@ "thenify": ">= 3.1.0 < 4" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, "typeorm": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.25.tgz", - "integrity": "sha512-yzQ995fyDy5wolSLK9cmjUNcmQdixaeEm2TnXB5HN++uKbs9TiR6Y7eYAHpDlAE8s9J1uniDBgytecCZVFergQ==", + "version": "0.2.29", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.29.tgz", + "integrity": "sha512-ih1vrTe3gEAGKRcWlcsTRxTL7gNjacQE498wVGuJ3ZRujtMqPZlbAWuC7xDzWCRjQnkZYNwZQeG9UgKfxSHB5g==", "dev": true, "requires": { + "@sqltools/formatter": "1.2.2", "app-root-path": "^3.0.0", - "buffer": "^5.1.0", - "chalk": "^2.4.2", - "cli-highlight": "^2.0.0", + "buffer": "^5.5.0", + "chalk": "^4.1.0", + "cli-highlight": "^2.1.4", "debug": "^4.1.1", - "dotenv": "^6.2.0", - "glob": "^7.1.2", - "js-yaml": "^3.13.1", - "mkdirp": "^1.0.3", + "dotenv": "^8.2.0", + "glob": "^7.1.6", + "js-yaml": "^3.14.0", + "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", - "tslib": "^1.9.0", - "xml2js": "^0.4.17", + "tslib": "^1.13.0", + "xml2js": "^0.4.23", "yargonaut": "^1.1.2", - "yargs": "^13.2.1" + "yargs": "^16.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", "dev": true }, "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==" }, "which-module": { "version": "2.0.0", @@ -897,35 +1099,43 @@ "dev": true }, "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "requires": { - "string-width": "^2.1.1" + "string-width": "^4.0.0" } }, "wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": { - "ansi-regex": "^3.0.0" + "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==" } } }, @@ -1011,99 +1221,42 @@ } }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", + "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "string-width": "^4.2.0", + "y18n": "^5.0.2", + "yargs-parser": "^20.2.2" }, "dependencies": { "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-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": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, "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" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, diff --git a/package.json b/package.json index 348f8a5..c072f01 100644 --- a/package.json +++ b/package.json @@ -40,14 +40,14 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { - "@oclif/command": "^1.6.1", + "@oclif/command": "^1.8.0", "plantuml-encoder": "^1.4.0" }, "devDependencies": { - "@types/node": "^14.0.13", + "@types/node": "^8.10.66", "rimraf": "^3.0.2", - "typeorm": "^0.2.25", - "typescript": "^3.9.5" + "typeorm": "^0.2.29", + "typescript": "^3.9.7" }, "peerDependencies": { "typeorm": "^0.2.0" From f0cad9b220347f0d99165551938e3616afcaa52f Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 09:30:39 +0200 Subject: [PATCH 02/15] Added typeorm-uml script to the package.json. --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c072f01..3d8c835 100644 --- a/package.json +++ b/package.json @@ -35,9 +35,11 @@ }, "types": "lib/TypeormUmlCommand.d.ts", "scripts": { - "build": "rimraf lib && tsc -b --force", + "prebuild": "rimraf lib", + "build": "tsc -b --force", "prepublish": "npm run build", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "typeorm-uml": "./bin/run" }, "dependencies": { "@oclif/command": "^1.8.0", From e7fbd4712415680ddb21718542d52ce24e6f98b6 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 09:30:49 +0200 Subject: [PATCH 03/15] Fix issue with absolute paths. --- src/TypeormUmlCommand.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/TypeormUmlCommand.ts b/src/TypeormUmlCommand.ts index 2511109..92e3070 100644 --- a/src/TypeormUmlCommand.ts +++ b/src/TypeormUmlCommand.ts @@ -1,4 +1,4 @@ -import { isAbsolute, resolve } from 'path'; +import { isAbsolute, resolve, dirname, basename } from 'path'; import { createWriteStream, writeFileSync } from 'fs'; import { get } from 'http'; @@ -101,8 +101,8 @@ class TypeormUmlCommand extends Command { */ private async getConnection( configName: string, flags: TypeormUmlCommandFlags ): Promise { const connectionOptionsReader = new ConnectionOptionsReader( { - root: process.cwd(), - configName, + root: isAbsolute( configName ) ? dirname( configName ) : process.cwd(), + configName: isAbsolute( configName ) ? basename( configName ) : configName, } ); const connectionOptions = await connectionOptionsReader.get( flags.connection ); From 587e2a4b3523ed4b775dfbc24193b9fcef401326 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 09:34:56 +0200 Subject: [PATCH 04/15] Update changelog. --- CHANGELOG.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23d06c9..b3ae3c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,28 +1,39 @@ # Changelog -## v1.2.1 (2020-06-18) +## [Unreleased] - TBD +- Fixed issues when the absolute path to the config file was used. + +## [v1.2.1] (2020-06-18) - Fixed puml diagram downloading issue. -## v1.2.0 (2020-06-18) +## [v1.2.0] (2020-06-18) - Added GitHub Actions to check build process on push. - Added GitHub Actions to check generated UML. - Added puml format that displays generated UML code. - Reworked typeorm configuration read to skip connecting to the database. - Fixed primary column formatting for TXT format (removed HTML tag). -## v1.1.3 (2020-05-25) +## [v1.1.3] (2020-05-25) - Fixed typo in the readme file. - Updated dependencies to the latest versions. -## v1.1.2 (2020-01-11) +## [v1.1.2] (2020-01-11) - Fixed UML generation issue. -## v1.1.1 (2020-01-11) +## [v1.1.1] (2020-01-11) - Fixed build command issue. -## v1.1.0 (2020-01-11) +## [v1.1.0] (2020-01-11) - Added `--download` option to download a diagram. - Added `--include` option to include only specific entities to the diagram. - Added `--exclude` option to exclude specific entities from the diagram. + +[Unreleased]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.2.1...master +[v1.2.1]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.2.0...v1.2.1 +[v1.2.0]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.1.3...v1.2.0 +[v1.1.3]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.1.2...v1.1.3 +[v1.1.2]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.1.1...v1.1.2 +[v1.1.1]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.1.0...v1.1.1 +[v1.1.0]: https://github.com/eugene-manuilov/typeorm-uml/releases/tag/v1.1.0 From 2548a1a203a7a305e4af226ef126bdbbebd9c3bd Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 09:46:20 +0200 Subject: [PATCH 05/15] Update connection detection to change current directory to the config folder when an absolute path is used. --- src/TypeormUmlCommand.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/TypeormUmlCommand.ts b/src/TypeormUmlCommand.ts index 92e3070..a30e07f 100644 --- a/src/TypeormUmlCommand.ts +++ b/src/TypeormUmlCommand.ts @@ -95,16 +95,22 @@ class TypeormUmlCommand extends Command { * * @async * @private - * @param {string} configName A path to Typeorm config file. + * @param {string} configPath A path to Typeorm config file. * @param {TypeormUmlCommandFlags} flags An object with command flags. * @returns {Connection} A connection instance. */ - private async getConnection( configName: string, flags: TypeormUmlCommandFlags ): Promise { - const connectionOptionsReader = new ConnectionOptionsReader( { - root: isAbsolute( configName ) ? dirname( configName ) : process.cwd(), - configName: isAbsolute( configName ) ? basename( configName ) : configName, - } ); + private async getConnection( configPath: string, flags: TypeormUmlCommandFlags ): Promise { + let root: string = process.cwd(); + let configName: string = configPath; + + if ( isAbsolute( configName ) ) { + root = dirname( configName ); + configName = basename( configName ); + + process.chdir( root ); + } + const connectionOptionsReader = new ConnectionOptionsReader( { root, configName } ); const connectionOptions = await connectionOptionsReader.get( flags.connection ); return getConnectionManager().create( connectionOptions ); } From 84961368986c21aae3980c4dc6ca2ed9528f7ede Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 09:49:54 +0200 Subject: [PATCH 06/15] Add vscode tasks file with a command to build project. --- .vscode/tasks.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..6c28b37 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build Project", + "type": "shell", + "command": "npm", + "args": ["run", "build"], + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file From 4c1ab131ace542322453a2e4dc77cb6f4c851a70 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 10:00:51 +0200 Subject: [PATCH 07/15] Add an error if no entities have been found. --- CHANGELOG.md | 1 + src/UmlBuilder.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3ae3c3..c0af6be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [Unreleased] - TBD +- Updated the Builder class to throw an error if no entities have been found. - Fixed issues when the absolute path to the config file was used. ## [v1.2.1] (2020-06-18) diff --git a/src/UmlBuilder.ts b/src/UmlBuilder.ts index 44ea1bf..292d9e2 100644 --- a/src/UmlBuilder.ts +++ b/src/UmlBuilder.ts @@ -44,6 +44,9 @@ export class UmlBuilder { const connectionMetadataBuilder = new ConnectionMetadataBuilder( connection ); const entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas( connection.options.entities || [] ); + if ( ! entityMetadatas.length ) { + throw new Error( 'No entities have been found. Please, check your typeorm config to make sure you have configured it correctly.' ); + } for ( let i = 0, len = entityMetadatas.length; i < len; i++ ) { const entity = entityMetadatas[i]; From 2a80aae13ec1050ae90de413c651323449cb4eb4 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 11:23:07 +0200 Subject: [PATCH 08/15] Update builder class to use entities. --- src/UmlBuilder.ts | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/UmlBuilder.ts b/src/UmlBuilder.ts index 292d9e2..fcccff0 100644 --- a/src/UmlBuilder.ts +++ b/src/UmlBuilder.ts @@ -23,20 +23,21 @@ export class UmlBuilder { * @returns {string} An uml string. */ public buildUml( connection: Connection, flags: TypeormUmlCommandFlags ): string { - let uml = `@startuml\n\n`; + let uml = '@startuml\n\n'; - uml += `!define table(x) class x << (T,#FFAAAA) >>\n`; if ( flags.format === 'txt' ) { - uml += `!define pkey(x) x\n`; + uml += '!define pkey(x) x\n'; } else { - uml += `!define pkey(x) x\n`; + uml += '!define pkey(x) x\n'; } + uml += '!define table(x) entity x << (T,#FFAAAA) >>\n\n'; - uml += `hide stereotypes\n`; - uml += `hide fields\n`; + uml += 'hide stereotypes\n'; + uml += 'hide methods\n\n'; + uml += 'skinparam linetype ortho\n'; if ( flags.monochrome ) { - uml += `\nskinparam monochrome true\n`; + uml += 'skinparam monochrome true\n'; } const exclude = ( flags.exclude || '' ).split( ',' ).filter( ( item ) => item.trim().length ); @@ -131,7 +132,7 @@ export class UmlBuilder { length = `(${ length })`; } - return `\t{method} ${ prefix }${ columnName }: ${ type.toUpperCase() }${ length }\n`; + return ` ${ prefix }${ columnName }: ${ type.toUpperCase() }${ length }\n`; } /** @@ -143,7 +144,11 @@ export class UmlBuilder { * @returns {string} An uml connection string. */ protected buildForeignKeys( foreignKey: ForeignKeyMetadata, entity: EntityMetadata ): string { - return `${ entity.tableNameWithoutPrefix } "\*" --> "1" ${ foreignKey.referencedTablePath }\n`; + const zeroOrMore = '}o'; + const oneOrMore = '}|'; + const relationship = foreignKey.columns.some( ( column ) => ! column.isNullable ) ? oneOrMore : zeroOrMore; + + return `${ entity.tableNameWithoutPrefix } ${ relationship }--|| ${ foreignKey.referencedTablePath }\n`; } /** From 9e77a4e8a7340eebcb2c4963027987a4c549f161 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 11:23:15 +0200 Subject: [PATCH 09/15] Add watch command. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3d8c835..9c1ab37 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "scripts": { "prebuild": "rimraf lib", "build": "tsc -b --force", + "watch": "tsc --watch", "prepublish": "npm run build", "test": "echo \"Error: no test specified\" && exit 1", "typeorm-uml": "./bin/run" From 24cae82c5e937e15e3749cb3b3f258a3afd43c82 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 11:53:49 +0200 Subject: [PATCH 10/15] Added an example database and fixed foreign keys issue. --- .gitignore | 3 + README.md | 2 +- examples/shopping-cart/README.md | 11 ++ examples/shopping-cart/entities/Cart.ts | 80 +++++++++++++ examples/shopping-cart/entities/CartItem.ts | 62 ++++++++++ examples/shopping-cart/entities/Category.ts | 53 +++++++++ examples/shopping-cart/entities/Order.ts | 111 ++++++++++++++++++ examples/shopping-cart/entities/OrderItem.ts | 59 ++++++++++ examples/shopping-cart/entities/Product.ts | 108 +++++++++++++++++ .../shopping-cart/entities/ProductMeta.ts | 33 ++++++ .../shopping-cart/entities/ProductReview.ts | 60 ++++++++++ examples/shopping-cart/entities/Tag.ts | 23 ++++ .../shopping-cart/entities/Transaction.ts | 59 ++++++++++ examples/shopping-cart/entities/User.ts | 77 ++++++++++++ examples/shopping-cart/ormconfig.json | 16 +++ examples/shopping-cart/package-lock.json | 85 ++++++++++++++ examples/shopping-cart/package.json | 12 ++ examples/shopping-cart/tsconfig.json | 10 ++ src/UmlBuilder.ts | 48 +++++--- 19 files changed, 894 insertions(+), 18 deletions(-) create mode 100644 examples/shopping-cart/README.md create mode 100644 examples/shopping-cart/entities/Cart.ts create mode 100644 examples/shopping-cart/entities/CartItem.ts create mode 100644 examples/shopping-cart/entities/Category.ts create mode 100644 examples/shopping-cart/entities/Order.ts create mode 100644 examples/shopping-cart/entities/OrderItem.ts create mode 100644 examples/shopping-cart/entities/Product.ts create mode 100644 examples/shopping-cart/entities/ProductMeta.ts create mode 100644 examples/shopping-cart/entities/ProductReview.ts create mode 100644 examples/shopping-cart/entities/Tag.ts create mode 100644 examples/shopping-cart/entities/Transaction.ts create mode 100644 examples/shopping-cart/entities/User.ts create mode 100644 examples/shopping-cart/ormconfig.json create mode 100644 examples/shopping-cart/package-lock.json create mode 100644 examples/shopping-cart/package.json create mode 100644 examples/shopping-cart/tsconfig.json diff --git a/.gitignore b/.gitignore index 02a6629..5368860 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /node_modules/ /lib/ +/examples/**/node_modules/ +/examples/**/*.js +/examples/**/*.js.map /tsconfig.tsbuildinfo diff --git a/README.md b/README.md index 680ae5b..dec4b88 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ ts-node ./node_modules/.bin/typeorm-uml ormconfig.json typeorm-uml --format=svg --monochrome ``` -[![typeorm/typescript-example](http://www.plantuml.com/plantuml/png/bP9DIyD048RFpgyOuoMh5edGImXBWrZinKC9ugriibEpD9iDkrj8AFtl9ltGMgZe76SUtcS6PkAyi7wjAu1hIKjL4tgHLnIs38jAE8Sj9Wc6sVtDT9hsnP3pBxHPKJUGISxRv27dK2f9w3nPChvhoEqRIqMLT01kfUf6MA5HczeKfJMwrzar0S3UYeNmz65iXmmtSBNHv4iZjtYtCw6Io6ASlMPX5B6JSIqqnVYMpfzUqdduE1ups7vdDiRv_-LvvQlpm9CfjJx6xFazExSi3kihSelVBndesGNx0Ja6_CHwuqLJS1lWQCGnY8ATu8_eiGameLeEl_09)](http://www.plantuml.com/plantuml/png/bP9DIyD048RFpgyOuoMh5edGImXBWrZinKC9ugriibEpD9iDkrj8AFtl9ltGMgZe76SUtcS6PkAyi7wjAu1hIKjL4tgHLnIs38jAE8Sj9Wc6sVtDT9hsnP3pBxHPKJUGISxRv27dK2f9w3nPChvhoEqRIqMLT01kfUf6MA5HczeKfJMwrzar0S3UYeNmz65iXmmtSBNHv4iZjtYtCw6Io6ASlMPX5B6JSIqqnVYMpfzUqdduE1ups7vdDiRv_-LvvQlpm9CfjJx6xFazExSi3kihSelVBndesGNx0Ja6_CHwuqLJS1lWQCGnY8ATu8_eiGameLeEl_09) +[![typeorm/typescript-example](http://www.plantuml.com/plantuml/png/XL7DIyCm5B-_l-A9bmOTCc6NKigAEDp5moZYRQJhquOrIKdUeCNkVpVT5rhyo2s_xv2vP-bufsk0gvBUb25ijjH5hS2aIDlahaWl1CkYfe4XmuexR359CCflhnUBB1o1QGfGgPBGCpcot3NaZu0chcpf0VnMcKOwgR4EaOC2hGlS5q9ROpULipeqkXq177jn8vdUhUjGu0SWtXnseYfHnBXypgFfL0JOI4qnlcIhXwTi5TtFPWBsbuZ6UlxR7XvMZ_q1fPPZp1zVyr7O-ZHAaL__l6zGBKSb9-fi-4w7Wb-Jz_raqlU7p7z5vpl0d4mv_F0d)](http://www.plantuml.com/plantuml/png/XL7DIyCm5B-_l-A9bmOTCc6NKigAEDp5moZYRQJhquOrIKdUeCNkVpVT5rhyo2s_xv2vP-bufsk0gvBUb25ijjH5hS2aIDlahaWl1CkYfe4XmuexR359CCflhnUBB1o1QGfGgPBGCpcot3NaZu0chcpf0VnMcKOwgR4EaOC2hGlS5q9ROpULipeqkXq177jn8vdUhUjGu0SWtXnseYfHnBXypgFfL0JOI4qnlcIhXwTi5TtFPWBsbuZ6UlxR7XvMZ_q1fPPZp1zVyr7O-ZHAaL__l6zGBKSb9-fi-4w7Wb-Jz_raqlU7p7z5vpl0d4mv_F0d) ## Contribute diff --git a/examples/shopping-cart/README.md b/examples/shopping-cart/README.md new file mode 100644 index 0000000..edd781f --- /dev/null +++ b/examples/shopping-cart/README.md @@ -0,0 +1,11 @@ +# Shopping Cart Database + +The Shopping Cart Database in MySQL as the starting point to develop the online shopping cart websites and applications. + +## Database Schema + +The visual database design of the Shopping Cart Database is shown below: + +[![shopping cart example](http://www.plantuml.com/plantuml/png/xLTDRnen4BtxLxZA1TH63QdIIWYXq2Pfa4WgfQkgFKLcFG6BtVNMzX9G4tvxRRDyh6q42abwAITuCtwUZ-UnEPMA25Ma2K9lADon370-WcbjKiUjVdlIUjzlBmsAz1Cm5iWKKrCymQqMhaNl3YukElfJn-qsGaD60Ki50hYQvY3dG0fgoAb4I8vObXD1KfneIkE1kT2sDKFACnuF1K_rZg80XERxubW7UiiKfBYE_o2Ctzf0CQEutiIVkr-xrr7j-AYkBGUvuBI8LPUw1iFXeN9KDF6FpisNoyvDhN5aiLom69huelUj4zKQnmQYJCQyo5GL_LqGMuqc_dxLwVKCwqU3arYniMQ8kjU_3DWmO2o0AA0TpN7MYSwZxjMvHekS1j2OPmhCRj7vpmWzhfL1mO2BwGvL848JUEdgQ1DO9Vpfn82wGIIg6ifAoAGOUE2cuCh2tngwfxTffbUijZpPQKS1OmRtUqXZjsgL-GkYM3PmUvuN_OJ98T2Tshxqth7nYWosflSAlTrUuaA2s5Tris1eiaXJ8gRpyjhmDB6U8MuZNkH4oo7FzpZFczfj1x1qGCYet54MN50G-yv5I_8wW_4vPg0I99DcmlBiYNBSa77CgQ_5aC9Iw-W8H15Lo9V8rmRxn4mbIAdhP70tBpw2p3zZmInaqO-u8acrnqPrPy7kApAf0dB8yjpEp8gRpwarcd9t-eSbDj0oe86mxfYGwfgauDAaZD84GfQ4R5Z1-wmodkpSWfImnAFG3vf623psxZ9xBAgOJdlCiXZyUq-dBVphy1bKPUIoLLJFMCjPk9YpO3Lp8kMzrlqbaSELxOFjBw4fovnHFDOZami7531WzYtgbiI4sEC3mxA6CbrfNhbST5VkRCZU8qoeVteU_qjy9ualNeVXH_C2xVgzApsM5wRZuE_WlSusBLqww1KXtjNVdCU7myE71wir7otfqJApHrvwpt-ZobFSMUGycikbLTHp2b8iO2DrjFOKAM6B1F05o_f5NbaICAosM0Hi4NiKrm6lvyiwEfLn7Tpgc9PkD-cl29tgwMF-HFy5)](http://www.plantuml.com/plantuml/png/xLTDRnen4BtxLxZA1TH63QdIIWYXq2Pfa4WgfQkgFKLcFG6BtVNMzX9G4tvxRRDyh6q42abwAITuCtwUZ-UnEPMA25Ma2K9lADon370-WcbjKiUjVdlIUjzlBmsAz1Cm5iWKKrCymQqMhaNl3YukElfJn-qsGaD60Ki50hYQvY3dG0fgoAb4I8vObXD1KfneIkE1kT2sDKFACnuF1K_rZg80XERxubW7UiiKfBYE_o2Ctzf0CQEutiIVkr-xrr7j-AYkBGUvuBI8LPUw1iFXeN9KDF6FpisNoyvDhN5aiLom69huelUj4zKQnmQYJCQyo5GL_LqGMuqc_dxLwVKCwqU3arYniMQ8kjU_3DWmO2o0AA0TpN7MYSwZxjMvHekS1j2OPmhCRj7vpmWzhfL1mO2BwGvL848JUEdgQ1DO9Vpfn82wGIIg6ifAoAGOUE2cuCh2tngwfxTffbUijZpPQKS1OmRtUqXZjsgL-GkYM3PmUvuN_OJ98T2Tshxqth7nYWosflSAlTrUuaA2s5Tris1eiaXJ8gRpyjhmDB6U8MuZNkH4oo7FzpZFczfj1x1qGCYet54MN50G-yv5I_8wW_4vPg0I99DcmlBiYNBSa77CgQ_5aC9Iw-W8H15Lo9V8rmRxn4mbIAdhP70tBpw2p3zZmInaqO-u8acrnqPrPy7kApAf0dB8yjpEp8gRpwarcd9t-eSbDj0oe86mxfYGwfgauDAaZD84GfQ4R5Z1-wmodkpSWfImnAFG3vf623psxZ9xBAgOJdlCiXZyUq-dBVphy1bKPUIoLLJFMCjPk9YpO3Lp8kMzrlqbaSELxOFjBw4fovnHFDOZami7531WzYtgbiI4sEC3mxA6CbrfNhbST5VkRCZU8qoeVteU_qjy9ualNeVXH_C2xVgzApsM5wRZuE_WlSusBLqww1KXtjNVdCU7myE71wir7otfqJApHrvwpt-ZobFSMUGycikbLTHp2b8iO2DrjFOKAM6B1F05o_f5NbaICAosM0Hi4NiKrm6lvyiwEfLn7Tpgc9PkD-cl29tgwMF-HFy5) + +Credits: [https://github.com/tutorials24x7/shopping-cart-database-mysql](https://github.com/tutorials24x7/shopping-cart-database-mysql) diff --git a/examples/shopping-cart/entities/Cart.ts b/examples/shopping-cart/entities/Cart.ts new file mode 100644 index 0000000..c9ecbb3 --- /dev/null +++ b/examples/shopping-cart/entities/Cart.ts @@ -0,0 +1,80 @@ +import { + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn, +} from "typeorm"; + +import { User } from "./User"; +import { CartItem } from "./CartItem"; + +@Index("idx_cart_user", ["userId"], {}) +@Entity("cart", { schema: "shop" }) +export class Cart { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "userId", nullable: true }) + userId: string | null; + + @Column("varchar", { name: "sessionId", length: 100 }) + sessionId: string; + + @Column("varchar", { name: "token", length: 100 }) + token: string; + + @Column("smallint", { name: "status", default: () => "'0'" }) + status: number; + + @Column("varchar", { name: "firstName", nullable: true, length: 50 }) + firstName: string | null; + + @Column("varchar", { name: "middleName", nullable: true, length: 50 }) + middleName: string | null; + + @Column("varchar", { name: "lastName", nullable: true, length: 50 }) + lastName: string | null; + + @Column("varchar", { name: "mobile", nullable: true, length: 15 }) + mobile: string | null; + + @Column("varchar", { name: "email", nullable: true, length: 50 }) + email: string | null; + + @Column("varchar", { name: "line1", nullable: true, length: 50 }) + line1: string | null; + + @Column("varchar", { name: "line2", nullable: true, length: 50 }) + line2: string | null; + + @Column("varchar", { name: "city", nullable: true, length: 50 }) + city: string | null; + + @Column("varchar", { name: "province", nullable: true, length: 50 }) + province: string | null; + + @Column("varchar", { name: "country", nullable: true, length: 50 }) + country: string | null; + + @Column("datetime", { name: "createdAt" }) + createdAt: Date; + + @Column("datetime", { name: "updatedAt", nullable: true }) + updatedAt: Date | null; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToOne(() => User, (user) => user.carts, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "userId", referencedColumnName: "id" }]) + user: User; + + @OneToMany(() => CartItem, (cartItem) => cartItem.cart) + cartItems: CartItem[]; +} diff --git a/examples/shopping-cart/entities/CartItem.ts b/examples/shopping-cart/entities/CartItem.ts new file mode 100644 index 0000000..eea0c26 --- /dev/null +++ b/examples/shopping-cart/entities/CartItem.ts @@ -0,0 +1,62 @@ +import { + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, +} from "typeorm"; +import { Cart } from "./Cart"; +import { Product } from "./Product"; + +@Index("idx_cart_item_product", ["productId"], {}) +@Index("idx_cart_item_cart", ["cartId"], {}) +@Entity("cart_item", { schema: "shop" }) +export class CartItem { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "productId" }) + productId: string; + + @Column("bigint", { name: "cartId" }) + cartId: string; + + @Column("varchar", { name: "sku", length: 100 }) + sku: string; + + @Column("float", { name: "price", precision: 12, default: () => "'0'" }) + price: number; + + @Column("float", { name: "discount", precision: 12, default: () => "'0'" }) + discount: number; + + @Column("smallint", { name: "quantity", default: () => "'0'" }) + quantity: number; + + @Column("tinyint", { name: "active", width: 1, default: () => "'0'" }) + active: boolean; + + @Column("datetime", { name: "createdAt" }) + createdAt: Date; + + @Column("datetime", { name: "updatedAt", nullable: true }) + updatedAt: Date | null; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToOne(() => Cart, (cart) => cart.cartItems, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "cartId", referencedColumnName: "id" }]) + cart: Cart; + + @ManyToOne(() => Product, (product) => product.cartItems, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "productId", referencedColumnName: "id" }]) + product: Product; +} diff --git a/examples/shopping-cart/entities/Category.ts b/examples/shopping-cart/entities/Category.ts new file mode 100644 index 0000000..5c0ccaf --- /dev/null +++ b/examples/shopping-cart/entities/Category.ts @@ -0,0 +1,53 @@ +import { + Column, + Entity, + Index, + JoinColumn, + JoinTable, + ManyToMany, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn, +} from "typeorm"; +import { Product } from "./Product"; + +@Index("idx_category_parent", ["parentId"], {}) +@Entity("category", { schema: "shop" }) +export class Category { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "parentId", nullable: true }) + parentId: string | null; + + @Column("varchar", { name: "title", length: 75 }) + title: string; + + @Column("varchar", { name: "metaTitle", nullable: true, length: 100 }) + metaTitle: string | null; + + @Column("varchar", { name: "slug", length: 100 }) + slug: string; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToOne(() => Category, (category) => category.categories, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "parentId", referencedColumnName: "id" }]) + parent: Category; + + @OneToMany(() => Category, (category) => category.parent) + categories: Category[]; + + @ManyToMany(() => Product, (product) => product.categories) + @JoinTable({ + name: "product_category", + joinColumns: [{ name: "categoryId", referencedColumnName: "id" }], + inverseJoinColumns: [{ name: "productId", referencedColumnName: "id" }], + schema: "shop", + }) + products: Product[]; +} diff --git a/examples/shopping-cart/entities/Order.ts b/examples/shopping-cart/entities/Order.ts new file mode 100644 index 0000000..9f98508 --- /dev/null +++ b/examples/shopping-cart/entities/Order.ts @@ -0,0 +1,111 @@ +import { + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn, +} from "typeorm"; +import { User } from "./User"; +import { OrderItem } from "./OrderItem"; +import { Transaction } from "./Transaction"; + +@Index("idx_order_user", ["userId"], {}) +@Entity("order", { schema: "shop" }) +export class Order { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "userId", nullable: true }) + userId: string | null; + + @Column("varchar", { name: "sessionId", length: 100 }) + sessionId: string; + + @Column("varchar", { name: "token", length: 100 }) + token: string; + + @Column("smallint", { name: "status", default: () => "'0'" }) + status: number; + + @Column("float", { name: "subTotal", precision: 12, default: () => "'0'" }) + subTotal: number; + + @Column("float", { + name: "itemDiscount", + precision: 12, + default: () => "'0'", + }) + itemDiscount: number; + + @Column("float", { name: "tax", precision: 12, default: () => "'0'" }) + tax: number; + + @Column("float", { name: "shipping", precision: 12, default: () => "'0'" }) + shipping: number; + + @Column("float", { name: "total", precision: 12, default: () => "'0'" }) + total: number; + + @Column("varchar", { name: "promo", nullable: true, length: 50 }) + promo: string | null; + + @Column("float", { name: "discount", precision: 12, default: () => "'0'" }) + discount: number; + + @Column("float", { name: "grandTotal", precision: 12, default: () => "'0'" }) + grandTotal: number; + + @Column("varchar", { name: "firstName", nullable: true, length: 50 }) + firstName: string | null; + + @Column("varchar", { name: "middleName", nullable: true, length: 50 }) + middleName: string | null; + + @Column("varchar", { name: "lastName", nullable: true, length: 50 }) + lastName: string | null; + + @Column("varchar", { name: "mobile", nullable: true, length: 15 }) + mobile: string | null; + + @Column("varchar", { name: "email", nullable: true, length: 50 }) + email: string | null; + + @Column("varchar", { name: "line1", nullable: true, length: 50 }) + line1: string | null; + + @Column("varchar", { name: "line2", nullable: true, length: 50 }) + line2: string | null; + + @Column("varchar", { name: "city", nullable: true, length: 50 }) + city: string | null; + + @Column("varchar", { name: "province", nullable: true, length: 50 }) + province: string | null; + + @Column("varchar", { name: "country", nullable: true, length: 50 }) + country: string | null; + + @Column("datetime", { name: "createdAt" }) + createdAt: Date; + + @Column("datetime", { name: "updatedAt", nullable: true }) + updatedAt: Date | null; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToOne(() => User, (user) => user.orders, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "userId", referencedColumnName: "id" }]) + user: User; + + @OneToMany(() => OrderItem, (orderItem) => orderItem.order) + orderItems: OrderItem[]; + + @OneToMany(() => Transaction, (transaction) => transaction.order) + transactions: Transaction[]; +} diff --git a/examples/shopping-cart/entities/OrderItem.ts b/examples/shopping-cart/entities/OrderItem.ts new file mode 100644 index 0000000..bc0bdda --- /dev/null +++ b/examples/shopping-cart/entities/OrderItem.ts @@ -0,0 +1,59 @@ +import { + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, +} from "typeorm"; +import { Order } from "./Order"; +import { Product } from "./Product"; + +@Index("idx_order_item_product", ["productId"], {}) +@Index("idx_order_item_order", ["orderId"], {}) +@Entity("order_item", { schema: "shop" }) +export class OrderItem { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "productId" }) + productId: string; + + @Column("bigint", { name: "orderId" }) + orderId: string; + + @Column("varchar", { name: "sku", length: 100 }) + sku: string; + + @Column("float", { name: "price", precision: 12, default: () => "'0'" }) + price: number; + + @Column("float", { name: "discount", precision: 12, default: () => "'0'" }) + discount: number; + + @Column("smallint", { name: "quantity", default: () => "'0'" }) + quantity: number; + + @Column("datetime", { name: "createdAt" }) + createdAt: Date; + + @Column("datetime", { name: "updatedAt", nullable: true }) + updatedAt: Date | null; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToOne(() => Order, (order) => order.orderItems, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "orderId", referencedColumnName: "id" }]) + order: Order; + + @ManyToOne(() => Product, (product) => product.orderItems, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "productId", referencedColumnName: "id" }]) + product: Product; +} diff --git a/examples/shopping-cart/entities/Product.ts b/examples/shopping-cart/entities/Product.ts new file mode 100644 index 0000000..0c3521b --- /dev/null +++ b/examples/shopping-cart/entities/Product.ts @@ -0,0 +1,108 @@ +import { + Column, + Entity, + Index, + JoinColumn, + JoinTable, + ManyToMany, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn, +} from "typeorm"; +import { CartItem } from "./CartItem"; +import { OrderItem } from "./OrderItem"; +import { User } from "./User"; +import { Category } from "./Category"; +import { ProductMeta } from "./ProductMeta"; +import { ProductReview } from "./ProductReview"; +import { Tag } from "./Tag"; + +@Index("uq_slug", ["slug"], { unique: true }) +@Index("idx_product_user", ["userId"], {}) +@Entity("product", { schema: "shop" }) +export class Product { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "userId" }) + userId: string; + + @Column("varchar", { name: "title", length: 75 }) + title: string; + + @Column("varchar", { name: "metaTitle", nullable: true, length: 100 }) + metaTitle: string | null; + + @Column("varchar", { name: "slug", unique: true, length: 100 }) + slug: string; + + @Column("tinytext", { name: "summary", nullable: true }) + summary: string | null; + + @Column("smallint", { name: "type", default: () => "'0'" }) + type: number; + + @Column("varchar", { name: "sku", length: 100 }) + sku: string; + + @Column("float", { name: "price", precision: 12, default: () => "'0'" }) + price: number; + + @Column("float", { name: "discount", precision: 12, default: () => "'0'" }) + discount: number; + + @Column("smallint", { name: "quantity", default: () => "'0'" }) + quantity: number; + + @Column("tinyint", { name: "shop", width: 1, default: () => "'0'" }) + shop: boolean; + + @Column("datetime", { name: "createdAt" }) + createdAt: Date; + + @Column("datetime", { name: "updatedAt", nullable: true }) + updatedAt: Date | null; + + @Column("datetime", { name: "publishedAt", nullable: true }) + publishedAt: Date | null; + + @Column("datetime", { name: "startsAt", nullable: true }) + startsAt: Date | null; + + @Column("datetime", { name: "endsAt", nullable: true }) + endsAt: Date | null; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @OneToMany(() => CartItem, (cartItem) => cartItem.product) + cartItems: CartItem[]; + + @OneToMany(() => OrderItem, (orderItem) => orderItem.product) + orderItems: OrderItem[]; + + @ManyToOne(() => User, (user) => user.products, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "userId", referencedColumnName: "id" }]) + user: User; + + @ManyToMany(() => Category, (category) => category.products) + categories: Category[]; + + @OneToMany(() => ProductMeta, (productMeta) => productMeta.product) + productMetas: ProductMeta[]; + + @OneToMany(() => ProductReview, (productReview) => productReview.product) + productReviews: ProductReview[]; + + @ManyToMany(() => Tag, (tag) => tag.products) + @JoinTable({ + name: "product_tag", + joinColumns: [{ name: "productId", referencedColumnName: "id" }], + inverseJoinColumns: [{ name: "tagId", referencedColumnName: "id" }], + schema: "shop", + }) + tags: Tag[]; +} diff --git a/examples/shopping-cart/entities/ProductMeta.ts b/examples/shopping-cart/entities/ProductMeta.ts new file mode 100644 index 0000000..f94cb75 --- /dev/null +++ b/examples/shopping-cart/entities/ProductMeta.ts @@ -0,0 +1,33 @@ +import { + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, +} from "typeorm"; +import { Product } from "./Product"; + +@Index("uq_product_meta", ["productId", "key"], { unique: true }) +@Index("idx_meta_product", ["productId"], {}) +@Entity("product_meta", { schema: "shop" }) +export class ProductMeta { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "productId" }) + productId: string; + + @Column("varchar", { name: "key", length: 50 }) + key: string; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToOne(() => Product, (product) => product.productMetas, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "productId", referencedColumnName: "id" }]) + product: Product; +} diff --git a/examples/shopping-cart/entities/ProductReview.ts b/examples/shopping-cart/entities/ProductReview.ts new file mode 100644 index 0000000..342b2e4 --- /dev/null +++ b/examples/shopping-cart/entities/ProductReview.ts @@ -0,0 +1,60 @@ +import { + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn, +} from "typeorm"; +import { Product } from "./Product"; + +@Index("idx_review_product", ["productId"], {}) +@Index("idx_review_parent", ["parentId"], {}) +@Entity("product_review", { schema: "shop" }) +export class ProductReview { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "productId" }) + productId: string; + + @Column("bigint", { name: "parentId", nullable: true }) + parentId: string | null; + + @Column("varchar", { name: "title", length: 100 }) + title: string; + + @Column("smallint", { name: "rating", default: () => "'0'" }) + rating: number; + + @Column("tinyint", { name: "published", width: 1, default: () => "'0'" }) + published: boolean; + + @Column("datetime", { name: "createdAt" }) + createdAt: Date; + + @Column("datetime", { name: "publishedAt", nullable: true }) + publishedAt: Date | null; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToOne( + () => ProductReview, + (productReview) => productReview.productReviews, + { onDelete: "RESTRICT", onUpdate: "RESTRICT" } + ) + @JoinColumn([{ name: "parentId", referencedColumnName: "id" }]) + parent: ProductReview; + + @OneToMany(() => ProductReview, (productReview) => productReview.parent) + productReviews: ProductReview[]; + + @ManyToOne(() => Product, (product) => product.productReviews, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "productId", referencedColumnName: "id" }]) + product: Product; +} diff --git a/examples/shopping-cart/entities/Tag.ts b/examples/shopping-cart/entities/Tag.ts new file mode 100644 index 0000000..4b5fd43 --- /dev/null +++ b/examples/shopping-cart/entities/Tag.ts @@ -0,0 +1,23 @@ +import { Column, Entity, ManyToMany, PrimaryGeneratedColumn } from "typeorm"; +import { Product } from "./Product"; + +@Entity("tag", { schema: "shop" }) +export class Tag { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("varchar", { name: "title", length: 75 }) + title: string; + + @Column("varchar", { name: "metaTitle", nullable: true, length: 100 }) + metaTitle: string | null; + + @Column("varchar", { name: "slug", length: 100 }) + slug: string; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToMany(() => Product, (product) => product.tags) + products: Product[]; +} diff --git a/examples/shopping-cart/entities/Transaction.ts b/examples/shopping-cart/entities/Transaction.ts new file mode 100644 index 0000000..add7be6 --- /dev/null +++ b/examples/shopping-cart/entities/Transaction.ts @@ -0,0 +1,59 @@ +import { + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, +} from "typeorm"; +import { Order } from "./Order"; +import { User } from "./User"; + +@Index("idx_transaction_user", ["userId"], {}) +@Index("idx_transaction_order", ["orderId"], {}) +@Entity("transaction", { schema: "shop" }) +export class Transaction { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("bigint", { name: "userId" }) + userId: string; + + @Column("bigint", { name: "orderId" }) + orderId: string; + + @Column("varchar", { name: "code", length: 100 }) + code: string; + + @Column("smallint", { name: "type", default: () => "'0'" }) + type: number; + + @Column("smallint", { name: "mode", default: () => "'0'" }) + mode: number; + + @Column("smallint", { name: "status", default: () => "'0'" }) + status: number; + + @Column("datetime", { name: "createdAt" }) + createdAt: Date; + + @Column("datetime", { name: "updatedAt", nullable: true }) + updatedAt: Date | null; + + @Column("text", { name: "content", nullable: true }) + content: string | null; + + @ManyToOne(() => Order, (order) => order.transactions, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "orderId", referencedColumnName: "id" }]) + order: Order; + + @ManyToOne(() => User, (user) => user.transactions, { + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + @JoinColumn([{ name: "userId", referencedColumnName: "id" }]) + user: User; +} diff --git a/examples/shopping-cart/entities/User.ts b/examples/shopping-cart/entities/User.ts new file mode 100644 index 0000000..cde7277 --- /dev/null +++ b/examples/shopping-cart/entities/User.ts @@ -0,0 +1,77 @@ +import { + Column, + Entity, + Index, + OneToMany, + PrimaryGeneratedColumn, +} from "typeorm"; +import { Cart } from "./Cart"; +import { Order } from "./Order"; +import { Product } from "./Product"; +import { Transaction } from "./Transaction"; + +@Index("uq_mobile", ["mobile"], { unique: true }) +@Index("uq_email", ["email"], { unique: true }) +@Entity("user", { schema: "shop" }) +export class User { + @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + id: string; + + @Column("varchar", { name: "firstName", nullable: true, length: 50 }) + firstName: string | null; + + @Column("varchar", { name: "middleName", nullable: true, length: 50 }) + middleName: string | null; + + @Column("varchar", { name: "lastName", nullable: true, length: 50 }) + lastName: string | null; + + @Column("varchar", { + name: "mobile", + nullable: true, + unique: true, + length: 15, + }) + mobile: string | null; + + @Column("varchar", { + name: "email", + nullable: true, + unique: true, + length: 50, + }) + email: string | null; + + @Column("varchar", { name: "passwordHash", length: 32 }) + passwordHash: string; + + @Column("tinyint", { name: "admin", width: 1, default: () => "'0'" }) + admin: boolean; + + @Column("tinyint", { name: "vendor", width: 1, default: () => "'0'" }) + vendor: boolean; + + @Column("datetime", { name: "registeredAt" }) + registeredAt: Date; + + @Column("datetime", { name: "lastLogin", nullable: true }) + lastLogin: Date | null; + + @Column("tinytext", { name: "intro", nullable: true }) + intro: string | null; + + @Column("text", { name: "profile", nullable: true }) + profile: string | null; + + @OneToMany(() => Cart, (cart) => cart.user) + carts: Cart[]; + + @OneToMany(() => Order, (order) => order.user) + orders: Order[]; + + @OneToMany(() => Product, (product) => product.user) + products: Product[]; + + @OneToMany(() => Transaction, (transaction) => transaction.user) + transactions: Transaction[]; +} diff --git a/examples/shopping-cart/ormconfig.json b/examples/shopping-cart/ormconfig.json new file mode 100644 index 0000000..87dba71 --- /dev/null +++ b/examples/shopping-cart/ormconfig.json @@ -0,0 +1,16 @@ +[ + { + "name": "default", + "type": "mysql", + "host": "localhost", + "port": 3306, + "username": "root", + "password": "password", + "database": "shop", + "schema": "", + "synchronize": false, + "entities": [ + "entities/*.js" + ] + } +] \ No newline at end of file diff --git a/examples/shopping-cart/package-lock.json b/examples/shopping-cart/package-lock.json new file mode 100644 index 0000000..ee2b816 --- /dev/null +++ b/examples/shopping-cart/package-lock.json @@ -0,0 +1,85 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "mysql": { + "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": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + } + }, + "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==" + }, + "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", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + } + } +} diff --git a/examples/shopping-cart/package.json b/examples/shopping-cart/package.json new file mode 100644 index 0000000..368bc6b --- /dev/null +++ b/examples/shopping-cart/package.json @@ -0,0 +1,12 @@ +{ + "scripts": { + "prebuild": "tsc", + "build": "../../bin/run ormconfig.json" + }, + "dependencies": { + "mysql": "^2.18.1" + }, + "devDependencies": { + "typescript": "^3.9.7" + } +} diff --git a/examples/shopping-cart/tsconfig.json b/examples/shopping-cart/tsconfig.json new file mode 100644 index 0000000..a79cf1d --- /dev/null +++ b/examples/shopping-cart/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "es2017", + "module": "commonjs", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "sourceMap": true + } +} \ No newline at end of file diff --git a/src/UmlBuilder.ts b/src/UmlBuilder.ts index fcccff0..0ad7991 100644 --- a/src/UmlBuilder.ts +++ b/src/UmlBuilder.ts @@ -15,7 +15,7 @@ interface ColumnDataTypeDefaults { export class UmlBuilder { /** - * Builds database uml and returns it. + * Builds database UML and returns it. * * @public * @param {Connection} connection A database connection. @@ -49,6 +49,7 @@ export class UmlBuilder { throw new Error( 'No entities have been found. Please, check your typeorm config to make sure you have configured it correctly.' ); } + let foreignKeys = ''; for ( let i = 0, len = entityMetadatas.length; i < len; i++ ) { const entity = entityMetadatas[i]; @@ -61,15 +62,20 @@ export class UmlBuilder { } uml += this.buildClass( entity, connection ); + foreignKeys += this.buildForeignKeys( entity ); } - uml += `@enduml\n`; + if ( foreignKeys.length > 0 ) { + uml += `\n${ foreignKeys }\n`; + } + + uml += '@enduml\n'; return uml; } /** - * Builds an uml class for an entity and returns it. + * Builds an UML class for an entity and returns it. * * @protected * @param {EntityMetadata} entity An entity metadata. @@ -83,23 +89,13 @@ export class UmlBuilder { uml += this.buildColumn( entity.columns[i], entity, connection ); } - uml += `}\n`; - - if ( entity.foreignKeys.length > 0 ) { - uml += '\n'; - - for ( let i = 0, len = entity.foreignKeys.length; i < len; i++ ) { - uml += this.buildForeignKeys( entity.foreignKeys[i], entity ); - } - - uml += '\n'; - } + uml += '}\n'; return uml; } /** - * Builds an uml column and returns it. + * Builds an UML column and returns it. * * @protected * @param {ColumnMetadata} column A column metadata. @@ -136,14 +132,32 @@ export class UmlBuilder { } /** - * Builds am uml connection string and returns it. + * Builds UML connection strings and returns it. + * + * @protected + * @param {EntityMetadata} entity An entity metadata. + */ + protected buildForeignKeys( entity: EntityMetadata ) { + let uml = ''; + + if ( entity.foreignKeys.length > 0 ) { + for ( let i = 0, len = entity.foreignKeys.length; i < len; i++ ) { + uml += this.buildForeignKey( entity.foreignKeys[i], entity ); + } + } + + return uml; + } + + /** + * Builds an UML connection string and returns it. * * @protected * @param {ForeignKeyMetadata} foreignKey A foreign key metadata. * @param {EntityMetadata} entity An entity metadata. * @returns {string} An uml connection string. */ - protected buildForeignKeys( foreignKey: ForeignKeyMetadata, entity: EntityMetadata ): string { + protected buildForeignKey( foreignKey: ForeignKeyMetadata, entity: EntityMetadata ): string { const zeroOrMore = '}o'; const oneOrMore = '}|'; const relationship = foreignKey.columns.some( ( column ) => ! column.isNullable ) ? oneOrMore : zeroOrMore; From 65af1e7a24203fd3fdbfe9cdf0638abdfcaa1d28 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 12:03:54 +0200 Subject: [PATCH 11/15] Fix failing test. --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 1acbd57..62a1e4b 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -52,4 +52,4 @@ jobs: working-directory: example run: test "$(../bin/run)" = "$EXPECTED" env: - EXPECTED: http://www.plantuml.com/plantuml/png/bP5BIyD054RNpg_uZ9kCMYH2Do4C3MAn6nSbYBiowTpQmSc3p1KIIl-xJL_KGaLdUU_Xd1bcv5at_5Ku8QuDBMn9O9qx2bk9kTFUeqMI8CpkRyRZT7Cab3gYzITrFPdagaqUSYMMrX0yKqCLTpNvtM1XoHalnCwCkMRwg9eE4YjnjIg8bvLPusvhWpMGCIQlMHX5ycHTwe9YlANJfvTq6ZuEXrAiZygwylm_7LjsvxwJBRKS8tj-pyuYi_tbBVdPx-_ewSc5-1uv27vYc-35Kd0RO31G2A9W6_WRUHWACQBIz9_z3G00 + EXPECTED: http://www.plantuml.com/plantuml/png/XP7DQiCm48Jl-nHRUh5eGqaX5sDCJ6beBZa4KteBShHjH6p9I1kmgVFkbVC7DMsYctPclXtOgMVfU5UL07UAFhKXhBVKHet0f4YRvAb8BmBBegHU8SEQMsmmIJ3A7-zdiomyWMaAiD6Aq3CvijpMv8-3YdXZbGVmMsrgwMI5PK3s3hGkQ017EgubqvTrBGhy1iI7GnlK2aMCyqKUZSSYZ8siACRtRFdobYsZvyb4mFw2gAtdw_5GlnpcmvGQZZ5__SW7iDMfb2Q_-hjVxveFbfoaS-2t71RyIzvter7N7PWtJUS_m9ICwk_u0m00 From 41b2d194c8feab4fb721718c58eeb964c20f8455 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 12:06:53 +0200 Subject: [PATCH 12/15] Updated changelog. --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0af6be..f401c99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,12 @@ # Changelog ## [Unreleased] - TBD -- Updated the Builder class to throw an error if no entities have been found. +- Added an example with a shopping cart database. +- Updated builder to throw an error if no entities have been found. +- Updated builder to use entities instead of classes. +- Updated builder to use entity relationships. - Fixed issues when the absolute path to the config file was used. +- Fixed issues with foreign keys when sometimes foreign keys were defined before referencing tables. ## [v1.2.1] (2020-06-18) - Fixed puml diagram downloading issue. From c6965d2cb0b2d033db4924edafb995fe18918328 Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 12:21:31 +0200 Subject: [PATCH 13/15] Added eslint to dev dependencies. --- .eslintrc.js | 35 + package-lock.json | 2755 +++++++++++++++++++++++++++++++++++++++++---- package.json | 20 + 3 files changed, 2560 insertions(+), 250 deletions(-) create mode 100644 .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..d9d6c33 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,35 @@ +exports.env = { + es2020: true, + node: true, + jest: true, +}; + +exports.parser = '@typescript-eslint/parser'; +exports.parserOptions = { + ecmaVersion: 11, + sourceType: 'module' +}; + +exports.extends = [ + 'standard', +]; + +exports.plugins = [ + '@typescript-eslint', +]; + +exports.rules = { + '@typescript-eslint/no-unused-vars': [ 'error' ], + 'array-bracket-spacing': [ 'error', 'always' ], + 'comma-dangle': [ 'error', { arrays: 'always-multiline', objects: 'always-multiline' } ], + 'indent': [ 'error', 'tab', { SwitchCase: 1 } ], + 'no-console': 'error', + 'no-tabs': 'off', + 'no-unused-vars': 'off', + 'no-useless-constructor': 'off', + 'padded-blocks': [ 'error', { classes: 'always' } ], + 'semi': [ 'error', 'always' ], + 'space-before-function-paren': [ 'error', { named: 'never' } ], + 'space-in-parens': [ 'error', 'always' ], + 'template-curly-spacing': [ 'error', 'always' ], +}; diff --git a/package-lock.json b/package-lock.json index d9d23a5..0890c47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,58 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@eslint/eslintrc": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, "@nodelib/fs.scandir": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", @@ -146,12 +198,178 @@ "integrity": "sha512-/5O7Fq6Vnv8L6ucmPjaWbVG1XkP4FO+w5glqfkIsq3Xw4oyNAdJddbnYodNDAfjVUvo/rrSCTom4kAND7T1o5Q==", "dev": true }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/node": { "version": "8.10.66", "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", "dev": true }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.7.0.tgz", + "integrity": "sha512-li9aiSVBBd7kU5VlQlT1AqP0uWGDK6JYKUQ9cVDnOg34VNnd9t4jr0Yqc/bKxJr/tDCPDaB4KzoSFN9fgVxe/Q==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.7.0", + "@typescript-eslint/scope-manager": "4.7.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.7.0.tgz", + "integrity": "sha512-cymzovXAiD4EF+YoHAB5Oh02MpnXjvyaOb+v+BdpY7lsJXZQN34oIETeUwVT2XfV9rSNpXaIcknDLfupO/tUoA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.7.0", + "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/typescript-estree": "4.7.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.7.0.tgz", + "integrity": "sha512-+meGV8bMP1sJHBI2AFq1GeTwofcGiur8LoIr6v+rEmD9knyCqDlrQcFHR0KDDfldHIFDU/enZ53fla6ReF4wRw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.7.0", + "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/typescript-estree": "4.7.0", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.7.0.tgz", + "integrity": "sha512-ILITvqwDJYbcDCROj6+Ob0oCKNg3SH46iWcNcTIT9B5aiVssoTYkhKjxOMNzR1F7WSJkik4zmuqve5MdnA0DyA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/visitor-keys": "4.7.0" + } + }, + "@typescript-eslint/types": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.7.0.tgz", + "integrity": "sha512-uLszFe0wExJc+I7q0Z/+BnP7wao/kzX0hB5vJn4LIgrfrMLgnB2UXoReV19lkJQS1a1mHWGGODSxnBx6JQC3Sg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.7.0.tgz", + "integrity": "sha512-5XZRQznD1MfUmxu1t8/j2Af4OxbA7EFU2rbo0No7meb46eHgGkSieFdfV6omiC/DGIBhH9H9gXn7okBbVOm8jw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/visitor-keys": "4.7.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.7.0.tgz", + "integrity": "sha512-aDJDWuCRsf1lXOtignlfiPODkzSxxop7D0rZ91L6ZuMlcMCSh0YyK+gAfo5zN/ih6WxMwhoXgJWC3cWQdaKC+A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.7.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "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==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -186,11 +404,38 @@ "sprintf-js": "~1.0.2" } }, + "array-includes": { + "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", + "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==" }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -236,6 +481,22 @@ "ieee754": "^1.1.13" } }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -252,6 +513,12 @@ "supports-color": "^5.3.0" } }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "clean-stack": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", @@ -267,6 +534,15 @@ } } }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, "cli-highlight": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz", @@ -351,6 +627,65 @@ } } }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "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 + }, + "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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -412,12 +747,68 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "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=", "dev": true }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -432,6 +823,27 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -440,6 +852,15 @@ "path-type": "^4.0.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dotenv": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", @@ -451,283 +872,1392 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "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", - "picomatch": "^2.2.1" + "once": "^1.4.0" } }, - "fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "requires": { - "reusify": "^1.0.4" + "ansi-colors": "^4.1.1" } }, - "figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "is-arrayish": "^0.2.1" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "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": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "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 + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "eslint-config-standard": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.1.tgz", + "integrity": "sha512-WBBiQQZdaPyL+4sPkGWhWrHCDtvJoU195B9j8yXE9uFQnX34gMXI5CeBRm95gx3PMEZPM5OpwET10hH4F4SxCA==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, "requires": { - "is-glob": "^4.0.1" + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } }, - "highlight.js": { - "version": "9.18.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz", - "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==", + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", "dev": true }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "eslint-plugin-standard": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", + "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", "dev": true }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } }, - "is-glob": { + "esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, "requires": { - "is-extglob": "^2.1.1" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "requires": { - "is-docker": "^2.0.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "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", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "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", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "requires": { + "reusify": "^1.0.4" + } + }, + "figlet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", + "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.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-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "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 + }, + "highlight.js": { + "version": "9.18.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz", + "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==", + "dev": true + }, + "hosted-git-info": { + "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 + }, + "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.3.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.0.tgz", + "integrity": "sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^7.0.0", + "find-versions": "^3.2.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "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 + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-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==", + "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.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "lint-staged": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.1.tgz", + "integrity": "sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "listr2": "^3.2.2", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "listr2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.2.2.tgz", + "integrity": "sha512-AajqcZEUikF2ioph6PfH3dIuxJclhr3i3kHgTOP0xeXdWQohrvJAAmqVcV43/GI987HFY/vzT73jYXoa4esDHg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.3", + "through": "^2.3.8" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, "dependencies": { - "universalify": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "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 + }, + "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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } } } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "merge2": { "version": "1.4.1", @@ -743,6 +2273,12 @@ "picomatch": "^2.0.5" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -752,6 +2288,12 @@ "brace-expansion": "^1.1.7" } }, + "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": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -774,12 +2316,89 @@ "thenify-all": "^1.0.0" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "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" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "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==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -789,6 +2408,35 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -804,62 +2452,287 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parent-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", + "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz", + "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==", + "dev": true, + "requires": { + "parse5": "^5.1.1" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "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 + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "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", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "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 + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "plantuml-encoder": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", + "integrity": "sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==" + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-require": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", - "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=", + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "parse5-htmlparser2-tree-adapter": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz", - "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==", + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "parse5": "^5.1.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "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==" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "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" + } + } + } }, - "plantuml-encoder": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", - "integrity": "sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==" + "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" + }, + "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 + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } }, "reflect-metadata": { "version": "0.1.13", @@ -867,6 +2740,12 @@ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "dev": true }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -879,6 +2758,32 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -898,6 +2803,15 @@ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -915,6 +2829,18 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "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 + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -931,17 +2857,87 @@ "safe-buffer": "^5.0.1" } }, + "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 + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -959,6 +2955,81 @@ } } }, + "string.prototype.trimend": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "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.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "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.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -967,6 +3038,24 @@ "ansi-regex": "^5.0.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -975,6 +3064,58 @@ "has-flag": "^3.0.0" } }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -993,6 +3134,12 @@ "thenify": ">= 3.1.0 < 4" } }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1001,11 +3148,47 @@ "is-number": "^7.0.0" } }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "typeorm": { "version": "0.2.29", "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.29.tgz", @@ -1092,12 +3275,52 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "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" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -1106,6 +3329,12 @@ "string-width": "^4.0.0" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -1145,6 +3374,26 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, "xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -1167,6 +3416,12 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + }, "yargonaut": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", diff --git a/package.json b/package.json index 9c1ab37..2c8c812 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,8 @@ "prebuild": "rimraf lib", "build": "tsc -b --force", "watch": "tsc --watch", + "format": "npm run lint --silent -- --fix", + "lint": "eslint . --ext .ts --ignore-pattern lib --ignore-pattern node_modules", "prepublish": "npm run build", "test": "echo \"Error: no test specified\" && exit 1", "typeorm-uml": "./bin/run" @@ -48,11 +50,29 @@ }, "devDependencies": { "@types/node": "^8.10.66", + "@typescript-eslint/eslint-plugin": "^4.7.0", + "@typescript-eslint/parser": "^4.7.0", + "eslint": "^7.13.0", + "eslint-config-standard": "^16.0.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.1.0", + "husky": "^4.3.0", + "lint-staged": "^10.5.1", "rimraf": "^3.0.2", "typeorm": "^0.2.29", "typescript": "^3.9.7" }, "peerDependencies": { "typeorm": "^0.2.0" + }, + "lint-staged": { + "*.ts": "eslint" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } } } From 669da3489ce908f81d884b8803236c9a80b7379d Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 12:21:45 +0200 Subject: [PATCH 14/15] Fix eslint issues. --- examples/shopping-cart/entities/Cart.ts | 62 +++---- examples/shopping-cart/entities/CartItem.ts | 97 +++++----- examples/shopping-cart/entities/Category.ts | 103 +++++------ examples/shopping-cart/entities/Order.ts | 163 ++++++++--------- examples/shopping-cart/entities/OrderItem.ts | 93 +++++----- examples/shopping-cart/entities/Product.ts | 165 +++++++++--------- .../shopping-cart/entities/ProductMeta.ts | 55 +++--- .../shopping-cart/entities/ProductReview.ts | 95 +++++----- examples/shopping-cart/entities/Tag.ts | 33 ++-- .../shopping-cart/entities/Transaction.ts | 93 +++++----- examples/shopping-cart/entities/User.ts | 119 +++++++------ src/TypeormUmlCommand.ts | 8 +- src/UmlBuilder.ts | 10 +- 13 files changed, 564 insertions(+), 532 deletions(-) diff --git a/examples/shopping-cart/entities/Cart.ts b/examples/shopping-cart/entities/Cart.ts index c9ecbb3..741253b 100644 --- a/examples/shopping-cart/entities/Cart.ts +++ b/examples/shopping-cart/entities/Cart.ts @@ -5,76 +5,78 @@ import { JoinColumn, ManyToOne, OneToMany, - PrimaryGeneratedColumn, -} from "typeorm"; + PrimaryGeneratedColumn +} from 'typeorm'; -import { User } from "./User"; -import { CartItem } from "./CartItem"; +import { User } from './User'; +import { CartItem } from './CartItem'; -@Index("idx_cart_user", ["userId"], {}) -@Entity("cart", { schema: "shop" }) +@Index( 'idx_cart_user', [ 'userId' ], {} ) +@Entity( 'cart', { schema: 'shop' } ) export class Cart { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) + + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) id: string; - @Column("bigint", { name: "userId", nullable: true }) + @Column( 'bigint', { name: 'userId', nullable: true } ) userId: string | null; - @Column("varchar", { name: "sessionId", length: 100 }) + @Column( 'varchar', { name: 'sessionId', length: 100 } ) sessionId: string; - @Column("varchar", { name: "token", length: 100 }) + @Column( 'varchar', { name: 'token', length: 100 } ) token: string; - @Column("smallint", { name: "status", default: () => "'0'" }) + @Column( 'smallint', { name: 'status', default: () => "'0'" } ) status: number; - @Column("varchar", { name: "firstName", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'firstName', nullable: true, length: 50 } ) firstName: string | null; - @Column("varchar", { name: "middleName", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'middleName', nullable: true, length: 50 } ) middleName: string | null; - @Column("varchar", { name: "lastName", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'lastName', nullable: true, length: 50 } ) lastName: string | null; - @Column("varchar", { name: "mobile", nullable: true, length: 15 }) + @Column( 'varchar', { name: 'mobile', nullable: true, length: 15 } ) mobile: string | null; - @Column("varchar", { name: "email", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'email', nullable: true, length: 50 } ) email: string | null; - @Column("varchar", { name: "line1", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'line1', nullable: true, length: 50 } ) line1: string | null; - @Column("varchar", { name: "line2", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'line2', nullable: true, length: 50 } ) line2: string | null; - @Column("varchar", { name: "city", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'city', nullable: true, length: 50 } ) city: string | null; - @Column("varchar", { name: "province", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'province', nullable: true, length: 50 } ) province: string | null; - @Column("varchar", { name: "country", nullable: true, length: 50 }) + @Column( 'varchar', { name: 'country', nullable: true, length: 50 } ) country: string | null; - @Column("datetime", { name: "createdAt" }) + @Column( 'datetime', { name: 'createdAt' } ) createdAt: Date; - @Column("datetime", { name: "updatedAt", nullable: true }) + @Column( 'datetime', { name: 'updatedAt', nullable: true } ) updatedAt: Date | null; - @Column("text", { name: "content", nullable: true }) + @Column( 'text', { name: 'content', nullable: true } ) content: string | null; - @ManyToOne(() => User, (user) => user.carts, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "userId", referencedColumnName: "id" }]) + @ManyToOne( () => User, ( user ) => user.carts, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'userId', referencedColumnName: 'id' } ] ) user: User; - @OneToMany(() => CartItem, (cartItem) => cartItem.cart) + @OneToMany( () => CartItem, ( cartItem ) => cartItem.cart ) cartItems: CartItem[]; + } diff --git a/examples/shopping-cart/entities/CartItem.ts b/examples/shopping-cart/entities/CartItem.ts index eea0c26..af44ed8 100644 --- a/examples/shopping-cart/entities/CartItem.ts +++ b/examples/shopping-cart/entities/CartItem.ts @@ -1,62 +1,65 @@ import { - Column, - Entity, - Index, - JoinColumn, - ManyToOne, - PrimaryGeneratedColumn, -} from "typeorm"; -import { Cart } from "./Cart"; -import { Product } from "./Product"; - -@Index("idx_cart_item_product", ["productId"], {}) -@Index("idx_cart_item_cart", ["cartId"], {}) -@Entity("cart_item", { schema: "shop" }) + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { Cart } from './Cart'; +import { Product } from './Product'; + +@Index( 'idx_cart_item_product', [ 'productId' ], {} ) +@Index( 'idx_cart_item_cart', [ 'cartId' ], {} ) +@Entity( 'cart_item', { schema: 'shop' } ) export class CartItem { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("bigint", { name: "productId" }) - productId: string; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; + + @Column( 'bigint', { name: 'productId' } ) + productId: string; + + @Column( 'bigint', { name: 'cartId' } ) + cartId: string; - @Column("bigint", { name: "cartId" }) - cartId: string; + @Column( 'varchar', { name: 'sku', length: 100 } ) + sku: string; - @Column("varchar", { name: "sku", length: 100 }) - sku: string; + @Column( 'float', { name: 'price', precision: 12, default: () => "'0'" } ) + price: number; - @Column("float", { name: "price", precision: 12, default: () => "'0'" }) - price: number; + @Column( 'float', { name: 'discount', precision: 12, default: () => "'0'" } ) + discount: number; - @Column("float", { name: "discount", precision: 12, default: () => "'0'" }) - discount: number; + @Column( 'smallint', { name: 'quantity', default: () => "'0'" } ) + quantity: number; - @Column("smallint", { name: "quantity", default: () => "'0'" }) - quantity: number; + @Column( 'tinyint', { name: 'active', width: 1, default: () => "'0'" } ) + active: boolean; - @Column("tinyint", { name: "active", width: 1, default: () => "'0'" }) - active: boolean; + @Column( 'datetime', { name: 'createdAt' } ) + createdAt: Date; - @Column("datetime", { name: "createdAt" }) - createdAt: Date; + @Column( 'datetime', { name: 'updatedAt', nullable: true } ) + updatedAt: Date | null; - @Column("datetime", { name: "updatedAt", nullable: true }) - updatedAt: Date | null; + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; - @Column("text", { name: "content", nullable: true }) - content: string | null; + @ManyToOne( () => Cart, ( cart ) => cart.cartItems, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'cartId', referencedColumnName: 'id' } ] ) + cart: Cart; - @ManyToOne(() => Cart, (cart) => cart.cartItems, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "cartId", referencedColumnName: "id" }]) - cart: Cart; + @ManyToOne( () => Product, ( product ) => product.cartItems, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'productId', referencedColumnName: 'id' } ] ) + product: Product; - @ManyToOne(() => Product, (product) => product.cartItems, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "productId", referencedColumnName: "id" }]) - product: Product; } diff --git a/examples/shopping-cart/entities/Category.ts b/examples/shopping-cart/entities/Category.ts index 5c0ccaf..d40f6ef 100644 --- a/examples/shopping-cart/entities/Category.ts +++ b/examples/shopping-cart/entities/Category.ts @@ -1,53 +1,56 @@ import { - Column, - Entity, - Index, - JoinColumn, - JoinTable, - ManyToMany, - ManyToOne, - OneToMany, - PrimaryGeneratedColumn, -} from "typeorm"; -import { Product } from "./Product"; - -@Index("idx_category_parent", ["parentId"], {}) -@Entity("category", { schema: "shop" }) + Column, + Entity, + Index, + JoinColumn, + JoinTable, + ManyToMany, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { Product } from './Product'; + +@Index( 'idx_category_parent', [ 'parentId' ], {} ) +@Entity( 'category', { schema: 'shop' } ) export class Category { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - - @Column("bigint", { name: "parentId", nullable: true }) - parentId: string | null; - - @Column("varchar", { name: "title", length: 75 }) - title: string; - - @Column("varchar", { name: "metaTitle", nullable: true, length: 100 }) - metaTitle: string | null; - - @Column("varchar", { name: "slug", length: 100 }) - slug: string; - - @Column("text", { name: "content", nullable: true }) - content: string | null; - - @ManyToOne(() => Category, (category) => category.categories, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "parentId", referencedColumnName: "id" }]) - parent: Category; - - @OneToMany(() => Category, (category) => category.parent) - categories: Category[]; - - @ManyToMany(() => Product, (product) => product.categories) - @JoinTable({ - name: "product_category", - joinColumns: [{ name: "categoryId", referencedColumnName: "id" }], - inverseJoinColumns: [{ name: "productId", referencedColumnName: "id" }], - schema: "shop", - }) - products: Product[]; + + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; + + @Column( 'bigint', { name: 'parentId', nullable: true } ) + parentId: string | null; + + @Column( 'varchar', { name: 'title', length: 75 } ) + title: string; + + @Column( 'varchar', { name: 'metaTitle', nullable: true, length: 100 } ) + metaTitle: string | null; + + @Column( 'varchar', { name: 'slug', length: 100 } ) + slug: string; + + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; + + @ManyToOne( () => Category, ( category ) => category.categories, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'parentId', referencedColumnName: 'id' } ] ) + parent: Category; + + @OneToMany( () => Category, ( category ) => category.parent ) + categories: Category[]; + + @ManyToMany( () => Product, ( product ) => product.categories ) + @JoinTable( { + name: 'product_category', + joinColumns: [ { name: 'categoryId', referencedColumnName: 'id' } ], + inverseJoinColumns: [ { name: 'productId', referencedColumnName: 'id' } ], + schema: 'shop', + } ) + products: Product[]; + } diff --git a/examples/shopping-cart/entities/Order.ts b/examples/shopping-cart/entities/Order.ts index 9f98508..554dcf2 100644 --- a/examples/shopping-cart/entities/Order.ts +++ b/examples/shopping-cart/entities/Order.ts @@ -1,111 +1,114 @@ import { - Column, - Entity, - Index, - JoinColumn, - ManyToOne, - OneToMany, - PrimaryGeneratedColumn, -} from "typeorm"; -import { User } from "./User"; -import { OrderItem } from "./OrderItem"; -import { Transaction } from "./Transaction"; - -@Index("idx_order_user", ["userId"], {}) -@Entity("order", { schema: "shop" }) + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { User } from './User'; +import { OrderItem } from './OrderItem'; +import { Transaction } from './Transaction'; + +@Index( 'idx_order_user', [ 'userId' ], {} ) +@Entity( 'order', { schema: 'shop' } ) export class Order { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("bigint", { name: "userId", nullable: true }) - userId: string | null; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; - @Column("varchar", { name: "sessionId", length: 100 }) - sessionId: string; + @Column( 'bigint', { name: 'userId', nullable: true } ) + userId: string | null; - @Column("varchar", { name: "token", length: 100 }) - token: string; + @Column( 'varchar', { name: 'sessionId', length: 100 } ) + sessionId: string; - @Column("smallint", { name: "status", default: () => "'0'" }) - status: number; + @Column( 'varchar', { name: 'token', length: 100 } ) + token: string; - @Column("float", { name: "subTotal", precision: 12, default: () => "'0'" }) - subTotal: number; + @Column( 'smallint', { name: 'status', default: () => "'0'" } ) + status: number; - @Column("float", { - name: "itemDiscount", - precision: 12, - default: () => "'0'", - }) - itemDiscount: number; + @Column( 'float', { name: 'subTotal', precision: 12, default: () => "'0'" } ) + subTotal: number; - @Column("float", { name: "tax", precision: 12, default: () => "'0'" }) - tax: number; + @Column( 'float', { + name: 'itemDiscount', + precision: 12, + default: () => "'0'", + } ) + itemDiscount: number; - @Column("float", { name: "shipping", precision: 12, default: () => "'0'" }) - shipping: number; + @Column( 'float', { name: 'tax', precision: 12, default: () => "'0'" } ) + tax: number; - @Column("float", { name: "total", precision: 12, default: () => "'0'" }) - total: number; + @Column( 'float', { name: 'shipping', precision: 12, default: () => "'0'" } ) + shipping: number; - @Column("varchar", { name: "promo", nullable: true, length: 50 }) - promo: string | null; + @Column( 'float', { name: 'total', precision: 12, default: () => "'0'" } ) + total: number; - @Column("float", { name: "discount", precision: 12, default: () => "'0'" }) - discount: number; + @Column( 'varchar', { name: 'promo', nullable: true, length: 50 } ) + promo: string | null; - @Column("float", { name: "grandTotal", precision: 12, default: () => "'0'" }) - grandTotal: number; + @Column( 'float', { name: 'discount', precision: 12, default: () => "'0'" } ) + discount: number; - @Column("varchar", { name: "firstName", nullable: true, length: 50 }) - firstName: string | null; + @Column( 'float', { name: 'grandTotal', precision: 12, default: () => "'0'" } ) + grandTotal: number; - @Column("varchar", { name: "middleName", nullable: true, length: 50 }) - middleName: string | null; + @Column( 'varchar', { name: 'firstName', nullable: true, length: 50 } ) + firstName: string | null; - @Column("varchar", { name: "lastName", nullable: true, length: 50 }) - lastName: string | null; + @Column( 'varchar', { name: 'middleName', nullable: true, length: 50 } ) + middleName: string | null; - @Column("varchar", { name: "mobile", nullable: true, length: 15 }) - mobile: string | null; + @Column( 'varchar', { name: 'lastName', nullable: true, length: 50 } ) + lastName: string | null; - @Column("varchar", { name: "email", nullable: true, length: 50 }) - email: string | null; + @Column( 'varchar', { name: 'mobile', nullable: true, length: 15 } ) + mobile: string | null; - @Column("varchar", { name: "line1", nullable: true, length: 50 }) - line1: string | null; + @Column( 'varchar', { name: 'email', nullable: true, length: 50 } ) + email: string | null; - @Column("varchar", { name: "line2", nullable: true, length: 50 }) - line2: string | null; + @Column( 'varchar', { name: 'line1', nullable: true, length: 50 } ) + line1: string | null; - @Column("varchar", { name: "city", nullable: true, length: 50 }) - city: string | null; + @Column( 'varchar', { name: 'line2', nullable: true, length: 50 } ) + line2: string | null; - @Column("varchar", { name: "province", nullable: true, length: 50 }) - province: string | null; + @Column( 'varchar', { name: 'city', nullable: true, length: 50 } ) + city: string | null; - @Column("varchar", { name: "country", nullable: true, length: 50 }) - country: string | null; + @Column( 'varchar', { name: 'province', nullable: true, length: 50 } ) + province: string | null; - @Column("datetime", { name: "createdAt" }) - createdAt: Date; + @Column( 'varchar', { name: 'country', nullable: true, length: 50 } ) + country: string | null; - @Column("datetime", { name: "updatedAt", nullable: true }) - updatedAt: Date | null; + @Column( 'datetime', { name: 'createdAt' } ) + createdAt: Date; - @Column("text", { name: "content", nullable: true }) - content: string | null; + @Column( 'datetime', { name: 'updatedAt', nullable: true } ) + updatedAt: Date | null; - @ManyToOne(() => User, (user) => user.orders, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "userId", referencedColumnName: "id" }]) - user: User; + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; - @OneToMany(() => OrderItem, (orderItem) => orderItem.order) - orderItems: OrderItem[]; + @ManyToOne( () => User, ( user ) => user.orders, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'userId', referencedColumnName: 'id' } ] ) + user: User; + + @OneToMany( () => OrderItem, ( orderItem ) => orderItem.order ) + orderItems: OrderItem[]; + + @OneToMany( () => Transaction, ( transaction ) => transaction.order ) + transactions: Transaction[]; - @OneToMany(() => Transaction, (transaction) => transaction.order) - transactions: Transaction[]; } diff --git a/examples/shopping-cart/entities/OrderItem.ts b/examples/shopping-cart/entities/OrderItem.ts index bc0bdda..a79c1a5 100644 --- a/examples/shopping-cart/entities/OrderItem.ts +++ b/examples/shopping-cart/entities/OrderItem.ts @@ -1,59 +1,62 @@ import { - Column, - Entity, - Index, - JoinColumn, - ManyToOne, - PrimaryGeneratedColumn, -} from "typeorm"; -import { Order } from "./Order"; -import { Product } from "./Product"; - -@Index("idx_order_item_product", ["productId"], {}) -@Index("idx_order_item_order", ["orderId"], {}) -@Entity("order_item", { schema: "shop" }) + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { Order } from './Order'; +import { Product } from './Product'; + +@Index( 'idx_order_item_product', [ 'productId' ], {} ) +@Index( 'idx_order_item_order', [ 'orderId' ], {} ) +@Entity( 'order_item', { schema: 'shop' } ) export class OrderItem { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("bigint", { name: "productId" }) - productId: string; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; - @Column("bigint", { name: "orderId" }) - orderId: string; + @Column( 'bigint', { name: 'productId' } ) + productId: string; - @Column("varchar", { name: "sku", length: 100 }) - sku: string; + @Column( 'bigint', { name: 'orderId' } ) + orderId: string; - @Column("float", { name: "price", precision: 12, default: () => "'0'" }) - price: number; + @Column( 'varchar', { name: 'sku', length: 100 } ) + sku: string; - @Column("float", { name: "discount", precision: 12, default: () => "'0'" }) - discount: number; + @Column( 'float', { name: 'price', precision: 12, default: () => "'0'" } ) + price: number; - @Column("smallint", { name: "quantity", default: () => "'0'" }) - quantity: number; + @Column( 'float', { name: 'discount', precision: 12, default: () => "'0'" } ) + discount: number; - @Column("datetime", { name: "createdAt" }) - createdAt: Date; + @Column( 'smallint', { name: 'quantity', default: () => "'0'" } ) + quantity: number; - @Column("datetime", { name: "updatedAt", nullable: true }) - updatedAt: Date | null; + @Column( 'datetime', { name: 'createdAt' } ) + createdAt: Date; - @Column("text", { name: "content", nullable: true }) - content: string | null; + @Column( 'datetime', { name: 'updatedAt', nullable: true } ) + updatedAt: Date | null; - @ManyToOne(() => Order, (order) => order.orderItems, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "orderId", referencedColumnName: "id" }]) - order: Order; + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; + + @ManyToOne( () => Order, ( order ) => order.orderItems, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'orderId', referencedColumnName: 'id' } ] ) + order: Order; + + @ManyToOne( () => Product, ( product ) => product.orderItems, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'productId', referencedColumnName: 'id' } ] ) + product: Product; - @ManyToOne(() => Product, (product) => product.orderItems, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "productId", referencedColumnName: "id" }]) - product: Product; } diff --git a/examples/shopping-cart/entities/Product.ts b/examples/shopping-cart/entities/Product.ts index 0c3521b..d5d7758 100644 --- a/examples/shopping-cart/entities/Product.ts +++ b/examples/shopping-cart/entities/Product.ts @@ -1,108 +1,111 @@ import { - Column, - Entity, - Index, - JoinColumn, - JoinTable, - ManyToMany, - ManyToOne, - OneToMany, - PrimaryGeneratedColumn, -} from "typeorm"; -import { CartItem } from "./CartItem"; -import { OrderItem } from "./OrderItem"; -import { User } from "./User"; -import { Category } from "./Category"; -import { ProductMeta } from "./ProductMeta"; -import { ProductReview } from "./ProductReview"; -import { Tag } from "./Tag"; - -@Index("uq_slug", ["slug"], { unique: true }) -@Index("idx_product_user", ["userId"], {}) -@Entity("product", { schema: "shop" }) + Column, + Entity, + Index, + JoinColumn, + JoinTable, + ManyToMany, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { CartItem } from './CartItem'; +import { OrderItem } from './OrderItem'; +import { User } from './User'; +import { Category } from './Category'; +import { ProductMeta } from './ProductMeta'; +import { ProductReview } from './ProductReview'; +import { Tag } from './Tag'; + +@Index( 'uq_slug', [ 'slug' ], { unique: true } ) +@Index( 'idx_product_user', [ 'userId' ], {} ) +@Entity( 'product', { schema: 'shop' } ) export class Product { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("bigint", { name: "userId" }) - userId: string; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; - @Column("varchar", { name: "title", length: 75 }) - title: string; + @Column( 'bigint', { name: 'userId' } ) + userId: string; - @Column("varchar", { name: "metaTitle", nullable: true, length: 100 }) - metaTitle: string | null; + @Column( 'varchar', { name: 'title', length: 75 } ) + title: string; - @Column("varchar", { name: "slug", unique: true, length: 100 }) - slug: string; + @Column( 'varchar', { name: 'metaTitle', nullable: true, length: 100 } ) + metaTitle: string | null; - @Column("tinytext", { name: "summary", nullable: true }) - summary: string | null; + @Column( 'varchar', { name: 'slug', unique: true, length: 100 } ) + slug: string; - @Column("smallint", { name: "type", default: () => "'0'" }) - type: number; + @Column( 'tinytext', { name: 'summary', nullable: true } ) + summary: string | null; - @Column("varchar", { name: "sku", length: 100 }) - sku: string; + @Column( 'smallint', { name: 'type', default: () => "'0'" } ) + type: number; - @Column("float", { name: "price", precision: 12, default: () => "'0'" }) - price: number; + @Column( 'varchar', { name: 'sku', length: 100 } ) + sku: string; - @Column("float", { name: "discount", precision: 12, default: () => "'0'" }) - discount: number; + @Column( 'float', { name: 'price', precision: 12, default: () => "'0'" } ) + price: number; - @Column("smallint", { name: "quantity", default: () => "'0'" }) - quantity: number; + @Column( 'float', { name: 'discount', precision: 12, default: () => "'0'" } ) + discount: number; - @Column("tinyint", { name: "shop", width: 1, default: () => "'0'" }) - shop: boolean; + @Column( 'smallint', { name: 'quantity', default: () => "'0'" } ) + quantity: number; - @Column("datetime", { name: "createdAt" }) - createdAt: Date; + @Column( 'tinyint', { name: 'shop', width: 1, default: () => "'0'" } ) + shop: boolean; - @Column("datetime", { name: "updatedAt", nullable: true }) - updatedAt: Date | null; + @Column( 'datetime', { name: 'createdAt' } ) + createdAt: Date; - @Column("datetime", { name: "publishedAt", nullable: true }) - publishedAt: Date | null; + @Column( 'datetime', { name: 'updatedAt', nullable: true } ) + updatedAt: Date | null; - @Column("datetime", { name: "startsAt", nullable: true }) - startsAt: Date | null; + @Column( 'datetime', { name: 'publishedAt', nullable: true } ) + publishedAt: Date | null; - @Column("datetime", { name: "endsAt", nullable: true }) - endsAt: Date | null; + @Column( 'datetime', { name: 'startsAt', nullable: true } ) + startsAt: Date | null; - @Column("text", { name: "content", nullable: true }) - content: string | null; + @Column( 'datetime', { name: 'endsAt', nullable: true } ) + endsAt: Date | null; - @OneToMany(() => CartItem, (cartItem) => cartItem.product) - cartItems: CartItem[]; + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; - @OneToMany(() => OrderItem, (orderItem) => orderItem.product) - orderItems: OrderItem[]; + @OneToMany( () => CartItem, ( cartItem ) => cartItem.product ) + cartItems: CartItem[]; - @ManyToOne(() => User, (user) => user.products, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "userId", referencedColumnName: "id" }]) - user: User; + @OneToMany( () => OrderItem, ( orderItem ) => orderItem.product ) + orderItems: OrderItem[]; - @ManyToMany(() => Category, (category) => category.products) - categories: Category[]; + @ManyToOne( () => User, ( user ) => user.products, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'userId', referencedColumnName: 'id' } ] ) + user: User; - @OneToMany(() => ProductMeta, (productMeta) => productMeta.product) - productMetas: ProductMeta[]; + @ManyToMany( () => Category, ( category ) => category.products ) + categories: Category[]; - @OneToMany(() => ProductReview, (productReview) => productReview.product) - productReviews: ProductReview[]; + @OneToMany( () => ProductMeta, ( productMeta ) => productMeta.product ) + productMetas: ProductMeta[]; + + @OneToMany( () => ProductReview, ( productReview ) => productReview.product ) + productReviews: ProductReview[]; + + @ManyToMany( () => Tag, ( tag ) => tag.products ) + @JoinTable( { + name: 'product_tag', + joinColumns: [ { name: 'productId', referencedColumnName: 'id' } ], + inverseJoinColumns: [ { name: 'tagId', referencedColumnName: 'id' } ], + schema: 'shop', + } ) + tags: Tag[]; - @ManyToMany(() => Tag, (tag) => tag.products) - @JoinTable({ - name: "product_tag", - joinColumns: [{ name: "productId", referencedColumnName: "id" }], - inverseJoinColumns: [{ name: "tagId", referencedColumnName: "id" }], - schema: "shop", - }) - tags: Tag[]; } diff --git a/examples/shopping-cart/entities/ProductMeta.ts b/examples/shopping-cart/entities/ProductMeta.ts index f94cb75..d22118e 100644 --- a/examples/shopping-cart/entities/ProductMeta.ts +++ b/examples/shopping-cart/entities/ProductMeta.ts @@ -1,33 +1,36 @@ import { - Column, - Entity, - Index, - JoinColumn, - ManyToOne, - PrimaryGeneratedColumn, -} from "typeorm"; -import { Product } from "./Product"; - -@Index("uq_product_meta", ["productId", "key"], { unique: true }) -@Index("idx_meta_product", ["productId"], {}) -@Entity("product_meta", { schema: "shop" }) + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { Product } from './Product'; + +@Index( 'uq_product_meta', [ 'productId', 'key' ], { unique: true } ) +@Index( 'idx_meta_product', [ 'productId' ], {} ) +@Entity( 'product_meta', { schema: 'shop' } ) export class ProductMeta { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("bigint", { name: "productId" }) - productId: string; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; + + @Column( 'bigint', { name: 'productId' } ) + productId: string; + + @Column( 'varchar', { name: 'key', length: 50 } ) + key: string; - @Column("varchar", { name: "key", length: 50 }) - key: string; + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; - @Column("text", { name: "content", nullable: true }) - content: string | null; + @ManyToOne( () => Product, ( product ) => product.productMetas, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'productId', referencedColumnName: 'id' } ] ) + product: Product; - @ManyToOne(() => Product, (product) => product.productMetas, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "productId", referencedColumnName: "id" }]) - product: Product; } diff --git a/examples/shopping-cart/entities/ProductReview.ts b/examples/shopping-cart/entities/ProductReview.ts index 342b2e4..6370981 100644 --- a/examples/shopping-cart/entities/ProductReview.ts +++ b/examples/shopping-cart/entities/ProductReview.ts @@ -1,60 +1,63 @@ import { - Column, - Entity, - Index, - JoinColumn, - ManyToOne, - OneToMany, - PrimaryGeneratedColumn, -} from "typeorm"; -import { Product } from "./Product"; - -@Index("idx_review_product", ["productId"], {}) -@Index("idx_review_parent", ["parentId"], {}) -@Entity("product_review", { schema: "shop" }) + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { Product } from './Product'; + +@Index( 'idx_review_product', [ 'productId' ], {} ) +@Index( 'idx_review_parent', [ 'parentId' ], {} ) +@Entity( 'product_review', { schema: 'shop' } ) export class ProductReview { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("bigint", { name: "productId" }) - productId: string; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; - @Column("bigint", { name: "parentId", nullable: true }) - parentId: string | null; + @Column( 'bigint', { name: 'productId' } ) + productId: string; - @Column("varchar", { name: "title", length: 100 }) - title: string; + @Column( 'bigint', { name: 'parentId', nullable: true } ) + parentId: string | null; - @Column("smallint", { name: "rating", default: () => "'0'" }) - rating: number; + @Column( 'varchar', { name: 'title', length: 100 } ) + title: string; - @Column("tinyint", { name: "published", width: 1, default: () => "'0'" }) - published: boolean; + @Column( 'smallint', { name: 'rating', default: () => "'0'" } ) + rating: number; - @Column("datetime", { name: "createdAt" }) - createdAt: Date; + @Column( 'tinyint', { name: 'published', width: 1, default: () => "'0'" } ) + published: boolean; - @Column("datetime", { name: "publishedAt", nullable: true }) - publishedAt: Date | null; + @Column( 'datetime', { name: 'createdAt' } ) + createdAt: Date; - @Column("text", { name: "content", nullable: true }) - content: string | null; + @Column( 'datetime', { name: 'publishedAt', nullable: true } ) + publishedAt: Date | null; - @ManyToOne( - () => ProductReview, - (productReview) => productReview.productReviews, - { onDelete: "RESTRICT", onUpdate: "RESTRICT" } - ) - @JoinColumn([{ name: "parentId", referencedColumnName: "id" }]) - parent: ProductReview; + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; - @OneToMany(() => ProductReview, (productReview) => productReview.parent) - productReviews: ProductReview[]; + @ManyToOne( + () => ProductReview, + ( productReview ) => productReview.productReviews, + { onDelete: 'RESTRICT', onUpdate: 'RESTRICT' } + ) + @JoinColumn( [ { name: 'parentId', referencedColumnName: 'id' } ] ) + parent: ProductReview; + + @OneToMany( () => ProductReview, ( productReview ) => productReview.parent ) + productReviews: ProductReview[]; + + @ManyToOne( () => Product, ( product ) => product.productReviews, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'productId', referencedColumnName: 'id' } ] ) + product: Product; - @ManyToOne(() => Product, (product) => product.productReviews, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "productId", referencedColumnName: "id" }]) - product: Product; } diff --git a/examples/shopping-cart/entities/Tag.ts b/examples/shopping-cart/entities/Tag.ts index 4b5fd43..ca65165 100644 --- a/examples/shopping-cart/entities/Tag.ts +++ b/examples/shopping-cart/entities/Tag.ts @@ -1,23 +1,26 @@ -import { Column, Entity, ManyToMany, PrimaryGeneratedColumn } from "typeorm"; -import { Product } from "./Product"; +import { Column, Entity, ManyToMany, PrimaryGeneratedColumn } from 'typeorm'; -@Entity("tag", { schema: "shop" }) +import { Product } from './Product'; + +@Entity( 'tag', { schema: 'shop' } ) export class Tag { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("varchar", { name: "title", length: 75 }) - title: string; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; + + @Column( 'varchar', { name: 'title', length: 75 } ) + title: string; + + @Column( 'varchar', { name: 'metaTitle', nullable: true, length: 100 } ) + metaTitle: string | null; - @Column("varchar", { name: "metaTitle", nullable: true, length: 100 }) - metaTitle: string | null; + @Column( 'varchar', { name: 'slug', length: 100 } ) + slug: string; - @Column("varchar", { name: "slug", length: 100 }) - slug: string; + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; - @Column("text", { name: "content", nullable: true }) - content: string | null; + @ManyToMany( () => Product, ( product ) => product.tags ) + products: Product[]; - @ManyToMany(() => Product, (product) => product.tags) - products: Product[]; } diff --git a/examples/shopping-cart/entities/Transaction.ts b/examples/shopping-cart/entities/Transaction.ts index add7be6..85e10fa 100644 --- a/examples/shopping-cart/entities/Transaction.ts +++ b/examples/shopping-cart/entities/Transaction.ts @@ -1,59 +1,62 @@ import { - Column, - Entity, - Index, - JoinColumn, - ManyToOne, - PrimaryGeneratedColumn, -} from "typeorm"; -import { Order } from "./Order"; -import { User } from "./User"; - -@Index("idx_transaction_user", ["userId"], {}) -@Index("idx_transaction_order", ["orderId"], {}) -@Entity("transaction", { schema: "shop" }) + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { Order } from './Order'; +import { User } from './User'; + +@Index( 'idx_transaction_user', [ 'userId' ], {} ) +@Index( 'idx_transaction_order', [ 'orderId' ], {} ) +@Entity( 'transaction', { schema: 'shop' } ) export class Transaction { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("bigint", { name: "userId" }) - userId: string; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; - @Column("bigint", { name: "orderId" }) - orderId: string; + @Column( 'bigint', { name: 'userId' } ) + userId: string; - @Column("varchar", { name: "code", length: 100 }) - code: string; + @Column( 'bigint', { name: 'orderId' } ) + orderId: string; - @Column("smallint", { name: "type", default: () => "'0'" }) - type: number; + @Column( 'varchar', { name: 'code', length: 100 } ) + code: string; - @Column("smallint", { name: "mode", default: () => "'0'" }) - mode: number; + @Column( 'smallint', { name: 'type', default: () => "'0'" } ) + type: number; - @Column("smallint", { name: "status", default: () => "'0'" }) - status: number; + @Column( 'smallint', { name: 'mode', default: () => "'0'" } ) + mode: number; - @Column("datetime", { name: "createdAt" }) - createdAt: Date; + @Column( 'smallint', { name: 'status', default: () => "'0'" } ) + status: number; - @Column("datetime", { name: "updatedAt", nullable: true }) - updatedAt: Date | null; + @Column( 'datetime', { name: 'createdAt' } ) + createdAt: Date; - @Column("text", { name: "content", nullable: true }) - content: string | null; + @Column( 'datetime', { name: 'updatedAt', nullable: true } ) + updatedAt: Date | null; - @ManyToOne(() => Order, (order) => order.transactions, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "orderId", referencedColumnName: "id" }]) - order: Order; + @Column( 'text', { name: 'content', nullable: true } ) + content: string | null; + + @ManyToOne( () => Order, ( order ) => order.transactions, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'orderId', referencedColumnName: 'id' } ] ) + order: Order; + + @ManyToOne( () => User, ( user ) => user.transactions, { + onDelete: 'RESTRICT', + onUpdate: 'RESTRICT', + } ) + @JoinColumn( [ { name: 'userId', referencedColumnName: 'id' } ] ) + user: User; - @ManyToOne(() => User, (user) => user.transactions, { - onDelete: "RESTRICT", - onUpdate: "RESTRICT", - }) - @JoinColumn([{ name: "userId", referencedColumnName: "id" }]) - user: User; } diff --git a/examples/shopping-cart/entities/User.ts b/examples/shopping-cart/entities/User.ts index cde7277..4dca8fb 100644 --- a/examples/shopping-cart/entities/User.ts +++ b/examples/shopping-cart/entities/User.ts @@ -1,77 +1,80 @@ import { - Column, - Entity, - Index, - OneToMany, - PrimaryGeneratedColumn, -} from "typeorm"; -import { Cart } from "./Cart"; -import { Order } from "./Order"; -import { Product } from "./Product"; -import { Transaction } from "./Transaction"; - -@Index("uq_mobile", ["mobile"], { unique: true }) -@Index("uq_email", ["email"], { unique: true }) -@Entity("user", { schema: "shop" }) + Column, + Entity, + Index, + OneToMany, + PrimaryGeneratedColumn +} from 'typeorm'; + +import { Cart } from './Cart'; +import { Order } from './Order'; +import { Product } from './Product'; +import { Transaction } from './Transaction'; + +@Index( 'uq_mobile', [ 'mobile' ], { unique: true } ) +@Index( 'uq_email', [ 'email' ], { unique: true } ) +@Entity( 'user', { schema: 'shop' } ) export class User { - @PrimaryGeneratedColumn({ type: "bigint", name: "id" }) - id: string; - @Column("varchar", { name: "firstName", nullable: true, length: 50 }) - firstName: string | null; + @PrimaryGeneratedColumn( { type: 'bigint', name: 'id' } ) + id: string; - @Column("varchar", { name: "middleName", nullable: true, length: 50 }) - middleName: string | null; + @Column( 'varchar', { name: 'firstName', nullable: true, length: 50 } ) + firstName: string | null; - @Column("varchar", { name: "lastName", nullable: true, length: 50 }) - lastName: string | null; + @Column( 'varchar', { name: 'middleName', nullable: true, length: 50 } ) + middleName: string | null; - @Column("varchar", { - name: "mobile", - nullable: true, - unique: true, - length: 15, - }) - mobile: string | null; + @Column( 'varchar', { name: 'lastName', nullable: true, length: 50 } ) + lastName: string | null; - @Column("varchar", { - name: "email", - nullable: true, - unique: true, - length: 50, - }) - email: string | null; + @Column( 'varchar', { + name: 'mobile', + nullable: true, + unique: true, + length: 15, + } ) + mobile: string | null; - @Column("varchar", { name: "passwordHash", length: 32 }) - passwordHash: string; + @Column( 'varchar', { + name: 'email', + nullable: true, + unique: true, + length: 50, + } ) + email: string | null; - @Column("tinyint", { name: "admin", width: 1, default: () => "'0'" }) - admin: boolean; + @Column( 'varchar', { name: 'passwordHash', length: 32 } ) + passwordHash: string; - @Column("tinyint", { name: "vendor", width: 1, default: () => "'0'" }) - vendor: boolean; + @Column( 'tinyint', { name: 'admin', width: 1, default: () => "'0'" } ) + admin: boolean; - @Column("datetime", { name: "registeredAt" }) - registeredAt: Date; + @Column( 'tinyint', { name: 'vendor', width: 1, default: () => "'0'" } ) + vendor: boolean; - @Column("datetime", { name: "lastLogin", nullable: true }) - lastLogin: Date | null; + @Column( 'datetime', { name: 'registeredAt' } ) + registeredAt: Date; - @Column("tinytext", { name: "intro", nullable: true }) - intro: string | null; + @Column( 'datetime', { name: 'lastLogin', nullable: true } ) + lastLogin: Date | null; - @Column("text", { name: "profile", nullable: true }) - profile: string | null; + @Column( 'tinytext', { name: 'intro', nullable: true } ) + intro: string | null; - @OneToMany(() => Cart, (cart) => cart.user) - carts: Cart[]; + @Column( 'text', { name: 'profile', nullable: true } ) + profile: string | null; - @OneToMany(() => Order, (order) => order.user) - orders: Order[]; + @OneToMany( () => Cart, ( cart ) => cart.user ) + carts: Cart[]; - @OneToMany(() => Product, (product) => product.user) - products: Product[]; + @OneToMany( () => Order, ( order ) => order.user ) + orders: Order[]; + + @OneToMany( () => Product, ( product ) => product.user ) + products: Product[]; + + @OneToMany( () => Transaction, ( transaction ) => transaction.user ) + transactions: Transaction[]; - @OneToMany(() => Transaction, (transaction) => transaction.user) - transactions: Transaction[]; } diff --git a/src/TypeormUmlCommand.ts b/src/TypeormUmlCommand.ts index a30e07f..d133879 100644 --- a/src/TypeormUmlCommand.ts +++ b/src/TypeormUmlCommand.ts @@ -32,7 +32,7 @@ class TypeormUmlCommand extends Command { char: 'f', description: 'The diagram file format.', default: 'png', - options: ['png', 'svg', 'txt', 'puml'], + options: [ 'png', 'svg', 'txt', 'puml' ], } ), monochrome: flags.boolean( { description: 'Whether or not to use monochrome colors.', @@ -56,7 +56,7 @@ class TypeormUmlCommand extends Command { /** * Executes this command. - * + * * @async * @public */ @@ -135,7 +135,7 @@ class TypeormUmlCommand extends Command { /** * Downloads image into a file. - * + * * @private * @param {string} url The URL to download. * @param {string} filename The output filename. @@ -158,7 +158,7 @@ class TypeormUmlCommand extends Command { * @returns {string} The resolved full path of file. */ private getPath( filename: string ): string { - return ! isAbsolute( filename ) ? resolve( process.cwd(), filename ) : filename; + return !isAbsolute( filename ) ? resolve( process.cwd(), filename ) : filename; } } diff --git a/src/UmlBuilder.ts b/src/UmlBuilder.ts index 0ad7991..88f16f2 100644 --- a/src/UmlBuilder.ts +++ b/src/UmlBuilder.ts @@ -45,7 +45,7 @@ export class UmlBuilder { const connectionMetadataBuilder = new ConnectionMetadataBuilder( connection ); const entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas( connection.options.entities || [] ); - if ( ! entityMetadatas.length ) { + if ( !entityMetadatas.length ) { throw new Error( 'No entities have been found. Please, check your typeorm config to make sure you have configured it correctly.' ); } @@ -57,10 +57,10 @@ export class UmlBuilder { continue; } - if ( include.length && ! include.includes( entity.name ) ) { + if ( include.length && !include.includes( entity.name ) ) { continue; } - + uml += this.buildClass( entity, connection ); foreignKeys += this.buildForeignKeys( entity ); } @@ -120,7 +120,7 @@ export class UmlBuilder { let length = this.getColumnLength( column ); const type = connection.driver.normalizeType( column ); - if ( ! length && connection.driver.dataTypeDefaults[type] ) { + if ( !length && connection.driver.dataTypeDefaults[type] ) { length = this.getColumnLength( ( connection.driver.dataTypeDefaults[type] as unknown ) as ColumnDataTypeDefaults ); } @@ -160,7 +160,7 @@ export class UmlBuilder { protected buildForeignKey( foreignKey: ForeignKeyMetadata, entity: EntityMetadata ): string { const zeroOrMore = '}o'; const oneOrMore = '}|'; - const relationship = foreignKey.columns.some( ( column ) => ! column.isNullable ) ? oneOrMore : zeroOrMore; + const relationship = foreignKey.columns.some( ( column ) => !column.isNullable ) ? oneOrMore : zeroOrMore; return `${ entity.tableNameWithoutPrefix } ${ relationship }--|| ${ foreignKey.referencedTablePath }\n`; } From 54803bbebbfb16cf70c479324189bc106a495a2a Mon Sep 17 00:00:00 2001 From: Eugene Manuilov Date: Thu, 12 Nov 2020 12:29:20 +0200 Subject: [PATCH 15/15] Update version to 1.3.0 --- CHANGELOG.md | 6 +++++- README.md | 7 ++++++- package-lock.json | 2 +- package.json | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f401c99..f74a4c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog ## [Unreleased] - TBD +- + +## [v1.3.0] (2020-11-12) - Added an example with a shopping cart database. - Updated builder to throw an error if no entities have been found. - Updated builder to use entities instead of classes. @@ -35,7 +38,8 @@ - Added `--include` option to include only specific entities to the diagram. - Added `--exclude` option to exclude specific entities from the diagram. -[Unreleased]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.2.1...master +[Unreleased]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.3.0...master +[v1.3.0]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.2.1...v1.3.0 [v1.2.1]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.2.0...v1.2.1 [v1.2.0]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.1.3...v1.2.0 [v1.1.3]: https://github.com/eugene-manuilov/typeorm-uml/compare/v1.1.2...v1.1.3 diff --git a/README.md b/README.md index dec4b88..2ffb7cc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ -# typeorm-uml 1.2.1 +# typeorm-uml 1.3.0 + +[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io) +[![Version](https://img.shields.io/npm/v/typeorm-uml.svg)](https://www.npmjs.com/package/typeorm-uml) +[![Downloads/week](https://img.shields.io/npm/dw/typeorm-uml.svg)](https://www.npmjs.com/package/typeorm-uml) +[![License](https://img.shields.io/npm/l/typeorm-uml.svg)](https://github.com/eugene-manuilov/mynewcli/blob/master/package.json) A command line tool to generate UML diagrams for Typeorm projects. It uses [plantuml](https://plantuml.com/) to render diagrams and outputs an URL to a diagram. diff --git a/package-lock.json b/package-lock.json index 0890c47..153ffe0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "typeorm-uml", - "version": "1.2.1", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2c8c812..377ab94 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeorm-uml", - "version": "1.2.1", + "version": "1.3.0", "description": "Generates UML diagrams for TypeORM projects", "author": "Eugene Manuilov ", "license": "MIT",