diff --git a/package-lock.json b/package-lock.json index b2da1407..998d4b77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@google-cloud/translate": "7.0.4", "@hubspot/api-client": "7.1.2", "@microsoft/microsoft-graph-client": "3.0.4", + "@nosferatu500/textract": "3.1.2", "@semantic-release/changelog": "6.0.1", "@semantic-release/exec": "6.0.3", "@semantic-release/git": "10.0.1", @@ -45,7 +46,6 @@ "core-js": "3.26.1", "data-forge": "1.9.6", "date-diff": "1.0.2", - "debugger-api": "0.1.2", "docxtemplater": "3.32.4", "dotenv-extended": "2.9.0", "exceljs": "4.3.0", @@ -65,7 +65,7 @@ "luxon": "3.1.0", "mammoth": "1.5.1", "marked": "4.2.2", - "moment": "^1.3.0", + "moment": "1.3.0", "ms-rest-azure": "3.0.2", "nexmo": "2.9.1", "node-cron": "3.0.2", @@ -102,7 +102,6 @@ "swagger-client": "^3.18.5", "tabulator-tables": "5.4.2", "tedious": "15.1.2", - "textract": "^0.20.0", "twitter-api-v2": "1.12.9", "typescript": "4.9.3", "typescript-rest-rpc": "^1.0.7", @@ -115,16 +114,14 @@ "washyourmouthoutwithsoap": "1.0.2", "whatsapp-web.js": "1.18.3", "winston": "3.8.2", - "winston-logs-display": "1.0.0", - "yarn": "1.22.19" + "yarn": "^1.22.19" }, "bin": { "gbot": "boot.cjs" }, "devDependencies": { - "@types/puppeteer": "7.0.4", "@types/url-join": "4.0.1", - "ban-sensitive-files": "^1.3.0", + "ban-sensitive-files": "1.9.18", "commitizen": "4.2.5", "cz-conventional-changelog": "3.3.0", "dependency-check": "4.1.0", @@ -1357,6 +1354,18 @@ "node": ">=6.0.0" } }, + "node_modules/@dsherret/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-InCaQ/KEOcFtAFztn47wadritBLP2nT6m/ucbBnIgI5YwxuMzKKCHtqazR2+D1yR6y1ZTnPea9aLFEUrTttUSQ==", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", @@ -1941,6 +1950,18 @@ "node": ">=6.0.0" } }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -2091,35 +2112,6 @@ "esprima": "^4.0.1" } }, - "node_modules/@nlpjs/evaluator/node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/@nlpjs/evaluator/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/@nlpjs/lang-all": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/@nlpjs/lang-all/-/lang-all-4.24.0.tgz", @@ -2626,6 +2618,33 @@ "node": ">= 8" } }, + "node_modules/@nosferatu500/textract": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nosferatu500/textract/-/textract-3.1.2.tgz", + "integrity": "sha512-3RqQ40pWnrKBAju1d9Iiui2uf7xMXZjJV73NwDae8LfDn01VclXTHpfqFeQXPtpumck0Ym3AkOUiAPN3eNdcxw==", + "dependencies": { + "@xmldom/xmldom": "^0.8.6", + "cheerio": "1.0.0-rc.12", + "epub2": "1.3.8", + "got": "^11.8.5", + "html-entities": "^2.3.3", + "iconv-lite": "0.6.3", + "jschardet": "3.0.0", + "marked": "^4.2.2", + "meow": "^9.0.0", + "mime": "3.0.0", + "pdf-text-extract": "1.5.0", + "xlsx": "^0.18.5", + "xpath": "0.0.32", + "yauzl": "2.10.0" + }, + "bin": { + "textract": "bin/textract" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@octokit/auth-token": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", @@ -5521,7 +5540,6 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, "engines": { "node": ">=10" }, @@ -5546,7 +5564,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -5627,7 +5644,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -5786,7 +5802,6 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -5914,16 +5929,6 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, - "node_modules/@types/puppeteer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-7.0.4.tgz", - "integrity": "sha512-ja78vquZc8y+GM2al07GZqWDKQskQXygCDiu0e3uO0DMRKqE0MjrFBFmTulfPYzLB6WnL7Kl2tFPy0WXSpPomg==", - "deprecated": "This is a stub types definition. puppeteer provides its own type definitions, so you do not need this installed.", - "devOptional": true, - "dependencies": { - "puppeteer": "*" - } - }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -5938,7 +5943,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -6030,9 +6034,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.9.tgz", - "integrity": "sha512-yceMpm/xd4W2a85iqZyO09gTnHvXF6pyiWjD2jcOJs7hRoZtNNOO1eJlhHj1ixA+xip2hOyGn+LgcvLCMo5zXA==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", + "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==", "engines": { "node": ">=10.0.0" } @@ -6053,6 +6057,15 @@ "node": ">=6.5" } }, + "node_modules/abs": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/abs/-/abs-1.3.14.tgz", + "integrity": "sha512-PrS26IzwKLWwuURpiKl8wRmJ2KdR/azaVrLEBWG/TALwT20Y7qjtYp1qcMLHA4206hBHY5phv3w4pjf9NPv4Vw==", + "dev": true, + "dependencies": { + "ul": "^5.0.0" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -6076,25 +6089,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", - "integrity": "sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==", - "dependencies": { - "acorn": "^2.1.0" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -6141,6 +6135,14 @@ "node": ">= 0.6.15" } }, + "node_modules/adal-node/node_modules/@xmldom/xmldom": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.9.tgz", + "integrity": "sha512-yceMpm/xd4W2a85iqZyO09gTnHvXF6pyiWjD2jcOJs7hRoZtNNOO1eJlhHj1ixA+xip2hOyGn+LgcvLCMo5zXA==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/adal-node/node_modules/axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -6184,13 +6186,11 @@ "xpath": "^0.0.32" } }, - "node_modules/adaptive-expressions/node_modules/@xmldom/xmldom": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", - "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==", - "engines": { - "node": ">=10.0.0" - } + "node_modules/add-subtract-date": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/add-subtract-date/-/add-subtract-date-1.0.15.tgz", + "integrity": "sha512-MiL4wnMyM999meyCrSA3LME9uZ/b5ptSd0ACDVUoTfutFwvkMyIN7nG7gjrU56WEk5RlFLBghabcgdYwY8s+nQ==", + "dev": true }, "node_modules/adler-32": { "version": "1.3.1", @@ -6267,33 +6267,19 @@ "node": "*" } }, - "node_modules/align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "node_modules/always-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/always-error/-/always-error-1.0.0.tgz", + "integrity": "sha512-FQOCVM9Tv+0skDiLBTemM0LN9IdoRxCqbo+AVpPPRorj34VvC7mFORDWdtEPKHRjC4N0KaxGGpVv35/7k0QbWA==", + "dev": true + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, "dependencies": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/align-text/node_modules/longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "engines": { - "node": ">=0.4.2" + "string-width": "^4.1.0" } }, "node_modules/ansi-escapes": { @@ -6312,9 +6298,9 @@ } }, "node_modules/ansi-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-1.4.0.tgz", - "integrity": "sha512-xnStac3E+n0VD9+Om894IFp9KDOp7ODOp7SHza4NbdrxC/6y3H3xjSmjaMlJiyiTScX0QNKN+G5t0X6YYbEg1A==", + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-3.2.10.tgz", + "integrity": "sha512-CGKGIbd678lm15IXJXI1cTyOVAnMQw0jES+klW/yIc+GzYccsYanLMhczPIIj2hE64B79g75QfiuWrEWd6nJdg==", "dev": true }, "node_modules/ansi-regex": { @@ -6341,6 +6327,39 @@ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, + "node_modules/ansy": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/ansy/-/ansy-1.0.15.tgz", + "integrity": "sha512-mQyNSn58HN7aEthofkap0hn8jg7/5SJWrB0ypExgcECOwLppc0njH+QBA9X5VMiEN9SM0JlFZWJQGycxxInAqg==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.0.0", + "custom-return": "^1.0.0", + "supports-color": "^3.1.2", + "ul": "^5.2.1" + } + }, + "node_modules/ansy/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansy/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/antlr4ts": { "version": "0.5.0-alpha.3", "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.3.tgz", @@ -6446,6 +6465,22 @@ "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", @@ -6454,6 +6489,14 @@ "node": ">=0.10.0" } }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/array-differ": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", @@ -6477,6 +6520,32 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/array-hyper-unique": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/array-hyper-unique/-/array-hyper-unique-1.1.10.tgz", + "integrity": "sha512-kuqfoHcd42m00XBii0GYfPe3LYZgrTLeiWKSkmzkph7RyiW1GZr1hVWbFA8KUTGKx3nHLY1Rj+i72+xLlNuYNA==", + "dependencies": { + "deep-eql": "^4.0.0", + "lodash": "^4.17.21", + "tslib": "^2.3.0" + } + }, + "node_modules/array-hyper-unique/node_modules/deep-eql": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-hyper-unique/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -6494,7 +6563,14 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "engines": { "node": ">=0.10.0" } @@ -6536,6 +6612,14 @@ "node": "*" } }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -6571,6 +6655,17 @@ "node": ">= 4.0.0" } }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/atob-lite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", @@ -6705,19 +6800,67 @@ "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==", "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js." }, + "node_modules/babyparse": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babyparse/-/babyparse-0.4.6.tgz", + "integrity": "sha512-fsX2GmTvhpKkmSa0DxJdkw2617HUT+xJ6RYR82w95GjI5A4yWjtOAB/0qcRsXj4VsdkI07jsHWhwqUkVgsZCEw==", + "deprecated": "Deprecated in favour of PapaParse, which now supports Node.js" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/ban-sensitive-files": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ban-sensitive-files/-/ban-sensitive-files-1.3.0.tgz", - "integrity": "sha512-VXIn3A4FvaziIWczNFMemU7f6gUh+MeUCU6ZE2PR4g3EYJLy3Bow/SQ+y1/EgWWr0QIZAfre1TXYBI7dUz7gaA==", + "version": "1.9.18", + "resolved": "https://registry.npmjs.org/ban-sensitive-files/-/ban-sensitive-files-1.9.18.tgz", + "integrity": "sha512-+jD9ucQcSFRfJW9pi7sPiEnl3j2cPsOq3fsN+jWJ/7EvX8kMYP4alaYYcifyrFqLNYbOzlsD8wgBhgrnepePxQ==", "dev": true, "dependencies": { - "check-more-types": "2.2.0", - "lazy-ass": "1.1.0" + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.4", + "ggit": "2.4.12", + "lazy-ass": "1.6.0", + "pluralize": "8.0.0", + "ramda": "0.28.0", + "update-notifier": "5.1.0" + }, + "bin": { + "ban": "bin/ban.js", + "ban-sensitive": "bin/ban.js", + "ban-sensitive-files": "bin/ban.js", + "no-sensitive": "bin/ban.js", + "no-way": "bin/ban.js", + "sensitive-files": "bin/ban.js" + } + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/base64-js": { @@ -6890,11 +7033,27 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "node_modules/botbuilder": { "version": "4.18.0", "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.18.0.tgz", @@ -7143,17 +7302,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "node_modules/botlib/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/botlib/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -7269,6 +7417,122 @@ "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/node_modules/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 + }, + "node_modules/boxen/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -7425,21 +7689,28 @@ } }, "node_modules/bug-killer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bug-killer/-/bug-killer-1.0.0.tgz", - "integrity": "sha512-VxtIy6rLZwLEk6R1p6msqagongnG2awJnd9mUPlgciqfQR0dFKZTYEVMEbOCDQ9naQ4Ttq/3vKNgVkUGbSQpzw==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/bug-killer/-/bug-killer-4.4.4.tgz", + "integrity": "sha512-O/iJPwIf0Igra3q91s+jGeYhUSdtFUtBMb1JMwvAZLS0We1mIdEuDM4FCjbxFQAF+R6GqpRVgHVQa0utQQxSEA==", "dev": true, "dependencies": { - "couleurs": "^1.1.0" + "ansi-parser": "^3.2.5", + "couleurs": "^6.0.6", + "daty": "^1.0.7", + "deffy": "^2.2.2", + "typpy": "^2.3.6" } }, "node_modules/bug-killer/node_modules/couleurs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-1.1.0.tgz", - "integrity": "sha512-K8PvqZyqmbVHtLnuxPyA+FqQ66aE9+YI709ogkBUx7goA7bGCVHnIqM9zBEe2Z6km7gmMWREC9ZipvJ6onEdYQ==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-6.0.11.tgz", + "integrity": "sha512-y5WUDtgQKw/tVViZCj3ACX8VseU0ONxiet8SRsE89uH4s/otRLXGOMymfVbKMFzedKOdxQpTcYWukRwkvgRYdw==", "dev": true, "dependencies": { - "x256": "~0.0.1" + "ansy": "^1.0.0", + "color-convert": "^1.0.0", + "iterate-object": "^1.3.1", + "typpy": "^2.3.1" } }, "node_modules/builtin-modules": { @@ -7482,12 +7753,6 @@ "node": ">=0.10.0" } }, - "node_modules/c3-chart-maker/node_modules/babyparse": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babyparse/-/babyparse-0.4.6.tgz", - "integrity": "sha512-fsX2GmTvhpKkmSa0DxJdkw2617HUT+xJ6RYR82w95GjI5A4yWjtOAB/0qcRsXj4VsdkI07jsHWhwqUkVgsZCEw==", - "deprecated": "Deprecated in favour of PapaParse, which now supports Node.js" - }, "node_modules/c3-chart-maker/node_modules/camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", @@ -7614,6 +7879,11 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, + "node_modules/c3-chart-maker/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, "node_modules/c3-chart-maker/node_modules/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", @@ -7664,6 +7934,17 @@ "node": "*" } }, + "node_modules/c3-chart-maker/node_modules/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==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "node_modules/c3-chart-maker/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -7884,6 +8165,25 @@ "camelcase": "^4.1.0" } }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cache-content-type": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", @@ -7900,7 +8200,6 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, "engines": { "node": ">=10.6.0" } @@ -7909,7 +8208,6 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -7927,7 +8225,6 @@ "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, "dependencies": { "pump": "^3.0.0" }, @@ -7959,6 +8256,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" + }, "node_modules/caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -8076,27 +8378,13 @@ "node": ">= 10" } }, - "node_modules/center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", - "dependencies": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cfb": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-0.11.1.tgz", - "integrity": "sha512-1GEqpcO365hTRpP+GzHXNiUF5SB7qmY5aVYwrJm8ISx27HzHpaFlTQhnOCMNhqP0WPkHR0OGE9WDSqtksV4anw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", "dependencies": { - "commander": "" - }, - "bin": { - "cfb": "bin/cfb.njs" + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" }, "engines": { "node": ">=0.8" @@ -8150,17 +8438,39 @@ "node": ">=4" } }, - "node_modules/character-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", - "integrity": "sha512-6OEBVBlf/y8LaAphnbAnt743O3zMhlBer+FO5D40H6wqAdU9B1TvuApkejgLW0cvv0tEZNLktv1AnRI+C87ueQ==" - }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "node_modules/chdir-promise": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/chdir-promise/-/chdir-promise-0.6.2.tgz", + "integrity": "sha512-EG5MutQt4qTxoQPfBtPCfU1A/MqborgaO66xrPSD/dRTB40OLN0wy+YAo5ZAw7DawhtCPdZHAdQ206fyWkhoiw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.1", + "check-more-types": "2.24.0", + "debug": "3.1.0", + "lazy-ass": "1.6.0" + } + }, + "node_modules/chdir-promise/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/chdir-promise/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -8170,112 +8480,68 @@ } }, "node_modules/check-more-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.2.0.tgz", - "integrity": "sha512-PXGuVn3MlMkQNUcegrDBy5AmMVrHcZ0ce0olNZog6Tb+n8HVBkspH4N0KHpIdCInyzxWBI4BRn7j+M4AmBI57g==", + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/cheerio": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.17.0.tgz", - "integrity": "sha512-pakQLw14btS8T4+Q3dgFbe7x447hjsQeEhMJ2kHg8YrOLSmKS0xGl9REnz/eic7dsxS0S9kMRbZcsqrlMAS0dQ==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dependencies": { - "CSSselect": "~0.4.0", - "dom-serializer": "~0.0.0", - "entities": "~1.1.1", - "htmlparser2": "~3.7.2", - "lodash": "~2.4.1" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/cheerio/node_modules/dom-serializer": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.0.1.tgz", - "integrity": "sha512-evvizoLtT5uMpDT3iKRAx1NmTCk2ZdOD7ATqmL27QJkCv8XQmGKv/eFuvAjHhySNBACREAcXGBqozYhV1dOdag==", + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dependencies": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cheerio/node_modules/domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha512-zEvAAsFY0DeHkrqWBRkSsmgaE7yADgpez40JUFjISb+uzSinl2F6QbG4lMEBE4P06gCGF6VnsykmbNgu7ZIHzA==" - }, - "node_modules/cheerio/node_modules/domhandler": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz", - "integrity": "sha512-MFFBQFGkyTuNe3vL9WEw9JdlCwIoBYpOGESLeZAvc/jClYNsOl6P1KzevJbWg76GovdEycfR7/2/Ra7NnqtMKw==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/cheerio/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/cheerio/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, "node_modules/cheerio/node_modules/htmlparser2": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.7.3.tgz", - "integrity": "sha512-XdyuCBH3/tTuRTCMFolbj5stKZek8FK7KVXm+aHYivHmXVo18jINvc2jR5zgFkp//z2KWl5vppTJ4DWhltYruA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "domelementtype": "1", - "domhandler": "2.2", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, - "node_modules/cheerio/node_modules/htmlparser2/node_modules/entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==" - }, - "node_modules/cheerio/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/cheerio/node_modules/lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", - "engines": [ - "node", - "rhino" - ] - }, - "node_modules/cheerio/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/cheerio/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -8327,48 +8593,117 @@ "dayjs": "^1.10.0" } }, - "node_modules/cldrjs": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz", - "integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA==" + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "node_modules/clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha512-aTWyttSdI2mYi07kWqHi24NUU9YlELFKGOAgFzZjDN1064DMAOy2FBuoyGmkKRlXkbpXd0EVHmiVkbKhKoirTw==", + "node_modules/class-methods": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/class-methods/-/class-methods-1.0.12.tgz", + "integrity": "sha512-14T82nNlU+OAhPNm4Fw4kJUS8klgt9n1+CdtB6LHvmWC5Wb89TZQ6CuCwEK2YR03O/hT0eHGIpQxtovAnN9CtA==", + "dev": true, "dependencies": { - "commander": "2.8.x", - "source-map": "0.4.x" - }, - "bin": { - "cleancss": "bin/cleancss" + "exclude-arr": "^1.0.0", + "static-methods": "^1.0.0", + "ul": "^5.2.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/clean-css/node_modules/commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dependencies": { - "graceful-readlink": ">= 1.0.0" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">= 0.6.x" + "node": ">=0.10.0" } }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dependencies": { - "amdefine": ">=0.0.4" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cldrjs": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz", + "integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA==" + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -8378,20 +8713,58 @@ } }, "node_modules/cli-box": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cli-box/-/cli-box-2.1.1.tgz", - "integrity": "sha512-ZNx8Lhb3CFx8Bll0JswIJ2g5lw/b/Ge3kaSlqwKRUphPifh+D0T92KPMB9NPdHjHc4OmPYIaVu80sjGKIpvY+Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-box/-/cli-box-5.0.0.tgz", + "integrity": "sha512-1ukDhxQ1nSgfupVOH2v6+meRlKLHjTaSdCPTFjUOtAjQvFsDEWeW08gySk8o5dr+biPosooNmfle28ighmTEPA==", "dev": true, "dependencies": { - "ansi-parser": "1.3.0" + "ansi-parser": "3.0.0", + "ul": "5.0.0" } }, "node_modules/cli-box/node_modules/ansi-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-1.3.0.tgz", - "integrity": "sha512-mvewHRn7sWk0siUn5bnFEtDbe9dRK90mtqxGsHsX5MfcnbV/BCFVGyehv1tWdkAKL6ZDzMEezs3YGEoytO10lQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-3.0.0.tgz", + "integrity": "sha512-edNYJqqmeQJ+N7YV6gWQ4xAumqctsOchnNVDZEHsMSVZcytGLwq9SbGDwm9Jg+XpPNdl6zSGgujFRqiu1PmFYg==", "dev": true }, + "node_modules/cli-box/node_modules/deffy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.0.0.tgz", + "integrity": "sha512-Gcn10MX982lqx8XmJES2JvN8Im7h0lFwRanyQfkQG2wXko4SouD0pSGUlK6Do165Itfidhpssn6NqlRkKp/4ig==", + "dev": true, + "dependencies": { + "typpy": "^2.0.0" + } + }, + "node_modules/cli-box/node_modules/typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + }, + "node_modules/cli-box/node_modules/ul": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ul/-/ul-5.0.0.tgz", + "integrity": "sha512-/wMRf3ZchW/MHV8M0fWhxhUTeJAOgrxt6u/9snab4xuMTkCuHo7TH7nyMZxrsjNobAFC8UhCNwlwVVQdVbcf1w==", + "dev": true, + "dependencies": { + "deffy": "2.0.0", + "typpy": "2.0.0" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-color": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", @@ -8450,6 +8823,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha512-h/TzJrgwzVV+W6laITBZAxAWfBjX4T0x+LF5XJdS1AzDkXqmraMNnKQ/O/f3AHJKVR85fOglUEdS/B0P1wS7Aw==", + "dev": true, + "dependencies": { + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/cli-table/node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -8566,11 +8960,21 @@ "node": ">=0.10.0" } }, + "node_modules/clone-deep/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, "dependencies": { "mimic-response": "^1.0.0" }, @@ -8579,14 +8983,56 @@ } }, "node_modules/clp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/clp/-/clp-1.2.0.tgz", - "integrity": "sha512-rl/tsN5Q/K2vj8j5d0S6BCSbHZSaTxbdg8RPdAqYwGyJ1GA2jhCHWqdHpRDL7jAQw9Yj8qR44jRGpYKbc2xavw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/clp/-/clp-3.2.1.tgz", + "integrity": "sha512-pD7KnjnpK2Rlc16i+l7KZp6oy6nCMAZsgq7E9lNiteDT8viiySRAqPzggw0T+Q3vNX0p0C0TijqXsYkwQYf6sQ==", "dev": true, "dependencies": { - "ansi-parser": "^1.4.0", - "le-table": "^2.1.0", - "ul": "^2.1.0" + "ansi-parser": "2.0.0", + "le-table": "4.0.0", + "ul": "5.0.0" + } + }, + "node_modules/clp/node_modules/ansi-parser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-2.0.0.tgz", + "integrity": "sha512-ydTIzNr0qbKe1QJwIoP6U3KrhUM1P0T5i+/wXFhYUwBvNQuBeuTluF3UhksfjnU5L2epCHQbDvU4Mogu4Dvong==", + "dev": true + }, + "node_modules/clp/node_modules/deffy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.0.0.tgz", + "integrity": "sha512-Gcn10MX982lqx8XmJES2JvN8Im7h0lFwRanyQfkQG2wXko4SouD0pSGUlK6Do165Itfidhpssn6NqlRkKp/4ig==", + "dev": true, + "dependencies": { + "typpy": "^2.0.0" + } + }, + "node_modules/clp/node_modules/le-table": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/le-table/-/le-table-4.0.0.tgz", + "integrity": "sha512-LYrjuuy61/nwIl/UZP5nR+6lEQPImtKlsMyB5xsXbB5z+IeQAe9+fNaeSBkSFC6UaBB/fIu5OnnGl5PBXlJ5yA==", + "dev": true, + "dependencies": { + "cli-box": "5.0.0", + "overlap": "2.0.0", + "ul": "5.0.0" + } + }, + "node_modules/clp/node_modules/typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + }, + "node_modules/clp/node_modules/ul": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ul/-/ul-5.0.0.tgz", + "integrity": "sha512-/wMRf3ZchW/MHV8M0fWhxhUTeJAOgrxt6u/9snab4xuMTkCuHo7TH7nyMZxrsjNobAFC8UhCNwlwVVQdVbcf1w==", + "dev": true, + "dependencies": { + "deffy": "2.0.0", + "typpy": "2.0.0" } }, "node_modules/co": { @@ -8609,6 +9055,11 @@ "type-is": "^1.6.16" } }, + "node_modules/code-block-writer": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-7.2.2.tgz", + "integrity": "sha512-8SyXM1bWsMDCzvCoTdnDBhnnUbHntxcba4ApBIO3S3QX0M2Iq0xZCzs6SYdBOGaSUi4drysvrAK15JoXhlpsvQ==" + }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -8625,6 +9076,18 @@ "node": ">=0.8" } }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", @@ -8657,9 +9120,10 @@ } }, "node_modules/colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", + "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", + "dev": true, "engines": { "node": ">=0.1.90" } @@ -8684,6 +9148,50 @@ "node": ">= 0.8" } }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", + "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", + "dependencies": { + "array-back": "^2.0.0", + "chalk": "^2.4.1", + "table-layout": "^0.4.3", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==" + }, "node_modules/commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", @@ -8728,6 +9236,11 @@ "dot-prop": "^5.1.0" } }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/compress-commons": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", @@ -8796,24 +9309,21 @@ "proto-list": "~1.2.1" } }, - "node_modules/constantinople": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", - "integrity": "sha512-UnEggAQrmhxuTxlb7n1OsTtagNXWUv2CRlOogZhWOU4jLK4EJEbF8UDSNxuGu+jVtWNtO2j51ab2H1wlBIzF/w==", - "deprecated": "Please update to at least constantinople 3.1.1", + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, "dependencies": { - "acorn": "^2.1.0" - } - }, - "node_modules/constantinople/node_modules/acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==", - "bin": { - "acorn": "bin/acorn" + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, "node_modules/content-disposition": { @@ -8878,6 +9388,30 @@ "node": ">=10" } }, + "node_modules/conventional-changelog-writer/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/conventional-changelog-writer/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -8907,6 +9441,17 @@ "readable-stream": "3" } }, + "node_modules/conventional-changelog-writer/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/conventional-commit-types": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", @@ -8944,6 +9489,30 @@ "node": ">=10" } }, + "node_modules/conventional-commits-parser/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/conventional-commits-parser/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -8973,6 +9542,17 @@ "readable-stream": "3" } }, + "node_modules/conventional-commits-parser/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -9004,6 +9584,14 @@ "node": ">= 0.8" } }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/core-js": { "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", @@ -9062,14 +9650,22 @@ } }, "node_modules/couleurs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-3.0.0.tgz", - "integrity": "sha512-37jCQ77RexibjSVs92no23jzXaEMJG0akD3sDsPtYfchq9yo3dwxtnh0jX/YjgpSqXBUqiu/g/iXa5MjdMCoaA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-5.2.1.tgz", + "integrity": "sha512-P1SOxvmtZ//1WAyLKyOZdvCjBvylbUMKZbIwUY+dZvOkqdILBSGHUzcQzQRIgikY4kMGgcbxg8bbKc0rOhGUQQ==", "dev": true, "dependencies": { + "flat-colors": "3.0.0", + "typpy": "2.0.0", "x256": "0.0.2" } }, + "node_modules/couleurs/node_modules/typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -9112,6 +9708,14 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/crlf-normalize": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/crlf-normalize/-/crlf-normalize-1.0.18.tgz", + "integrity": "sha512-bBPJTekqhw/yUgHvHrOT2QBb6gJt/gNDx++GKkSYaBIepeEiLIezouV8xgDFTL3yRMpK7wOYC9a8xvY7bFQCLg==", + "dependencies": { + "ts-type": ">=2" + } + }, "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", @@ -9146,55 +9750,30 @@ "node": ">=8" } }, - "node_modules/css": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", - "integrity": "sha512-qmTYWhHk910nQWnGqMAiWWPQlB6tESiWgNebQJmiozOAGcBAQ1+U/UzUOkhdrcshlkSRRiKWodwmVvO0OmnIGg==", + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { - "css-parse": "1.0.4", - "css-stringify": "1.0.5" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", - "integrity": "sha512-pfstzKVRZiHprDXdsmtfH1HYUEw22lzjuHdnpe1hscwoQvgW2C5zDQIBE0RKoALEReTn9W1ECdY8uaT/kO4VfA==" - }, - "node_modules/css-stringify": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", - "integrity": "sha512-aIThpcErhG5EyHorGqNlTh0TduNBqLrrXLO3x5rku3ZKBxuVfY+T7noyM2G2X/01iQANqJUb6d3+FLoa+N7Xwg==" - }, - "node_modules/CSSselect": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/CSSselect/-/CSSselect-0.4.1.tgz", - "integrity": "sha512-r4HWARRbQ6enGbdPCrl3bNybORIcU0AcBLTyaxcWNTRd6EH2/w9RInHkUbUhwehrBFN1KQz+yFulhyIH31ZXAw==", - "deprecated": "the module is now available as 'css-select'", - "dependencies": { - "CSSwhat": "0.4", - "domutils": "1.4" - } - }, - "node_modules/CSSselect/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/CSSselect/node_modules/domutils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", - "integrity": "sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/CSSwhat": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/CSSwhat/-/CSSwhat-0.4.7.tgz", - "integrity": "sha512-bU5cYG02crjQGDN6wm8USThp/sr/MUulMTrVA1CENSBhv3B+mlJfYDP1em/wJlMT0aYcWso0cuT9NXW74yPfog==", - "deprecated": "the module is now available as 'css-what'", + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "engines": { - "node": "*" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/csv": { @@ -9226,12 +9805,13 @@ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-0.0.8.tgz", "integrity": "sha512-REHUwgPO2wPr69PZXW3cXmtvi+imJKvnqfxJw115rBsAMIKGQUP7a/nWo5SGzN5wmcKpN4v6uBcvc9CzvnT5zw==" }, - "node_modules/cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", - "engines": { - "node": ">=0.4.0" + "node_modules/custom-return": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/custom-return/-/custom-return-1.0.12.tgz", + "integrity": "sha512-Xy6IlEV6gW5Iu4YRoQe0A5RG1mzezawcTXzAk7u28oB2UilRfbbOc1C7RmWE6AJ1inSm8gghCkIpo0LUQfLbvw==", + "dev": true, + "dependencies": { + "noop6": "^1.0.0" } }, "node_modules/cz-conventional-changelog": { @@ -9357,17 +9937,6 @@ "node": ">= 10" } }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/d3-ease": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", @@ -9381,6 +9950,15 @@ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" }, + "node_modules/d3-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/d3-helpers/-/d3-helpers-0.3.0.tgz", + "integrity": "sha512-uNJ5QRsTW7CdNC6CHX528VwIEzYCC/iFHMQ9ReaDUGA+iiJXHcR2uKobK68FkKSWmNYPxwaUV+9SswjoygF6VA==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, "node_modules/d3-interpolate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", @@ -9534,6 +10112,12 @@ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, + "node_modules/date-unit-ms": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/date-unit-ms/-/date-unit-ms-1.1.14.tgz", + "integrity": "sha512-6vUHdMQkblV8lKYQqnTM2kUmWlFVG6F/0mzUbcnNygcR2vuUPeHAIE7BO7mj/brmgV1INSAG9D2GpgTLOEOHvg==", + "dev": true + }, "node_modules/date-utils": { "version": "1.2.21", "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", @@ -9550,11 +10134,33 @@ "node": "*" } }, + "node_modules/daty": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/daty/-/daty-1.2.1.tgz", + "integrity": "sha512-0ScX8eww2sJ1fnJuuLhP6JXonVrIIJZiVlGL6ve+Dnv3vPVFf3ZMDlose5+h/SnR4gQ1nmG3acoBP3Slycr4ag==", + "dev": true, + "dependencies": { + "add-subtract-date": "^1.0.0", + "class-methods": "^1.0.4", + "date-unit-ms": "^1.1.0", + "diff-dates": "^1.0.0", + "formatoid": "^1.0.0" + } + }, "node_modules/dayjs": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==" }, + "node_modules/days": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/days/-/days-1.1.1.tgz", + "integrity": "sha512-vzeIwVsEIyA35GH4+mPd4hjVDNI87wYANyZFs0BHjBr5kIBH5zEl7LfD6Wr4SFZca4D3CU9IH1w4DuZLlXzKRw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -9576,33 +10182,10 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/debugger-api": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/debugger-api/-/debugger-api-0.1.2.tgz", - "integrity": "sha512-OAECiwgtx6mzb0rWxn8pk4Htd6KIdXJw+YRCTYaekPFDa1cYxHOYwX5Y74f4Gzd5eebgJShXL1Ae6rtEaNTfiQ==", - "dependencies": { - "debug": "^2.0.0", - "node-inspector": "^0.7.4" - } - }, - "node_modules/debugger-api/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/debugger-api/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/debuglog": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true, "engines": { "node": "*" } @@ -9638,6 +10221,14 @@ "node": ">=0.10.0" } }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -9742,6 +10333,15 @@ "node": ">=10" } }, + "node_modules/deffy": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.2.4.tgz", + "integrity": "sha512-pLc9lsbsWjr6RxmJ2OLyvm+9l4j1yK69h+TML/gUit/t3vTijpkNGh8LioaJYTGO7F25m6HZndADcUOo2PsiUg==", + "dev": true, + "dependencies": { + "typpy": "^2.0.0" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -9765,6 +10365,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", @@ -9921,6 +10533,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-dates": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/diff-dates/-/diff-dates-1.0.14.tgz", + "integrity": "sha512-JbWO1wl9jJZdLPLK/nENeUL68Mv7+SQQrXlEPSxuzZid89+FXpl7xSGxbPGd5z/2Xx3KJe4+fHPpaKnWnZ8V3w==", + "dev": true, + "dependencies": { + "date-unit-ms": "^1.1.0" + } + }, "node_modules/diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -9994,22 +10615,14 @@ "node": ">=0.10" } }, - "node_modules/docxtemplater/node_modules/@xmldom/xmldom": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", - "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" @@ -10035,11 +10648,11 @@ ] }, "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" @@ -10049,13 +10662,13 @@ } }, "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -10128,6 +10741,12 @@ "readable-stream": "^2.0.2" } }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, "node_modules/duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", @@ -10373,6 +10992,11 @@ "node": ">=0.10.0" } }, + "node_modules/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==" + }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -10418,9 +11042,12 @@ "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -10446,6 +11073,26 @@ "node": ">=6" } }, + "node_modules/epub2": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/epub2/-/epub2-1.3.8.tgz", + "integrity": "sha512-krjEZmPdN4iiFdThTkWT0uGAQMF+0wwLFEOv6MwEGsYvyD4+08dlMQz/1pFlgfic/Bh3aqgAzArTptQRmfte1g==", + "dependencies": { + "adm-zip": "^0.4.13", + "array-hyper-unique": "^1.0.7", + "bluebird": "^3.5.5", + "crlf-normalize": "^1.0.3", + "xml2js": "^0.4.19" + } + }, + "node_modules/epub2/node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "engines": { + "node": ">=0.3.0" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -10607,6 +11254,15 @@ "node": ">=6" } }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -10621,12 +11277,12 @@ } }, "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dependencies": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1" }, @@ -10635,7 +11291,7 @@ "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" @@ -10709,6 +11365,14 @@ "node": ">=8.0.0" } }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", @@ -10834,15 +11498,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -11088,14 +11743,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -11107,7 +11754,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -11115,14 +11762,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -11196,13 +11835,20 @@ "node": ">= 6" } }, + "node_modules/exclude-arr": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/exclude-arr/-/exclude-arr-1.0.11.tgz", + "integrity": "sha512-yQVFDXkkpDOhSPGOu2yG4fKmDsBiufj2M5uJRS6ijcLW7/pUvCxAHJ2YQTJUkLJ4nWbl+XZn/qwMzrWYfWFgFg==", + "dev": true + }, "node_modules/exec-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/exec-limiter/-/exec-limiter-1.0.0.tgz", - "integrity": "sha512-9f+r3LWHgQ4uDvjXYyQ0IqVzyV52vJ71D6sESHd+m7gheBOlPQU6zZ1Fj/O90OCVAaELFlMmScj2f+MkDSzT5Q==", + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/exec-limiter/-/exec-limiter-3.2.13.tgz", + "integrity": "sha512-86Ri699bwiHZVBzTzNj8gspqAhCPchg70zPVWIh3qzUOA1pUMcb272Em3LPk8AE0mS95B9yMJhtqF8vFJAn0dA==", "dev": true, "dependencies": { - "limit-it": "^1.1.0" + "limit-it": "^3.0.0", + "typpy": "^2.1.0" } }, "node_modules/execa": { @@ -11227,14 +11873,112 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -11370,6 +12114,25 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -11384,6 +12147,18 @@ "node": ">=4" } }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/external-editor/node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -11396,6 +12171,35 @@ "node": ">=0.6.0" } }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -11437,14 +12241,6 @@ "node >=0.6.0" ] }, - "node_modules/eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", - "engines": { - "node": "> 0.1.90" - } - }, "node_modules/fast-csv": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", @@ -11625,6 +12421,12 @@ "node": ">=8" } }, + "node_modules/fillo": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/fillo/-/fillo-1.0.13.tgz", + "integrity": "sha512-9LYJ0ww96DUYETd2Bia5NS1b8rj42nEE5zsfcUwDErMopTs6BRBe4dRIVjrZGXSiK4vNSL/Q3u0dyqbmkA2Zdg==", + "dev": true + }, "node_modules/final-stream": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/final-stream/-/final-stream-2.0.4.tgz", @@ -11670,6 +12472,17 @@ "merge": "^2.1.1" } }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -11730,6 +12543,12 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/flat-colors/-/flat-colors-3.0.0.tgz", + "integrity": "sha512-UDm0W6LZOdQL0kfbHW1/hohk4bws+ypeww4SyKv5Kn0CIzWWn2blNLLv4nWFuVt5NFv6PHWQYzuHf0uWqiX56g==", + "dev": true + }, "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", @@ -11886,11 +12705,20 @@ } }, "node_modules/form-data-encoder": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.3.tgz", - "integrity": "sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ==", - "engines": { - "node": ">= 14.17" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "node_modules/formatoid": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/formatoid/-/formatoid-1.2.4.tgz", + "integrity": "sha512-9wWHOPJvbIheSpiHGl0xaBwdszlzPaeh2KqHVexGQnKpO85xrMoKvuf6M3q0B4uC3I9lkXjH6+8ipQC8PQ/7Gw==", + "dev": true, + "dependencies": { + "days": "^1.0.1", + "fillo": "^1.0.0", + "months": "^1.0.0", + "parse-it": "^1.0.0" } }, "node_modules/formdata-node": { @@ -11939,13 +12767,24 @@ } }, "node_modules/frac": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/frac/-/frac-0.3.1.tgz", - "integrity": "sha512-1Lzf2jOjhIkRaa013KlxNOn2D9FemmQNeYUDpEIyPeFXmpLvbZXJOlaayMBT6JKXx+afQFgQ1QJ4kaF7Z07QFQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", "engines": { "node": ">=0.8" } }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -11987,6 +12826,14 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "node_modules/fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -12206,6 +13053,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -12214,21 +13069,125 @@ "assert-plus": "^1.0.0" } }, - "node_modules/git-issues": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/git-issues/-/git-issues-1.0.0.tgz", - "integrity": "sha512-03R/xgSb4cl0BD49Osti/6dVm2DiNBFlSRbI46/PdZuzEKwCbwFnVDQeIVowL+ls0LxO0XLaX1RJUqt25Nxejg==", + "node_modules/ggit": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/ggit/-/ggit-2.4.12.tgz", + "integrity": "sha512-29DxkCEmqhXNk+JrV8GNQ+IY8OaJ1J2jC+B/vPvOk7CWs/2K8uX2DQeMlnFy7S+NeJrTNcLWfPJDdi6IflDt/A==", "dev": true, "dependencies": { - "bug-killer": "^1.0.0", - "clp": "^1.2.0", - "couleurs": "^3.0.0", - "giturlparse": "^1.2.0", - "gry": "^2.1.0", - "is-there": "^2.0.0", - "le-table": "^2.2.0", - "request": "^2.55.0", - "ul": "^2.1.0" + "always-error": "1.0.0", + "bluebird": "3.5.1", + "chdir-promise": "0.6.2", + "check-more-types": "2.24.0", + "cli-table": "0.3.1", + "colors": "1.3.2", + "commander": "2.17.1", + "d3-helpers": "0.3.0", + "debug": "3.2.6", + "find-up": "3.0.0", + "glob": "7.1.3", + "lazy-ass": "1.6.0", + "lodash": "4.17.15", + "moment": "2.23.0", + "moment-timezone": "0.5.23", + "optimist": "0.6.1", + "pluralize": "7.0.0", + "q": "2.0.3", + "quote": "0.4.0", + "ramda": "0.26.1", + "semver": "5.6.0" + }, + "bin": { + "ggit": "bin/ggit.js" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/ggit/node_modules/bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "node_modules/ggit/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "node_modules/ggit/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/ggit/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ggit/node_modules/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "node_modules/ggit/node_modules/moment": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz", + "integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/ggit/node_modules/pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ggit/node_modules/ramda": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", + "dev": true + }, + "node_modules/git-issues": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/git-issues/-/git-issues-1.3.1.tgz", + "integrity": "sha512-77jo6cR2az+VSaATg50oOR1uiUPI7Byiy62BLTx22Qkx8rhCNxApBkEzcQZ5Mkk56FnKtt3jEcTGvN/hCsdf1w==", + "dev": true, + "dependencies": { + "abs": "^1.0.0", + "bug-killer": "^4.0.0", + "clp": "^3.0.0", + "couleurs": "^5.0.0", + "git-url-parse": "^4.0.0", + "gry": "^4.1.0", + "is-there": "^4.1.0", + "le-table": "^4.0.0", + "request": "^2.55.0" }, "bin": { "git-issues": "bin/git-issues" @@ -12264,18 +13223,24 @@ "xtend": "~4.0.1" } }, - "node_modules/github": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/github/-/github-0.1.16.tgz", - "integrity": "sha512-IVtcAhrb2HsThCNs1MTPuntLk6C1km0Q4A+md/FD/00SgyyJc4+2XsG1UsF2SUM7enumAgP5VKGVqzyyUmuNCw==", - "deprecated": "'github' has been renamed to '@octokit/rest' (https://git.io/vNB11)", - "dev": true + "node_modules/git-up": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-1.2.1.tgz", + "integrity": "sha512-SRVN3rOLACva8imc7BFrB6ts5iISWKH1/h/1Z+JZYoUI7UVQM7gQqk4M2yxUENbq2jUUT09NEND5xwP1i7Ktlw==", + "dev": true, + "dependencies": { + "is-ssh": "^1.0.0", + "parse-url": "^1.0.0" + } }, - "node_modules/giturlparse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/giturlparse/-/giturlparse-1.2.0.tgz", - "integrity": "sha512-SaiYk1sXtKms17tlX2n5QC+pYwIahDPaI/XftAt6hHBo8FAXcflrm4APOsM24GeH1Bpku0+36VFSfK3/Q4g/Cw==", - "dev": true + "node_modules/git-url-parse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-4.2.1.tgz", + "integrity": "sha512-NVGrijTzKLAKElI2OfK0u3E8Wk62Hh6bgBOFCBFWcC8Dr6GOcou0PktbztEToLMpdE9u59bMEsZliyIVgkFz8w==", + "dev": true, + "dependencies": { + "git-up": "^1.0.0" + } }, "node_modules/glob": { "version": "7.2.3", @@ -12307,6 +13272,11 @@ "node": ">= 6" } }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==" + }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -12567,7 +13537,6 @@ "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", - "dev": true, "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -12593,32 +13562,22 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" - }, "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, "node_modules/gry": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gry/-/gry-2.1.0.tgz", - "integrity": "sha512-mmMBeRxkO0s28+cHWATodR2nLJW4xK17FTwiflYETiGUoWG+jl229M8CiLUjDNnyg+ryvfBnizBZn2ugcrD5Ng==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gry/-/gry-4.3.1.tgz", + "integrity": "sha512-QBplIkFdvdLGDW6UaAdpJvVJJzAbErHmfz2OYh/BULGy+NdRaDBYXH96s25Ahuht11n1yKlNyvZChf/sA5wXiQ==", "dev": true, "dependencies": { - "exec-limiter": "^1.0.0", - "ul": "^1.1.0" + "exec-limiter": "^3.0.0", + "one-by-one": "^2.0.0", + "ul": "^5.0.0" } }, - "node_modules/gry/node_modules/ul": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ul/-/ul-1.1.0.tgz", - "integrity": "sha512-Y5LddrglZ/lZMHSoGRXXOqPEB7M7iWV5s1XMcBzhEzY2u5mi0hYyJs1czSdEab0f4a0Iyh7lNydkVMQftnb8Nw==", - "dev": true - }, "node_modules/gtoken": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", @@ -12789,6 +13748,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -12800,6 +13768,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", @@ -12814,6 +13794,73 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -12882,9 +13929,31 @@ } }, "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/hpagent": { "version": "0.1.2", @@ -12893,6 +13962,11 @@ "dev": true, "optional": true }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, "node_modules/html-tags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", @@ -12922,6 +13996,54 @@ "entities": "^2.0.0" } }, + "node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/http-assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", @@ -13028,7 +14150,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -13188,11 +14309,11 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -13264,6 +14385,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -13452,14 +14582,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/into-stream/node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -13487,6 +14609,29 @@ "node": ">= 0.10" } }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -13560,6 +14705,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -13571,6 +14728,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -13585,6 +14753,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", @@ -13627,17 +14808,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/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", @@ -13682,6 +14852,46 @@ "node": ">=8" } }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally/node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -13713,6 +14923,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -13724,6 +14942,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -13754,6 +14984,15 @@ "node": ">=8" } }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-observable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", @@ -13842,7 +15081,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, "dependencies": { "is-unc-path": "^1.0.0" }, @@ -13850,6 +15088,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", @@ -13869,6 +15116,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "dependencies": { + "protocols": "^2.0.1" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -13925,9 +15181,9 @@ } }, "node_modules/is-there": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-there/-/is-there-2.0.0.tgz", - "integrity": "sha512-B4Hqwe1tqtVUHHYlfE8/Xupohp34DjYeGoFTfu2dnmD7bKlR7sgaaIGQVY0+mVhRFM+A94bo7FLgMHn2cTimdg==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/is-there/-/is-there-4.5.1.tgz", + "integrity": "sha512-vIZ7HTXAoRoIwYSsTnxb0sg9L6rth+JOulNcavsbskQkCIWoSM2cjFOWZs4wGziGZER+Xgs/HXiCQZgiL8ppxQ==", "dev": true }, "node_modules/is-typed-array": { @@ -13957,7 +15213,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, "dependencies": { "unc-path-regex": "^0.1.2" }, @@ -14018,7 +15273,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14034,6 +15288,12 @@ "node": ">=8" } }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -14072,164 +15332,24 @@ "node": ">=10.13" } }, - "node_modules/j": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/j/-/j-0.3.11.tgz", - "integrity": "sha512-w7qn1FaQtMmdzq26QHEYuPDyHaLMs6WMskGpbtxItEsrawYp/VsmDDAtTqJx0UH+Xr5GDSvhtvRB8eRuIHM4DQ==", - "deprecated": "The underlying libraries have been unified. See < https://cdn.sheetjs.com/j/ >.", + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, "dependencies": { - "commander": "", - "xlsjs": "~0.7.1", - "xlsx": "~0.7.8" - }, - "bin": { - "j": "bin/j.njs" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" }, "engines": { - "node": ">=0.8" + "node": ">= 4" } }, - "node_modules/j/node_modules/codepage": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.3.8.tgz", - "integrity": "sha512-cjAoQW5L/TCKWRbzt/xGBvhwJKQFhcIVO0jWQtpKQx4gr9qvXNkpRfq6gSmjjA8dB2Is/DPOb7gNwqQXP7UgTQ==", - "dependencies": { - "commander": "", - "concat-stream": "", - "voc": "" - }, - "bin": { - "codepage": "bin/codepage.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/j/node_modules/jszip": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.4.0.tgz", - "integrity": "sha512-m+yvNmYfRCaf1gr5YFT5e3fnSqLnE9McbNyRd0fNycsT0HltS19NKc18fh3Lvl/AIW/ovL6/MQ1JnfFg4G3o4A==", - "dependencies": { - "pako": "~0.2.5" - } - }, - "node_modules/j/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" - }, - "node_modules/j/node_modules/xlsx": { - "version": "0.7.12", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.7.12.tgz", - "integrity": "sha512-+dljNu2OdnbvAsjWZPlB4YMsJjC0JcNeR0cYH5lowp2YrxF55HjgD0jcff9alUDHxEKGw0nLIlbd9K+QbteEgg==", - "deprecated": "this version is no longer supported. More info at https://cdn.sheetjs.com/xlsx/", - "dependencies": { - "adler-32": "", - "cfb": ">=0.10.0", - "codepage": "~1.3.6", - "commander": "", - "crc-32": "", - "jszip": "2.4.0", - "ssf": "~0.8.1" - }, - "bin": { - "xlsx": "bin/xlsx.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/jade": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", - "integrity": "sha512-J76sbGKeLtu7uwW97Ntzb1UvGnpKTDplYa9ROr2gNRhM+SxvlBSG0Ees3TQ8+7ya2UVkzMEeFxhRhEpN68s7Tg==", - "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", - "dependencies": { - "character-parser": "1.2.1", - "clean-css": "^3.1.9", - "commander": "~2.6.0", - "constantinople": "~3.0.1", - "jstransformer": "0.0.2", - "mkdirp": "~0.5.0", - "transformers": "2.1.0", - "uglify-js": "^2.4.19", - "void-elements": "~2.0.1", - "with": "~4.0.0" - }, - "bin": { - "jade": "bin/jade.js" - } - }, - "node_modules/jade/node_modules/camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jade/node_modules/cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", - "dependencies": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "node_modules/jade/node_modules/commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==", - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/jade/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jade/node_modules/uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==", - "dependencies": { - "source-map": "~0.5.1", - "yargs": "~3.10.0" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - }, - "optionalDependencies": { - "uglify-to-browserify": "~1.0.0" - } - }, - "node_modules/jade/node_modules/wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jade/node_modules/yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==", - "dependencies": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } + "node_modules/iterate-object": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/iterate-object/-/iterate-object-1.3.4.tgz", + "integrity": "sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw==", + "dev": true }, "node_modules/java-properties": { "version": "1.0.2", @@ -14600,6 +15720,14 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, + "node_modules/jschardet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.0.0.tgz", + "integrity": "sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/jsdoc": { "version": "3.6.11", "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", @@ -14809,15 +15937,6 @@ "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz", "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==" }, - "node_modules/jstransformer": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", - "integrity": "sha512-b7tmf91j1ChMuYhwbPBnNgB62dmHuqiHpOdd6QLKzde8HydZqm+ud3qWreGWecSxPBFFNOf1Ozjx0xo2plFdHA==", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^6.0.1" - } - }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -14873,12 +15992,9 @@ } }, "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } @@ -15027,10 +16143,22 @@ "zlibjs": "^0.3.1" } }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lazy-ass": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.1.0.tgz", - "integrity": "sha512-WkoinARtzbvsXb1TPmBsJsNzSJzpWYsgQ84qI+u4g08EDjdn02Kl5Pb1amoiMvdz7qUcGXVgFibAKmrobRaMPQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, "engines": { "node": "> 0.8" @@ -15067,14 +16195,39 @@ } }, "node_modules/le-table": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/le-table/-/le-table-2.2.0.tgz", - "integrity": "sha512-XI0o3lrX9vy+3J8lffIP9qYvGFxnd1076bglLiAGc7qHlH6LabKSk1cv4LkcNOGrf0VKscH/T44enFFr5k6HqA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/le-table/-/le-table-4.2.2.tgz", + "integrity": "sha512-1PhE5bd0Rc6d8JAHJbDkxMq4S9qPdLwb+TRHtfgrN+V+1Rl4WSG8uY804q/kKjTuWy1BGcg/4ONX/N5fMQLXCQ==", "dev": true, "dependencies": { - "cli-box": "^2.1.1", - "overlap": "^1.5.0", - "ul": "2.1.0" + "cli-box": "5.0.0", + "overlap": "2.0.0", + "ul": "5.0.0" + } + }, + "node_modules/le-table/node_modules/deffy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.0.0.tgz", + "integrity": "sha512-Gcn10MX982lqx8XmJES2JvN8Im7h0lFwRanyQfkQG2wXko4SouD0pSGUlK6Do165Itfidhpssn6NqlRkKp/4ig==", + "dev": true, + "dependencies": { + "typpy": "^2.0.0" + } + }, + "node_modules/le-table/node_modules/typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + }, + "node_modules/le-table/node_modules/ul": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ul/-/ul-5.0.0.tgz", + "integrity": "sha512-/wMRf3ZchW/MHV8M0fWhxhUTeJAOgrxt6u/9snab4xuMTkCuHo7TH7nyMZxrsjNobAFC8UhCNwlwVVQdVbcf1w==", + "dev": true, + "dependencies": { + "deffy": "2.0.0", + "typpy": "2.0.0" } }, "node_modules/levn": { @@ -15141,10 +16294,13 @@ } }, "node_modules/limit-it": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/limit-it/-/limit-it-1.1.0.tgz", - "integrity": "sha512-mAF9vkb8SwnYTYTRBbvj5jSJmYkU/85Vvmqp9/aAMLpWwJOAo23oCIux+/LZjH9cF0KINONYBjvhbtdbPA5R2w==", - "dev": true + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/limit-it/-/limit-it-3.2.10.tgz", + "integrity": "sha512-T0NK99pHnkimldr1WUqvbGV1oWDku/xC9J/OqzJFsV1jeOS6Bwl8W7vkeQIBqwiON9dTALws+rX/XPMQqWerDQ==", + "dev": true, + "dependencies": { + "typpy": "^2.0.0" + } }, "node_modules/linebreak": { "version": "1.1.0", @@ -15773,6 +16929,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==" + }, "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", @@ -16059,7 +17220,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, "engines": { "node": ">=8" } @@ -16088,6 +17248,30 @@ "node": ">=12" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -16126,6 +17310,14 @@ "node": ">=4.0" } }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -16137,6 +17329,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -16298,12 +17501,13 @@ } }, "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", @@ -16321,56 +17525,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", @@ -16382,11 +17536,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/merge": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", @@ -16406,6 +17555,17 @@ "node": ">=0.10.0" } }, + "node_modules/merge-deep/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -16486,7 +17646,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, "engines": { "node": ">=4" } @@ -16536,14 +17695,6 @@ "node": ">=0.10.0" } }, - "node_modules/minimist-options/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/minstache": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minstache/-/minstache-1.2.0.tgz", @@ -16566,6 +17717,18 @@ "node": ">= 0.6.x" } }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mixin-object": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", @@ -16626,6 +17789,27 @@ "node": "*" } }, + "node_modules/moment-timezone": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", + "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", + "dev": true, + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone/node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/mongodb-core": { "version": "1.3.21", "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-1.3.21.tgz", @@ -16635,6 +17819,15 @@ "require_optional": "~1.0.0" } }, + "node_modules/months": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/months/-/months-1.2.0.tgz", + "integrity": "sha512-zFM7hUpziSYGk2DNObYGWgHdRRxAOgjl8CC1Rbl50p/q0rGDsREfk0nbxxmSIquVi/lEAuUY8nwbwkZ8biNCOQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -16790,10 +17983,38 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/nan": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz", - "integrity": "sha512-Wm2/nFOm2y9HtJfgOLnctGbfvF23FcQZeyUZqDD8JQG3zO5kXh3MkQKiUaA68mJiVWrOzLFkAV1u6bC8P52DJA==" + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/native-duplexpair": { "version": "1.0.0", @@ -17011,330 +18232,6 @@ "node-gyp-build-test": "build-test.js" } }, - "node_modules/node-inspector": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-inspector/-/node-inspector-0.7.5.tgz", - "integrity": "sha512-W/GkmmXenEqjBetAz1q4Xyrt4LP1MtB8WL/X7UfrwSxZmSSg4t+mgNCDP+037KkKwLGjRxRjNce0eJV5Tu/lvw==", - "dependencies": { - "async": "~0.8", - "debug": "~0.8", - "express": "~4.0", - "glob": "~3.2.1", - "opener": "~1.3.0", - "rc": "~0.3.0", - "strong-data-uri": "~0.1.0", - "which": "~1.0.5", - "ws": "~0.4.31", - "yargs": "~1.2.1" - }, - "bin": { - "node-debug": "bin/node-debug.js", - "node-inspector": "bin/inspector.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/node-inspector/node_modules/accepts": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.0.0.tgz", - "integrity": "sha512-2GdyQ5yRXA5MZi1gmU/XUFQTo7FtXsR2Jt90pl1pQftbsRdXQn69Mycn7xNGxVVmu1xdzZKe/GyMHnDlcV7ojg==", - "dependencies": { - "mime": "~1.2.11", - "negotiator": "~0.3.0" - } - }, - "node_modules/node-inspector/node_modules/async": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.8.0.tgz", - "integrity": "sha512-M2LC+aqW7VetFcnFiYEbjUsmASW6GSsMNkRzhUzwHoQNfNIRClf5GLgozwuJ4tAMLAfjywrKyQ2wWiODJivQmg==" - }, - "node_modules/node-inspector/node_modules/buffer-crc32": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz", - "integrity": "sha512-vMfBIRp/wjlpueSz7Sb0OmO7C5SH58SSmbsT8G4D48YfO/Zgbr29xNXMpZVSC14ujVJfrZZH1Bl+kXYRQPuvfQ==", - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==", - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/node-inspector/node_modules/cookie": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz", - "integrity": "sha512-YSNOBX085/nzHvrTLEHYHoNdkvpLU1MPjU3r1IGawudZJjfuqnRNIFrcOJJ7bfwC+HWbHL1Y4yMkC0O+HWjV7w==", - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/cookie-signature": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz", - "integrity": "sha512-/KzKzsm0OlguYov01OlOpTkX5MhBKUmfL/KMum7R80rPKheb9AwUzr78TwtBt1OdbnWrt4X+wxbTfcQ3noZqHw==" - }, - "node_modules/node-inspector/node_modules/debug": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", - "integrity": "sha512-HlXEJm99YsRjLJ8xmuz0Lq8YUwrv7hAJkTEr6/Em3sUlSUNl0UdFA+1SrY4fnykeq1FVkUEUtwRGHs9VvlYbGA==", - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/deep-extend": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz", - "integrity": "sha512-t2N+4ihO7YgydJOUI47I6GdXpONJ+jUZmYeTNiifALaEduiCja1mKcq3tuSp0RhA9mMfxdMN3YskpwB7puMAtw==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/node-inspector/node_modules/escape-html": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz", - "integrity": "sha512-z6kAnok8fqVTra7Yu77dZF2Y6ETJlxH58wN38wNyuNQLm8xXdKnfNrlSmfXsTePWP03rRVUKHubtUwanwUi7+g==" - }, - "node_modules/node-inspector/node_modules/express": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.0.0.tgz", - "integrity": "sha512-HP2D9TkAYTAfau6FklzmchQQH/7Dh/JmbrbiJanV80rO12Kc00z5tDrqahBG3fR6x/RuUZvpEwiQ91b7UhJ8qQ==", - "dependencies": { - "accepts": "1.0.0", - "buffer-crc32": "0.2.1", - "cookie": "0.1.0", - "cookie-signature": "1.0.3", - "debug": ">= 0.7.3 < 1", - "escape-html": "1.0.1", - "fresh": "0.2.2", - "merge-descriptors": "0.0.2", - "methods": "0.1.0", - "parseurl": "1.0.1", - "path-to-regexp": "0.1.2", - "qs": "0.6.6", - "range-parser": "1.0.0", - "send": "0.2.0", - "serve-static": "1.0.1", - "type-is": "1.0.0", - "utils-merge": "1.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/node-inspector/node_modules/fresh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.2.tgz", - "integrity": "sha512-ZGGi8GROK//ijm2gB33sUuN9TjN1tC/dvG4Bt4j6IWrVGpMmudUBCxx+Ir7qePsdREfkpQC4FL8W0jeSOsgv1w==" - }, - "node_modules/node-inspector/node_modules/glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha512-hVb0zwEZwC1FXSKRPFTeOtN7AArJcJlI6ULGLtrstaswKNlrTJqAA+1lYlSUop4vjA423xlBzqfVS3iWGlqJ+g==", - "dependencies": { - "inherits": "2", - "minimatch": "0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/ini": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz", - "integrity": "sha512-B6L/jfyFRcG2dqKiHggWnfby52Iy07iabE4F6srQAr/OmVKBRE5uU+B5MQ+nQ7NiYnjz93gENh1GhqHzpDgHgA==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==" - }, - "node_modules/node-inspector/node_modules/merge-descriptors": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz", - "integrity": "sha512-dYBT4Ep+t/qnPeJcnMymmhTdd4g8/hn48ciaDqLAkfRf8abzLPS6Rb6EBdz5CZCL8tzZuI5ps9MhGQGxk+EuKg==" - }, - "node_modules/node-inspector/node_modules/methods": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/methods/-/methods-0.1.0.tgz", - "integrity": "sha512-N4cn4CbDqu7Fp3AT4z3AsO19calgczhsmCGzXLCiUOrWg9sjb1B+yKFKOrnnPGKKvjyJBmw+k6b3adFN2LbuBw==" - }, - "node_modules/node-inspector/node_modules/mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha512-Ysa2F/nqTNGHhhm9MV8ure4+Hc+Y8AWiqUdHxsO7xu8zc92ND9f3kpALHjaP026Ft17UfxrMt95c50PLUeynBw==" - }, - "node_modules/node-inspector/node_modules/minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==" - }, - "node_modules/node-inspector/node_modules/negotiator": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.3.0.tgz", - "integrity": "sha512-q9wF64uB31BDZQ44DWf+8gE7y8xSpBdREAsJfnBO2WX9ecsutfUO6S9uWEdixlDLOlWaqnlnFXXwZxUUmyLfgg==", - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/parseurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.0.1.tgz", - "integrity": "sha512-6W9+0+9Ihayqwjgp4OaLLqZ3KDtqPY2PtUPz8YNiy4PamjJv+7x6J9GO93O9rUZOLgaanTPxsKTasxqKkO1iSw==" - }, - "node_modules/node-inspector/node_modules/path-to-regexp": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.2.tgz", - "integrity": "sha512-BZU7Qr+qKkXJX9UBypMNikdZ85cQSjtfMhUykJFLJn4SNF0jhEbb9nMRpnNdA76ESryY8JpMA4k6XKdz3JS1pw==" - }, - "node_modules/node-inspector/node_modules/qs": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", - "integrity": "sha512-kN+yNdAf29Jgp+AYHUmC7X4QdJPR8czuMWLNLc0aRxkQ7tB3vJQEONKKT9ou/rW7EbqVec11srC9q9BiVbcnHA==", - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/range-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.0.tgz", - "integrity": "sha512-wOH5LIH2ZHo0P7/bwkR+aNbJ+kv3CHVX4B8qs9GqbtY29fi1bGPV5xczrutN20G+Z4XhRqRMTW3q0S4iyJJPfw==" - }, - "node_modules/node-inspector/node_modules/rc": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/rc/-/rc-0.3.5.tgz", - "integrity": "sha512-QOAK72kdSN8d1wkK1QwHGksba0AyUT/tWQPsFQGHmBPSoPY8Boqr26YATE/nCt/RQ1+iijOUpDjY1QdWBVVMtw==", - "dependencies": { - "deep-extend": "~0.2.5", - "ini": "~1.1.0", - "minimist": "~0.0.7" - }, - "bin": { - "rc": "index.js" - } - }, - "node_modules/node-inspector/node_modules/send": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.2.0.tgz", - "integrity": "sha512-CR/kej5a8BChsMJwpmAtqOgdGI3nemoRaPcoXj/choHibvaOfkYcohcAbd9aEG8MhL9CfRH3KlUb+oHZsdNmTg==", - "dependencies": { - "debug": "*", - "fresh": "~0.2.1", - "mime": "~1.2.9", - "range-parser": "~1.0.0" - } - }, - "node_modules/node-inspector/node_modules/serve-static": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.0.1.tgz", - "integrity": "sha512-bo0TWkZYykHO97QfRgoaXQQBBmyheAb3MeYFzufTXDHUdaTwJXFa8NejuKbt7UdovoUzB8lJn4gHGQSEC+R4Nw==", - "dependencies": { - "send": "0.1.4" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/node-inspector/node_modules/serve-static/node_modules/fresh": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz", - "integrity": "sha512-ckGdAuSRr1wBmnq7CsW7eU37DBwQxHx3vW8foJUIrF56rkOy8Osm6Fe8KSwemwyKejivKki7jVBgpBpBJexmrw==" - }, - "node_modules/node-inspector/node_modules/serve-static/node_modules/range-parser": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz", - "integrity": "sha512-okJVEq9DbZyg+5lD8pr6ooQmeA0uu8DYIyAU7VK1WUUK7hctI1yw2ZHhKiKjB6RXaDrYRmTR4SsIHkyiQpaLMA==", - "engines": { - "node": "*" - } - }, - "node_modules/node-inspector/node_modules/serve-static/node_modules/send": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/send/-/send-0.1.4.tgz", - "integrity": "sha512-NJnIaB29/EcNqkNneUAm16oEVnzM2LeNBc/hmgKuExv2k9pCZQEw8SHJeCdjqesHJTyWAr7x5HjeOmRFS4BoFw==", - "dependencies": { - "debug": "*", - "fresh": "0.2.0", - "mime": "~1.2.9", - "range-parser": "0.0.4" - } - }, - "node_modules/node-inspector/node_modules/type-is": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.0.0.tgz", - "integrity": "sha512-CLdmAJgLeMtSPcTFX3eDdC1+ysfYoVdcYjMtuDtg23/fhHXoP5quNsvobr05ZNlG7og+oHQ4bosEzJX++DlIzQ==", - "dependencies": { - "mime": "~1.2.11" - } - }, - "node_modules/node-inspector/node_modules/utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha512-HwU9SLQEtyo+0uoKXd1nkLqigUWLB+QuNQR4OcmB73eWqksM5ovuqcycks2x043W8XVb75rG1HQ0h93TMXkzQQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-inspector/node_modules/which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha512-E87fdQ/eRJr9W1X4wTPejNy9zTW3FI2vpCZSJ/HAY+TkjKVC0TUm1jk6vn2Z7qay0DQy0+RBGdXxj+RmmiGZKQ==", - "bin": { - "which": "bin/which" - } - }, - "node_modules/node-inspector/node_modules/ws": { - "version": "0.4.32", - "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz", - "integrity": "sha512-htqsS0U9Z9lb3ITjidQkRvkLdVhQePrMeu475yEfOWkAYvJ6dSjQp1tOH6ugaddzX5b7sQjMPNtY71eTzrV/kA==", - "hasInstallScript": true, - "dependencies": { - "commander": "~2.1.0", - "nan": "~1.0.0", - "options": ">=0.0.5", - "tinycolor": "0.x" - }, - "bin": { - "wscat": "bin/wscat" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/node-inspector/node_modules/yargs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", - "integrity": "sha512-wwBCGnWIeR7M6d7Wmd4NT48TI8jEzRXFzmYGTNpsHZZ9Uu13vj+p6EawS7kGrzBvkX6rF7vYjUrQnwEOI7QOIw==", - "dependencies": { - "minimist": "^0.1.0" - } - }, - "node_modules/node-inspector/node_modules/yargs/node_modules/minimist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha512-wR5Ipl99t0mTGwLjQJnBjrP/O7zBbLZqvA3aw32DmLx+nXHfWctUjzDjnDx09pX1Po86WFQazF9xUzfMea3Cnw==" - }, "node_modules/node-nlp": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/node-nlp/-/node-nlp-4.24.0.tgz", @@ -17396,16 +18293,49 @@ } }, "node_modules/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==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -17580,8 +18510,7 @@ "node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, "node_modules/npm-run-path": { "version": "4.0.1", @@ -19992,6 +20921,17 @@ "inBundle": true, "license": "ISC" }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nugget": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.2.0.tgz", @@ -20055,6 +20995,84 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -20094,6 +21112,17 @@ "node": ">= 0.4" } }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -20152,6 +21181,15 @@ "wrappy": "1" } }, + "node_modules/one-by-one": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/one-by-one/-/one-by-one-2.2.1.tgz", + "integrity": "sha512-mHHNdoFnj1DAH2t1X6YKGyuVFi8EkIWhqgUrvdyLTuhMCVMfGFnVVgPGmLFVFzrIx2BEz+Xld4TtCGQwlyfqUw==", + "dev": true, + "dependencies": { + "deffy": "^2.0.0" + } + }, "node_modules/one-time": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", @@ -20195,14 +21233,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opener": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.3.0.tgz", - "integrity": "sha512-sBqelaOnn8SA+zefIj/VMXgIACr6URhyysMn2DEx2fTcbmyDbPf8wWs5rPgoR2SVRBk1oNYl8YE7LwV84FCJCg==", - "bin": { - "opener": "opener.js" + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", + "dev": true, + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", + "dev": true + }, "node_modules/option": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", @@ -20224,14 +21270,6 @@ "node": ">= 0.8.0" } }, - "node_modules/options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -20481,19 +21519,43 @@ } }, "node_modules/overlap": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/overlap/-/overlap-1.5.0.tgz", - "integrity": "sha512-R9J9wul7UmFFTr7jJIFIj1o6WhPWkxK1Q1tI7LxjUUB7y9FvO/p+zpLRA85C7WRnR11QFx/OrFkE1lib5vYfRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/overlap/-/overlap-2.0.0.tgz", + "integrity": "sha512-ws+kLVh3SdfWupIOWklnU91UHix2PU85bJf52/TPoo0EFgEYhKB6+2fCM/NuPreWMuM51cXN4xNbygNqkL8YrQ==", "dev": true, "dependencies": { - "ansi-parser": "1.4.0" + "ansi-parser": "3.0.0", + "cli-box": "5.0.0", + "couleurs": "5.0.0" } }, + "node_modules/overlap/node_modules/ansi-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-3.0.0.tgz", + "integrity": "sha512-edNYJqqmeQJ+N7YV6gWQ4xAumqctsOchnNVDZEHsMSVZcytGLwq9SbGDwm9Jg+XpPNdl6zSGgujFRqiu1PmFYg==", + "dev": true + }, + "node_modules/overlap/node_modules/couleurs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-5.0.0.tgz", + "integrity": "sha512-B+loDDlwPNwI27lC2WLJX9EqDhYV97nkUq4in2mJVco3P53hDztcIu3kUhrqS4+eb6w7dL9WcXADkn7V2DQFOw==", + "dev": true, + "dependencies": { + "flat-colors": "3.0.0", + "typpy": "2.0.0", + "x256": "0.0.2" + } + }, + "node_modules/overlap/node_modules/typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, "engines": { "node": ">=8" } @@ -20545,6 +21607,14 @@ "node": ">=8" } }, + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -20575,7 +21645,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -20603,6 +21672,27 @@ "node": ">=8" } }, + "node_modules/p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-timeout/node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -20611,6 +21701,196 @@ "node": ">=6" } }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/cacheable-request/node_modules/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, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json/node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/package-json/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/package-json/node_modules/got/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-json/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "node_modules/package-json/node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/package-json/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/package-json/node_modules/responselike/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -20637,6 +21917,15 @@ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" }, + "node_modules/parse-it": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/parse-it/-/parse-it-1.0.10.tgz", + "integrity": "sha512-VAG4EuoNd2TT2wSRUuKyLEkZR3MhdWc+3UPp5CDQzqSt/FiniG+yJ5RXyJYiuzVAMEKL4d97gx6O3LR5jEB3uQ==", + "dev": true, + "dependencies": { + "regex-escape": "^3.4.0" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -20668,6 +21957,45 @@ "node": ">=0.10.0" } }, + "node_modules/parse-url": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz", + "integrity": "sha512-1wj9nkgH/5EboDxLwaTMGJh3oH3f+Gue+aGdh631oCqoSBpokzmMmOldvOeBPtB8GJBYJbaF93KPzlkU+Y1ksg==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "node_modules/parse-url/node_modules/protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, + "node_modules/parse5": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -20676,6 +22004,14 @@ "node": ">= 0.8" } }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -20685,6 +22021,11 @@ "util": "^0.10.3" } }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" + }, "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -20756,9 +22097,9 @@ } }, "node_modules/pdf-text-extract": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pdf-text-extract/-/pdf-text-extract-1.1.3.tgz", - "integrity": "sha512-cFL9it2Iu+KLoH7QA2RLNESyc0OLno4u2OqY5QcUrD32xg0AVLZ1UAq1bWClVaxHjmi4C2ilfea/edxv4kQgAQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pdf-text-extract/-/pdf-text-extract-1.5.0.tgz", + "integrity": "sha512-5zpNQljVf4h0b9sY8KGKDHxYoTYqDjahvkxmpHwpxBe3p92AWnscpWausl5/OaedOgnS8Pw53DOQx7bqtYcpow==", "dependencies": { "yargs": "^1.2.5" }, @@ -20943,6 +22284,59 @@ "node": ">=4" } }, + "node_modules/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==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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==", + "engines": { + "node": ">=8" + } + }, "node_modules/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -20964,6 +22358,15 @@ "semver-compare": "^1.0.0" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/png-js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", @@ -20977,6 +22380,20 @@ "node": ">=10.13.0" } }, + "node_modules/pop-iterate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pop-iterate/-/pop-iterate-1.0.1.tgz", + "integrity": "sha512-HRCx4+KJE30JhX84wBN4+vja9bNfysxg1y28l0DuJmkoaICiv2ZSilKddbS48pq50P8d2erAhqDLbp47yv3MbQ==", + "dev": true + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pptxtemplater": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/pptxtemplater/-/pptxtemplater-1.0.5.tgz", @@ -21027,6 +22444,15 @@ "node": ">= 0.8.0" } }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/prettier-standard": { "version": "15.0.1", "resolved": "https://registry.npmjs.org/prettier-standard/-/prettier-standard-15.0.1.tgz", @@ -21738,19 +23164,6 @@ "through2": "~0.2.3" } }, - "node_modules/promise": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", - "integrity": "sha512-O+uwGKreKNKkshzZv2P7N64lk6EP17iXBn0PbUnNQhk+Q0AHLstiTrjkx3v5YBd3cxUe7Sq6KyRhl/A0xUjk7Q==", - "dependencies": { - "asap": "~1.0.0" - } - }, - "node_modules/promise/node_modules/asap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", - "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" - }, "node_modules/promised-mongo": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/promised-mongo/-/promised-mongo-1.2.0.tgz", @@ -21915,10 +23328,31 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/protobufjs-cli/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/protobufjs-cli/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/protobufjs-cli/node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { "node": ">=4.0" } @@ -22006,6 +23440,12 @@ "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" }, + "node_modules/protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -22137,6 +23577,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/public-ip/node_modules/form-data-encoder": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.3.tgz", + "integrity": "sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ==", + "engines": { + "node": ">= 14.17" + } + }, "node_modules/public-ip/node_modules/got": { "version": "12.5.3", "resolved": "https://registry.npmjs.org/got/-/got-12.5.3.tgz", @@ -22256,6 +23704,18 @@ "node": ">=6" } }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/puppeteer": { "version": "19.2.2", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.2.2.tgz", @@ -22472,6 +23932,17 @@ "node": ">=10" } }, + "node_modules/q": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/q/-/q-2.0.3.tgz", + "integrity": "sha512-gv6vLGcmAOg96/fgo3d9tvA4dJNZL3fMyBqVRrGxQ+Q/o4k9QzbJ3NQF9cOO/71wRodoXhaPgphvMFU68qVAJQ==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "pop-iterate": "^1.0.1", + "weak-map": "^1.0.5" + } + }, "node_modules/qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", @@ -22649,6 +24120,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -22693,6 +24178,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/quote": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/quote/-/quote-0.4.0.tgz", + "integrity": "sha512-KHp3y3xDjuBhRx+tYKOgzPnVHMRlgpn2rU450GcU4PL24r1H6ls/hfPrxDwX2pvYMlwODHI2l8WwgoV69x5rUQ==", + "dev": true + }, + "node_modules/ramda": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", + "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -22715,6 +24216,17 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -22763,7 +24275,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", - "dev": true, "dependencies": { "glob": "^7.1.1", "json-parse-even-better-errors": "^2.3.0", @@ -22771,6 +24282,22 @@ "npm-normalize-package-bin": "^1.0.0" } }, + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/read-package-json/node_modules/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==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -22851,6 +24378,22 @@ "node": ">=8" } }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/read-pkg/node_modules/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==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -22938,7 +24481,6 @@ "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, "dependencies": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", @@ -22982,6 +24524,14 @@ "esprima": "~4.0.0" } }, + "node_modules/reduce-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", + "integrity": "sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -22992,6 +24542,36 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, + "node_modules/regex-escape": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/regex-escape/-/regex-escape-3.4.10.tgz", + "integrity": "sha512-qEqf7uzW+iYcKNLMDFnMkghhQBnGdivT6KqVQyKsyjSWnoFyooXVnxrw9dtv3AFLnD6VBGXxtZGAQNFGFTnCqA==", + "dev": true + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -23031,6 +24611,26 @@ "node": ">=6.0.0" } }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -23039,20 +24639,6 @@ "node": ">=0.10" } }, - "node_modules/repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha512-Nh30JLeMHdoI+AsQ5eblhZ7YlTsM9wiJQe/AHIunlK3KWzvXhXb36IJ7K1IOeRjIOtzMjdUHjwXUFxKJoPTSOg==", - "dependencies": { - "is-finite": "^1.0.0" - }, - "bin": { - "repeating": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -23306,11 +24892,16 @@ "node": ">=8" } }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, "node_modules/responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -23336,6 +24927,14 @@ "resolved": "https://registry.npmjs.org/restructure/-/restructure-2.0.1.tgz", "integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg==" }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -23381,17 +24980,6 @@ "node": ">=0.10.0" } }, - "node_modules/right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", - "dependencies": { - "align-text": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -23481,6 +25069,14 @@ } ] }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dependencies": { + "ret": "~0.1.10" + } + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -23572,17 +25168,6 @@ "node": ">=16 || ^14.17" } }, - "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semantic-release/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -23906,6 +25491,28 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -24170,6 +25777,179 @@ "node": "*" } }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -24178,6 +25958,25 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, "node_modules/spawn-error-forwarder": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", @@ -24263,6 +26062,29 @@ "node": "*" } }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split2": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", @@ -24286,16 +26108,11 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/ssf": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.8.2.tgz", - "integrity": "sha512-+ZkFDAG+ImJ48DcZvabx6YTrZ67DKkM0kbyOOtH73mbUEvNhQWWgRZrHC8+k7GuGKWQnACYLi7bj0eCt1jmosQ==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", "dependencies": { - "colors": "0.6.2", - "frac": "0.3.1", - "voc": "" - }, - "bin": { - "ssf": "bin/ssf.njs" + "frac": "~1.1.2" }, "engines": { "node": ">=0.8" @@ -24348,18 +26165,6 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz", "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==" }, - "node_modules/ssr-for-bots/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ssr-for-bots/node_modules/https-proxy-agent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", @@ -24372,47 +26177,6 @@ "node": ">= 6.0.0" } }, - "node_modules/ssr-for-bots/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ssr-for-bots/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ssr-for-bots/node_modules/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ssr-for-bots/node_modules/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==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ssr-for-bots/node_modules/puppeteer": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-5.5.0.tgz", @@ -24464,6 +26228,100 @@ "node": ">=8" } }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-methods": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/static-methods/-/static-methods-1.0.12.tgz", + "integrity": "sha512-QreySTr3LHtHk0OhrZ3RKvrV/4nBRyUPPCycmTUQTENIopEaDalZzI+q+KfmNmcxeHhA3WKe3h25lAxXZEDGVw==", + "dev": true + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -24525,6 +26383,15 @@ "lodash": "^4.15.0" } }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -24560,11 +26427,6 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/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==" - }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -24688,17 +26550,6 @@ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, - "node_modules/strong-data-uri": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strong-data-uri/-/strong-data-uri-0.1.1.tgz", - "integrity": "sha512-2DXKICrngSlPD7F8qOvmZ/S2J8z7kBlL1c81dDCr7Ojx2qSrQiV8sQRYKnQkqz9npOewj62B2oa8QFmh+hgSkA==", - "dependencies": { - "truncate": "~1.0.2" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/strtok3": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", @@ -24834,11 +26685,6 @@ "url": "~0.11.0" } }, - "node_modules/swagger-client/node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" - }, "node_modules/swagger-client/node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -24871,6 +26717,37 @@ "node": ">=6.0.0" } }, + "node_modules/table-layout": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", + "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", + "dependencies": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==" + }, "node_modules/table/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -25061,17 +26938,6 @@ "ieee754": "^1.2.1" } }, - "node_modules/tedious/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/tedious/node_modules/jsbi": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", @@ -25227,113 +27093,6 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "node_modules/textract": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/textract/-/textract-0.20.0.tgz", - "integrity": "sha512-B/dgAGxWsgy7tb8qyeYrw2v1rHv76jkO8+PlezbrDe+OxH0Vhye0ijs0wnK2D+9cW1S75TNg3qzjJbwo+2gcmQ==", - "dependencies": { - "cheerio": "0.17.0", - "j": "0.3.11", - "meow": "2.0.0", - "mime": "1.2.9", - "pdf-text-extract": "1.1.3", - "xmldom": "0.1.16", - "xpath": "0.0.5" - }, - "bin": { - "textract": "bin/textract" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/textract/node_modules/camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textract/node_modules/camelcase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz", - "integrity": "sha512-hwNYKTjJTlDabjJp2xn0h8bRmOpObvXVgYbQmR+Xob/EeBDtYea3xttjr5hqiWqLWtI3/6xO7x1ZAktQ9up+ag==", - "dependencies": { - "camelcase": "^1.0.1", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textract/node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textract/node_modules/indent-string": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-1.2.2.tgz", - "integrity": "sha512-Z1vqf6lDC3f4N2mWqRywY6odjRatPNGDZgUr4DY9MLC14+Fp2/y+CI/RnNGlb8hD6ckscE/8DlZUwHUaiDBshg==", - "dependencies": { - "get-stdin": "^4.0.1", - "minimist": "^1.1.0", - "repeating": "^1.1.0" - }, - "bin": { - "indent-string": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textract/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textract/node_modules/meow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-2.0.0.tgz", - "integrity": "sha512-X7rkdgy5Wxxp2MhCiAOkC3lqfkrJkt3iXvW4BY0rYQIn3GMvYvBTsAPEmHHTjTeVzBelrRcQa2F80rYfigz2+A==", - "dependencies": { - "camelcase-keys": "^1.0.0", - "indent-string": "^1.1.0", - "minimist": "^1.1.0", - "object-assign": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textract/node_modules/mime": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.9.tgz", - "integrity": "sha512-WiLgbHTIq5AYUvU/Luli4mZ1bUcHpGNHyCsbl+KPMg4zt+XUDpQehWjuBjdLaEvDTinvKj/FgfQt3fPoT7j08g==" - }, - "node_modules/textract/node_modules/object-assign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz", - "integrity": "sha512-LpUkixU1BUMQ6bwUHbOue4IGGbdRbxi+IEZw7zHniw78erlxrKGHbhfLbHIsI35LGbGqys6QOrjVmLnD2ie+1A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textract/node_modules/xpath": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.5.tgz", - "integrity": "sha512-Y1Oyy8lyIDwWpmKIWBF0RZrQOP1fzE12G0ekSB1yzKPtbAdCI5sBCqBU/CAZUkKk81OXuq9tul/5lyNS+22iKg==", - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/throttleit": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", @@ -25390,6 +27149,15 @@ "node": ">=0.4" } }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/timers-ext": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", @@ -25404,14 +27172,6 @@ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, - "node_modules/tinycolor": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz", - "integrity": "sha512-+CorETse1kl98xg0WAzii8DTT4ABF4R3nquhrkIbVGcw1T8JYs5Gfx9xEfGINPUZGDj9C4BmOtuKeaTtuuRolg==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -25432,6 +27192,51 @@ "node": ">=4" } }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -25443,6 +27248,18 @@ "node": ">=8.0" } }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -25498,64 +27315,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/transformers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", - "integrity": "sha512-zJf5m2EIOngmBbDe2fhTPpCjzM2qkZVqrFJZc2jaln+KBeEaYKhS2QMOIkfVrNUyoOwqgbTwOHATzr3jZRQDyg==", - "deprecated": "Deprecated, use jstransformer", - "dependencies": { - "css": "~1.0.8", - "promise": "~2.0", - "uglify-js": "~2.2.5" - } - }, - "node_modules/transformers/node_modules/is-promise": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", - "integrity": "sha512-mjWH5XxnhMA8cFnDchr6qRP9S/kLntKuEfIYku+PaN1CnS8v+OG9O/BKpRCVRJvpIkgAZm0Pf5Is3iSSOILlcg==" - }, - "node_modules/transformers/node_modules/optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", - "dependencies": { - "wordwrap": "~0.0.2" - } - }, - "node_modules/transformers/node_modules/promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", - "integrity": "sha512-OgMc+sxI3zWF8D5BJGtA0z7/IsrDy1/0cPaDv6HPpqa2fSTo7AdON5U10NbZCUeF+zCAj3PtfPE50Hf02386aA==", - "dependencies": { - "is-promise": "~1" - } - }, - "node_modules/transformers/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/transformers/node_modules/uglify-js": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", - "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", - "dependencies": { - "optimist": "~0.3.5", - "source-map": "~0.1.7" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", @@ -25564,47 +27323,189 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/travis-ci": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/travis-ci/-/travis-ci-2.2.0.tgz", - "integrity": "sha512-6m+VoKD/va53D4O8I1SLtoLXKLHVUoEL2GksMKLUR0yUqYqco2kj5QB4gdBdFAMw3XL0VBozFsGw8jb6MrrIEQ==", - "dev": true, - "dependencies": { - "github": "~0.1.10", - "lodash": "~1.3.1", - "request": "^2.87.0", - "underscore.string": "~2.2.0rc" - }, - "bin": { - "travis-ci": "bin/travis-ci.js" - } - }, - "node_modules/travis-ci/node_modules/lodash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.3.1.tgz", - "integrity": "sha512-F7AB8u+6d00CCgnbjWzq9fFLpzOMCgq6mPjOW4+8+dYbrnc0obRrC+IHctzfZ1KKTQxX0xo/punrlpOWcf4gpw==", - "dev": true, - "engines": [ - "node", - "rhino" - ] - }, "node_modules/travis-deploy-once": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/travis-deploy-once/-/travis-deploy-once-3.0.0.tgz", - "integrity": "sha512-ST4Rs/WrAeq6MXi9/Iagw7p1MLje1mPV1UqGXB2jvBAweBlFHOjqbBvfpGLjmI+ZckOc2FkX0X1gNBOa9nc13w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/travis-deploy-once/-/travis-deploy-once-3.3.0.tgz", + "integrity": "sha512-N0l+sdYHMQbJmQWfjmxkKRJrMWJ+52Ve1dhGDiPhGXFiWO0A0zSeTxiFujz0rSOLOl9OhsZ9EMlJh2lNrgGugA==", "deprecated": "We recommend to use Travis Build Stages instead", "dev": true, "dependencies": { "chalk": "^2.1.0", + "got": "^8.0.1", "p-retry": "^1.0.0", "semver": "^5.4.1", - "travis-ci": "^2.1.1" + "url-join": "^2.0.2" }, "engines": { "node": ">=4" } }, + "node_modules/travis-deploy-once/node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/travis-deploy-once/node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", + "dev": true, + "dependencies": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, + "node_modules/travis-deploy-once/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/travis-deploy-once/node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/travis-deploy-once/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/travis-deploy-once/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/travis-deploy-once/node_modules/got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/travis-deploy-once/node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "node_modules/travis-deploy-once/node_modules/into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", + "dev": true, + "dependencies": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/travis-deploy-once/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "node_modules/travis-deploy-once/node_modules/keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/travis-deploy-once/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/travis-deploy-once/node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/travis-deploy-once/node_modules/p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/travis-deploy-once/node_modules/p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/travis-deploy-once/node_modules/p-retry": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-1.0.0.tgz", @@ -25617,6 +27518,24 @@ "node": ">=4" } }, + "node_modules/travis-deploy-once/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/travis-deploy-once/node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, "node_modules/travis-deploy-once/node_modules/retry": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", @@ -25626,6 +27545,12 @@ "node": "*" } }, + "node_modules/travis-deploy-once/node_modules/url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow==", + "dev": true + }, "node_modules/treeify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", @@ -25659,12 +27584,321 @@ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, - "node_modules/truncate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/truncate/-/truncate-1.0.5.tgz", - "integrity": "sha512-rVvPVihrjbMJ4ISBmQMky7YNPj24oiGigLEggNbQnClOF8NIs7FL9UBAAhXy7GN93Hpk1hE6AjIpAXp3Gv55dw==", + "node_modules/ts-morph": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-1.3.5.tgz", + "integrity": "sha512-GvndIxlv8Bwv8AS3HZmLdl+84KAc7foXgiW6TKXJeESN00PAmosj/G/XO9TDb2m5UJ9616OlC1oVlm3HjuzeGg==", + "dependencies": { + "@dsherret/to-absolute-glob": "^2.0.2", + "code-block-writer": "7.2.2", + "fs-extra": "^7.0.0", + "glob-parent": "^3.1.0", + "globby": "^8.0.1", + "is-negated-glob": "^1.0.0", + "multimatch": "^2.1.0", + "tslib": "^1.9.0", + "typescript": ">=3.0.1 <3.6.0" + } + }, + "node_modules/ts-morph/node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "engines": { - "node": "*" + "node": ">= 6" + } + }, + "node_modules/ts-morph/node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dependencies": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-morph/node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ts-morph/node_modules/fast-glob/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/ts-morph/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/ts-morph/node_modules/globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-morph/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "node_modules/ts-morph/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/ts-morph/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha512-0mzK8ymiWdehTBiJh0vClAzGyQbdtyWqzSVx//EK4N/D+599RFlGfTAsKw2zMSABtDG9C6Ul2+t8f2Lbdjf5mA==", + "dependencies": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-morph/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-morph/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-morph/node_modules/typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ts-morph/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" } }, "node_modules/ts-node": { @@ -25731,6 +27965,30 @@ "node": ">=0.4.0" } }, + "node_modules/ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "peer": true + }, + "node_modules/ts-type": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ts-type/-/ts-type-3.0.1.tgz", + "integrity": "sha512-cleRydCkBGBFQ4KAvLH0ARIkciduS745prkGVVxPGvcRGhMMoSJUB7gNR1ByKhFTEYrYRg2CsMRGYnqp+6op+g==", + "dependencies": { + "@types/node": "*", + "tslib": ">=2", + "typedarray-dts": "^1.0.0" + }, + "peerDependencies": { + "ts-toolbelt": "^9.6.0" + } + }, + "node_modules/ts-type/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -25783,7 +28041,15 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/tslint/node_modules/tsutils": { + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", @@ -25794,14 +28060,6 @@ "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "engines": { - "node": ">=0.6.x" - } - }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -25884,6 +28142,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "node_modules/typedarray-dts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typedarray-dts/-/typedarray-dts-1.0.0.tgz", + "integrity": "sha512-Ka0DBegjuV9IPYFT1h0Qqk5U4pccebNIJCGl8C5uU7xtOs+jpJvKGAY4fHGK25hTmXZOEUl9Cnsg5cS6K/b5DA==" + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -25905,11 +28168,15 @@ } }, "node_modules/typescript-rest-rpc": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typescript-rest-rpc/-/typescript-rest-rpc-1.0.7.tgz", - "integrity": "sha512-blwtOLRkb7AALcwrr+X/+MAiEL7WVnLaDIBfb4HwVDwn/a8J35k76DXvDnnZOeUtUzKZ42XmcIw0oykuoqSh7g==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/typescript-rest-rpc/-/typescript-rest-rpc-1.0.10.tgz", + "integrity": "sha512-LbrCfBGNldOkkU9lk1Cgl8q/qp9zWitVETj+orfIWS0vuqZj3KQBWT1Gf4Jubig4n28ciSojqCLBEgndiC7MFQ==", "dependencies": { - "moment": "^2.22.1" + "command-line-args": "^5.0.2", + "command-line-usage": "^5.0.5", + "moment": "^2.22.1", + "ts-morph": "^1.0.0", + "write-yaml": "^1.0.0" } }, "node_modules/typescript-rest-rpc/node_modules/moment": { @@ -25920,6 +28187,14 @@ "node": "*" } }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "engines": { + "node": ">=8" + } + }, "node_modules/typpy": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.3.11.tgz", @@ -25949,17 +28224,15 @@ "node": ">=0.8.0" } }, - "node_modules/uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", - "optional": true - }, "node_modules/ul": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ul/-/ul-2.1.0.tgz", - "integrity": "sha512-0R6FDJ4LSs71F6Ux8JurCYm5bQixMxs/nvyNZnIkh4tQ0xJzMz7RGq9+WHusFAYwYSCaT6xHauWDvQrdXNR9AA==", - "dev": true + "version": "5.2.15", + "resolved": "https://registry.npmjs.org/ul/-/ul-5.2.15.tgz", + "integrity": "sha512-svLEUy8xSCip5IWnsRa0UOg+2zP0Wsj4qlbjTmX6GJSmvKMHADBuHOm1dpNkWqWPIGuVSqzUkV3Cris5JrlTRQ==", + "dev": true, + "dependencies": { + "deffy": "^2.2.2", + "typpy": "^2.3.4" + } }, "node_modules/umzug": { "version": "2.3.0", @@ -25999,7 +28272,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -26009,15 +28281,6 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, - "node_modules/underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", - "integrity": "sha512-3FVmhXqelrj6gfgp3Bn6tOavJvW0dNH2T+heTD38JRxIrAbiuzbqjknszoOYj3DyFB1nWiLj208Qt2no/L4cIA==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/unicode-properties": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", @@ -26041,6 +28304,28 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -26073,6 +28358,50 @@ "node": ">= 0.8" } }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unzipper": { "version": "0.10.11", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", @@ -26121,6 +28450,137 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/update-notifier/node_modules/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 + }, + "node_modules/update-notifier/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/update-notifier/node_modules/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -26129,6 +28589,12 @@ "punycode": "^2.1.0" } }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -26155,16 +28621,45 @@ "requires-port": "^1.0.0" } }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/utf-8-validate": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", @@ -26332,25 +28827,6 @@ "node": ">=0.4.0" } }, - "node_modules/voc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/voc/-/voc-1.2.0.tgz", - "integrity": "sha512-BOuDjFFYvJdZO6e/N65AlaDItXo2TgyLjeyRYcqgAPkXpp5yTJcvkL2n+syO1r9Qc5g96tfBD2tuiMhYDmaGcA==", - "bin": { - "voc": "voc.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/walk-promise": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/walk-promise/-/walk-promise-0.2.0.tgz", @@ -26382,6 +28858,12 @@ "defaults": "^1.0.3" } }, + "node_modules/weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==", + "dev": true + }, "node_modules/web-streams-polyfill": { "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", @@ -26451,18 +28933,6 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==" }, - "node_modules/whatsapp-web.js/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/whatsapp-web.js/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -26477,47 +28947,6 @@ "node": ">=12" } }, - "node_modules/whatsapp-web.js/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/whatsapp-web.js/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/whatsapp-web.js/node_modules/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/whatsapp-web.js/node_modules/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==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/whatsapp-web.js/node_modules/puppeteer": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", @@ -26637,12 +29066,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==", + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, "node_modules/winston": { @@ -26666,46 +29099,6 @@ "node": ">= 12.0.0" } }, - "node_modules/winston-logs-display": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/winston-logs-display/-/winston-logs-display-1.0.0.tgz", - "integrity": "sha512-CTb3VKNNRDPEiFwGKftpaNwzERuZ/UO3bbRaZU/hce8IWPC5/SFZ78vdjvgppoK53P8hVIglj1ArJM2oZj2FuA==", - "dependencies": { - "bluebird": "^3.5.1", - "express": "^4.9.4", - "jade": "^1.7.0", - "lodash": "^4.17.5", - "serve-static": "^1.10.1", - "winston": "^2.4.2" - }, - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/winston-logs-display/node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/winston-logs-display/node_modules/winston": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.7.tgz", - "integrity": "sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==", - "dependencies": { - "async": "^2.6.4", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - }, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/winston-transport": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", @@ -26750,26 +29143,6 @@ "node": ">= 6" } }, - "node_modules/with": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", - "integrity": "sha512-mJZFpyEc1JTAdxhi/vhVeAM2S7vsltEKDiexDDo1HuAzlYKhcVUU6cwY8cHrFYdt82ZNkfKCeyhA3IYFegI0Kg==", - "dependencies": { - "acorn": "^1.0.1", - "acorn-globals": "^1.0.3" - } - }, - "node_modules/with/node_modules/acorn": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", - "integrity": "sha512-FsqWmApWGMGLKKNpHt12PMc5AK7BaZee0WRh04fCysmTzHe+rrKOa2MKjORhnzfpe4r0JnfdqHn02iDA9Dqj2A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", @@ -26806,10 +29179,28 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "dev": true, "engines": { "node": ">=0.4.0" } }, + "node_modules/wordwrapjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", + "dependencies": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -26874,6 +29265,54 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/write": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/write/-/write-0.3.3.tgz", + "integrity": "sha512-e63bsTAFxFUU8OGClhjhhf2R72Njpq6DDTOFFBxDkfZFwoRRKZUx9rll6g/TvY0UcCdKE2OroYZje0v9ROzmfA==", + "dependencies": { + "fs-exists-sync": "^0.1.0", + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-yaml": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/write-yaml/-/write-yaml-1.0.0.tgz", + "integrity": "sha512-QFB0QwNlUTSsICNb1HV+822MvFpTC1gtKcOfm0B9oqz4qOQXbRuMSxWPWryTEFBEZDWbI5zXabXArvShXTdLiA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "js-yaml": "^3.8.3", + "write": "^0.3.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/write-yaml/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -26903,23 +29342,13 @@ "node": ">=0.4.0" } }, - "node_modules/xlsjs": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/xlsjs/-/xlsjs-0.7.6.tgz", - "integrity": "sha512-IQtL2z+BVYaIVzEhknZ1YBr8ItUbqiS7kaQZ3O35/k1q+kSgjVxmzwno6r3EbBgEWhrVCad2mKbnFeMmEE5zdw==", - "deprecated": "xlsjs has been merged into xlsx", - "dependencies": { - "cfb": "~0.11.0", - "codepage": "", - "commander": "", - "exit-on-epipe": "", - "ssf": "~0.8.1" - }, - "bin": { - "xls": "bin/xls.njs" - }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, "engines": { - "node": ">=0.8" + "node": ">=8" } }, "node_modules/xlsx": { @@ -26942,37 +29371,6 @@ "node": ">=0.8" } }, - "node_modules/xlsx/node_modules/cfb": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", - "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", - "dependencies": { - "adler-32": "~1.3.0", - "crc-32": "~1.2.0" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/xlsx/node_modules/frac": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", - "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/xlsx/node_modules/ssf": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", - "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", - "dependencies": { - "frac": "~1.1.2" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -27011,15 +29409,6 @@ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" }, - "node_modules/xmldom": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.16.tgz", - "integrity": "sha512-BAf7j3VCoH0YKmJkdN1yXDeHRj+T9Z2oxIhuaSvX3NigmNEInT9o9We6T+Ruh75hLZQBnATmekSmd0nd6GGrow==", - "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", - "engines": { - "node": ">=0.1" - } - }, "node_modules/xpath": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", @@ -28197,6 +30586,15 @@ "parse-cache-control": "^1.0.1" } }, + "@dsherret/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-InCaQ/KEOcFtAFztn47wadritBLP2nT6m/ucbBnIgI5YwxuMzKKCHtqazR2+D1yR6y1ZTnPea9aLFEUrTttUSQ==", + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, "@eslint/eslintrc": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", @@ -28653,6 +31051,15 @@ "@microsoft/recognizers-text-sequence": "~1.1.4" } }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -28782,25 +31189,6 @@ "requires": { "escodegen": "^2.0.0", "esprima": "^4.0.1" - }, - "dependencies": { - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } } }, "@nlpjs/lang-all": { @@ -29300,6 +31688,27 @@ "fastq": "^1.6.0" } }, + "@nosferatu500/textract": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nosferatu500/textract/-/textract-3.1.2.tgz", + "integrity": "sha512-3RqQ40pWnrKBAju1d9Iiui2uf7xMXZjJV73NwDae8LfDn01VclXTHpfqFeQXPtpumck0Ym3AkOUiAPN3eNdcxw==", + "requires": { + "@xmldom/xmldom": "^0.8.6", + "cheerio": "1.0.0-rc.12", + "epub2": "1.3.8", + "got": "^11.8.5", + "html-entities": "^2.3.3", + "iconv-lite": "0.6.3", + "jschardet": "3.0.0", + "marked": "^4.2.2", + "meow": "^9.0.0", + "mime": "3.0.0", + "pdf-text-extract": "1.5.0", + "xlsx": "^0.18.5", + "xpath": "0.0.32", + "yauzl": "2.10.0" + } + }, "@octokit/auth-token": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", @@ -31292,8 +33701,7 @@ "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, "@swc/helpers": { "version": "0.3.17", @@ -31314,7 +33722,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, "requires": { "defer-to-connect": "^2.0.0" } @@ -31389,7 +33796,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, "requires": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -31548,7 +33954,6 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, "requires": { "@types/node": "*" } @@ -31675,15 +34080,6 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, - "@types/puppeteer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-7.0.4.tgz", - "integrity": "sha512-ja78vquZc8y+GM2al07GZqWDKQskQXygCDiu0e3uO0DMRKqE0MjrFBFmTulfPYzLB6WnL7Kl2tFPy0WXSpPomg==", - "devOptional": true, - "requires": { - "puppeteer": "*" - } - }, "@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -31698,7 +34094,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, "requires": { "@types/node": "*" } @@ -31790,9 +34185,9 @@ } }, "@xmldom/xmldom": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.9.tgz", - "integrity": "sha512-yceMpm/xd4W2a85iqZyO09gTnHvXF6pyiWjD2jcOJs7hRoZtNNOO1eJlhHj1ixA+xip2hOyGn+LgcvLCMo5zXA==" + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", + "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==" }, "abbrev": { "version": "1.1.1", @@ -31807,6 +34202,15 @@ "event-target-shim": "^5.0.0" } }, + "abs": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/abs/-/abs-1.3.14.tgz", + "integrity": "sha512-PrS26IzwKLWwuURpiKl8wRmJ2KdR/azaVrLEBWG/TALwT20Y7qjtYp1qcMLHA4206hBHY5phv3w4pjf9NPv4Vw==", + "dev": true, + "requires": { + "ul": "^5.0.0" + } + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -31821,21 +34225,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, - "acorn-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", - "integrity": "sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==", - "requires": { - "acorn": "^2.1.0" - }, - "dependencies": { - "acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==" - } - } - }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -31874,6 +34263,11 @@ "xpath.js": "~1.1.0" }, "dependencies": { + "@xmldom/xmldom": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.9.tgz", + "integrity": "sha512-yceMpm/xd4W2a85iqZyO09gTnHvXF6pyiWjD2jcOJs7hRoZtNNOO1eJlhHj1ixA+xip2hOyGn+LgcvLCMo5zXA==" + }, "axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -31913,15 +34307,14 @@ "lru-cache": "^5.1.1", "uuid": "^8.3.2", "xpath": "^0.0.32" - }, - "dependencies": { - "@xmldom/xmldom": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", - "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==" - } } }, + "add-subtract-date": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/add-subtract-date/-/add-subtract-date-1.0.15.tgz", + "integrity": "sha512-MiL4wnMyM999meyCrSA3LME9uZ/b5ptSd0ACDVUoTfutFwvkMyIN7nG7gjrU56WEk5RlFLBghabcgdYwY8s+nQ==", + "dev": true + }, "adler-32": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", @@ -31975,27 +34368,20 @@ "yargs": "16" } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - }, - "dependencies": { - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==" - } - } + "always-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/always-error/-/always-error-1.0.0.tgz", + "integrity": "sha512-FQOCVM9Tv+0skDiLBTemM0LN9IdoRxCqbo+AVpPPRorj34VvC7mFORDWdtEPKHRjC4N0KaxGGpVv35/7k0QbWA==", + "dev": true }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } }, "ansi-escapes": { "version": "4.3.2", @@ -32007,9 +34393,9 @@ } }, "ansi-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-1.4.0.tgz", - "integrity": "sha512-xnStac3E+n0VD9+Om894IFp9KDOp7ODOp7SHza4NbdrxC/6y3H3xjSmjaMlJiyiTScX0QNKN+G5t0X6YYbEg1A==", + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-3.2.10.tgz", + "integrity": "sha512-CGKGIbd678lm15IXJXI1cTyOVAnMQw0jES+klW/yIc+GzYccsYanLMhczPIIj2hE64B79g75QfiuWrEWd6nJdg==", "dev": true }, "ansi-regex": { @@ -32030,6 +34416,35 @@ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, + "ansy": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/ansy/-/ansy-1.0.15.tgz", + "integrity": "sha512-mQyNSn58HN7aEthofkap0hn8jg7/5SJWrB0ypExgcECOwLppc0njH+QBA9X5VMiEN9SM0JlFZWJQGycxxInAqg==", + "dev": true, + "requires": { + "ansi-styles": "^3.0.0", + "custom-return": "^1.0.0", + "supports-color": "^3.1.2", + "ul": "^5.2.1" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, "antlr4ts": { "version": "0.5.0-alpha.3", "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.3.tgz", @@ -32122,11 +34537,26 @@ "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + }, "array-differ": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", @@ -32144,6 +34574,31 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "array-hyper-unique": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/array-hyper-unique/-/array-hyper-unique-1.1.10.tgz", + "integrity": "sha512-kuqfoHcd42m00XBii0GYfPe3LYZgrTLeiWKSkmzkph7RyiW1GZr1hVWbFA8KUTGKx3nHLY1Rj+i72+xLlNuYNA==", + "requires": { + "deep-eql": "^4.0.0", + "lodash": "^4.17.21", + "tslib": "^2.3.0" + }, + "dependencies": { + "deep-eql": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + } + } + }, "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -32157,8 +34612,12 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" }, "arrify": { "version": "2.0.1", @@ -32188,6 +34647,11 @@ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" + }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -32217,6 +34681,11 @@ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "atob-lite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", @@ -32329,19 +34798,54 @@ } } }, + "babyparse": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babyparse/-/babyparse-0.4.6.tgz", + "integrity": "sha512-fsX2GmTvhpKkmSa0DxJdkw2617HUT+xJ6RYR82w95GjI5A4yWjtOAB/0qcRsXj4VsdkI07jsHWhwqUkVgsZCEw==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "ban-sensitive-files": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ban-sensitive-files/-/ban-sensitive-files-1.3.0.tgz", - "integrity": "sha512-VXIn3A4FvaziIWczNFMemU7f6gUh+MeUCU6ZE2PR4g3EYJLy3Bow/SQ+y1/EgWWr0QIZAfre1TXYBI7dUz7gaA==", + "version": "1.9.18", + "resolved": "https://registry.npmjs.org/ban-sensitive-files/-/ban-sensitive-files-1.9.18.tgz", + "integrity": "sha512-+jD9ucQcSFRfJW9pi7sPiEnl3j2cPsOq3fsN+jWJ/7EvX8kMYP4alaYYcifyrFqLNYbOzlsD8wgBhgrnepePxQ==", "dev": true, "requires": { - "check-more-types": "2.2.0", - "lazy-ass": "1.1.0" + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.4", + "ggit": "2.4.12", + "lazy-ass": "1.6.0", + "pluralize": "8.0.0", + "ramda": "0.28.0", + "update-notifier": "5.1.0" + } + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } } }, "base64-js": { @@ -32479,6 +34983,14 @@ "ms": "2.0.0" } }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -32486,6 +34998,11 @@ } } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "botbuilder": { "version": "4.18.0", "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.18.0.tgz", @@ -32734,14 +35251,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -32806,6 +35315,85 @@ "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.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" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -32906,21 +35494,28 @@ } }, "bug-killer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bug-killer/-/bug-killer-1.0.0.tgz", - "integrity": "sha512-VxtIy6rLZwLEk6R1p6msqagongnG2awJnd9mUPlgciqfQR0dFKZTYEVMEbOCDQ9naQ4Ttq/3vKNgVkUGbSQpzw==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/bug-killer/-/bug-killer-4.4.4.tgz", + "integrity": "sha512-O/iJPwIf0Igra3q91s+jGeYhUSdtFUtBMb1JMwvAZLS0We1mIdEuDM4FCjbxFQAF+R6GqpRVgHVQa0utQQxSEA==", "dev": true, "requires": { - "couleurs": "^1.1.0" + "ansi-parser": "^3.2.5", + "couleurs": "^6.0.6", + "daty": "^1.0.7", + "deffy": "^2.2.2", + "typpy": "^2.3.6" }, "dependencies": { "couleurs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-1.1.0.tgz", - "integrity": "sha512-K8PvqZyqmbVHtLnuxPyA+FqQ66aE9+YI709ogkBUx7goA7bGCVHnIqM9zBEe2Z6km7gmMWREC9ZipvJ6onEdYQ==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-6.0.11.tgz", + "integrity": "sha512-y5WUDtgQKw/tVViZCj3ACX8VseU0ONxiet8SRsE89uH4s/otRLXGOMymfVbKMFzedKOdxQpTcYWukRwkvgRYdw==", "dev": true, "requires": { - "x256": "~0.0.1" + "ansy": "^1.0.0", + "color-convert": "^1.0.0", + "iterate-object": "^1.3.1", + "typpy": "^2.3.1" } } } @@ -32953,11 +35548,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" }, - "babyparse": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babyparse/-/babyparse-0.4.6.tgz", - "integrity": "sha512-fsX2GmTvhpKkmSa0DxJdkw2617HUT+xJ6RYR82w95GjI5A4yWjtOAB/0qcRsXj4VsdkI07jsHWhwqUkVgsZCEw==" - }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", @@ -33066,6 +35656,11 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, "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", @@ -33104,6 +35699,17 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, + "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==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -33276,6 +35882,22 @@ } } }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, "cache-content-type": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", @@ -33288,14 +35910,12 @@ "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" }, "cacheable-request": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -33310,7 +35930,6 @@ "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" } @@ -33332,6 +35951,11 @@ "get-intrinsic": "^1.0.2" } }, + "call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" + }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -33413,21 +36037,13 @@ "lodash": "^4.17.15" } }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "cfb": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-0.11.1.tgz", - "integrity": "sha512-1GEqpcO365hTRpP+GzHXNiUF5SB7qmY5aVYwrJm8ISx27HzHpaFlTQhnOCMNhqP0WPkHR0OGE9WDSqtksV4anw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", "requires": { - "commander": "" + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" } }, "chai": { @@ -33468,123 +36084,92 @@ "supports-color": "^5.3.0" } }, - "character-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", - "integrity": "sha512-6OEBVBlf/y8LaAphnbAnt743O3zMhlBer+FO5D40H6wqAdU9B1TvuApkejgLW0cvv0tEZNLktv1AnRI+C87ueQ==" - }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chdir-promise": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/chdir-promise/-/chdir-promise-0.6.2.tgz", + "integrity": "sha512-EG5MutQt4qTxoQPfBtPCfU1A/MqborgaO66xrPSD/dRTB40OLN0wy+YAo5ZAw7DawhtCPdZHAdQ206fyWkhoiw==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "check-more-types": "2.24.0", + "debug": "3.1.0", + "lazy-ass": "1.6.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" }, "check-more-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.2.0.tgz", - "integrity": "sha512-PXGuVn3MlMkQNUcegrDBy5AmMVrHcZ0ce0olNZog6Tb+n8HVBkspH4N0KHpIdCInyzxWBI4BRn7j+M4AmBI57g==", + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true }, "cheerio": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.17.0.tgz", - "integrity": "sha512-pakQLw14btS8T4+Q3dgFbe7x447hjsQeEhMJ2kHg8YrOLSmKS0xGl9REnz/eic7dsxS0S9kMRbZcsqrlMAS0dQ==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "requires": { - "CSSselect": "~0.4.0", - "dom-serializer": "~0.0.0", - "entities": "~1.1.1", - "htmlparser2": "~3.7.2", - "lodash": "~2.4.1" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "dependencies": { - "dom-serializer": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.0.1.tgz", - "integrity": "sha512-evvizoLtT5uMpDT3iKRAx1NmTCk2ZdOD7ATqmL27QJkCv8XQmGKv/eFuvAjHhySNBACREAcXGBqozYhV1dOdag==", - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - } - }, - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha512-zEvAAsFY0DeHkrqWBRkSsmgaE7yADgpez40JUFjISb+uzSinl2F6QbG4lMEBE4P06gCGF6VnsykmbNgu7ZIHzA==" - }, - "domhandler": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz", - "integrity": "sha512-MFFBQFGkyTuNe3vL9WEw9JdlCwIoBYpOGESLeZAvc/jClYNsOl6P1KzevJbWg76GovdEycfR7/2/Ra7NnqtMKw==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, "htmlparser2": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.7.3.tgz", - "integrity": "sha512-XdyuCBH3/tTuRTCMFolbj5stKZek8FK7KVXm+aHYivHmXVo18jINvc2jR5zgFkp//z2KWl5vppTJ4DWhltYruA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", "requires": { - "domelementtype": "1", - "domhandler": "2.2", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==" - } + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" } } }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -33622,60 +36207,153 @@ "dayjs": "^1.10.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==" + }, + "class-methods": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/class-methods/-/class-methods-1.0.12.tgz", + "integrity": "sha512-14T82nNlU+OAhPNm4Fw4kJUS8klgt9n1+CdtB6LHvmWC5Wb89TZQ6CuCwEK2YR03O/hT0eHGIpQxtovAnN9CtA==", + "dev": true, + "requires": { + "exclude-arr": "^1.0.0", + "static-methods": "^1.0.0", + "ul": "^5.2.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, "cldrjs": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz", "integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA==" }, - "clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha512-aTWyttSdI2mYi07kWqHi24NUU9YlELFKGOAgFzZjDN1064DMAOy2FBuoyGmkKRlXkbpXd0EVHmiVkbKhKoirTw==", - "requires": { - "commander": "2.8.x", - "source-map": "0.4.x" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "cli-box": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cli-box/-/cli-box-2.1.1.tgz", - "integrity": "sha512-ZNx8Lhb3CFx8Bll0JswIJ2g5lw/b/Ge3kaSlqwKRUphPifh+D0T92KPMB9NPdHjHc4OmPYIaVu80sjGKIpvY+Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-box/-/cli-box-5.0.0.tgz", + "integrity": "sha512-1ukDhxQ1nSgfupVOH2v6+meRlKLHjTaSdCPTFjUOtAjQvFsDEWeW08gySk8o5dr+biPosooNmfle28ighmTEPA==", "dev": true, "requires": { - "ansi-parser": "1.3.0" + "ansi-parser": "3.0.0", + "ul": "5.0.0" }, "dependencies": { "ansi-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-1.3.0.tgz", - "integrity": "sha512-mvewHRn7sWk0siUn5bnFEtDbe9dRK90mtqxGsHsX5MfcnbV/BCFVGyehv1tWdkAKL6ZDzMEezs3YGEoytO10lQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-3.0.0.tgz", + "integrity": "sha512-edNYJqqmeQJ+N7YV6gWQ4xAumqctsOchnNVDZEHsMSVZcytGLwq9SbGDwm9Jg+XpPNdl6zSGgujFRqiu1PmFYg==", "dev": true + }, + "deffy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.0.0.tgz", + "integrity": "sha512-Gcn10MX982lqx8XmJES2JvN8Im7h0lFwRanyQfkQG2wXko4SouD0pSGUlK6Do165Itfidhpssn6NqlRkKp/4ig==", + "dev": true, + "requires": { + "typpy": "^2.0.0" + } + }, + "typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + }, + "ul": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ul/-/ul-5.0.0.tgz", + "integrity": "sha512-/wMRf3ZchW/MHV8M0fWhxhUTeJAOgrxt6u/9snab4xuMTkCuHo7TH7nyMZxrsjNobAFC8UhCNwlwVVQdVbcf1w==", + "dev": true, + "requires": { + "deffy": "2.0.0", + "typpy": "2.0.0" + } } } }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, "cli-color": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", @@ -33716,6 +36394,23 @@ "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", "dev": true }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha512-h/TzJrgwzVV+W6laITBZAxAWfBjX4T0x+LF5XJdS1AzDkXqmraMNnKQ/O/f3AHJKVR85fOglUEdS/B0P1wS7Aw==", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true + } + } + }, "cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -33803,26 +36498,79 @@ "kind-of": "^3.0.2", "lazy-cache": "^1.0.3", "shallow-clone": "^0.1.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, "requires": { "mimic-response": "^1.0.0" } }, "clp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/clp/-/clp-1.2.0.tgz", - "integrity": "sha512-rl/tsN5Q/K2vj8j5d0S6BCSbHZSaTxbdg8RPdAqYwGyJ1GA2jhCHWqdHpRDL7jAQw9Yj8qR44jRGpYKbc2xavw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/clp/-/clp-3.2.1.tgz", + "integrity": "sha512-pD7KnjnpK2Rlc16i+l7KZp6oy6nCMAZsgq7E9lNiteDT8viiySRAqPzggw0T+Q3vNX0p0C0TijqXsYkwQYf6sQ==", "dev": true, "requires": { - "ansi-parser": "^1.4.0", - "le-table": "^2.1.0", - "ul": "^2.1.0" + "ansi-parser": "2.0.0", + "le-table": "4.0.0", + "ul": "5.0.0" + }, + "dependencies": { + "ansi-parser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-2.0.0.tgz", + "integrity": "sha512-ydTIzNr0qbKe1QJwIoP6U3KrhUM1P0T5i+/wXFhYUwBvNQuBeuTluF3UhksfjnU5L2epCHQbDvU4Mogu4Dvong==", + "dev": true + }, + "deffy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.0.0.tgz", + "integrity": "sha512-Gcn10MX982lqx8XmJES2JvN8Im7h0lFwRanyQfkQG2wXko4SouD0pSGUlK6Do165Itfidhpssn6NqlRkKp/4ig==", + "dev": true, + "requires": { + "typpy": "^2.0.0" + } + }, + "le-table": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/le-table/-/le-table-4.0.0.tgz", + "integrity": "sha512-LYrjuuy61/nwIl/UZP5nR+6lEQPImtKlsMyB5xsXbB5z+IeQAe9+fNaeSBkSFC6UaBB/fIu5OnnGl5PBXlJ5yA==", + "dev": true, + "requires": { + "cli-box": "5.0.0", + "overlap": "2.0.0", + "ul": "5.0.0" + } + }, + "typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + }, + "ul": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ul/-/ul-5.0.0.tgz", + "integrity": "sha512-/wMRf3ZchW/MHV8M0fWhxhUTeJAOgrxt6u/9snab4xuMTkCuHo7TH7nyMZxrsjNobAFC8UhCNwlwVVQdVbcf1w==", + "dev": true, + "requires": { + "deffy": "2.0.0", + "typpy": "2.0.0" + } + } } }, "co": { @@ -33841,6 +36589,11 @@ "type-is": "^1.6.16" } }, + "code-block-writer": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-7.2.2.tgz", + "integrity": "sha512-8SyXM1bWsMDCzvCoTdnDBhnnUbHntxcba4ApBIO3S3QX0M2Iq0xZCzs6SYdBOGaSUi4drysvrAK15JoXhlpsvQ==" + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -33851,6 +36604,15 @@ "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, "color": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", @@ -33883,9 +36645,10 @@ } }, "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", + "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", + "dev": true }, "colorspace": { "version": "1.1.4", @@ -33904,6 +36667,43 @@ "delayed-stream": "~1.0.0" } }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", + "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", + "requires": { + "array-back": "^2.0.0", + "chalk": "^2.4.1", + "table-layout": "^0.4.3", + "typical": "^2.6.1" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "requires": { + "typical": "^2.6.1" + } + }, + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==" + } + } + }, "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", @@ -33940,6 +36740,11 @@ "dot-prop": "^5.1.0" } }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "compress-commons": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", @@ -34000,19 +36805,18 @@ "proto-list": "~1.2.1" } }, - "constantinople": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", - "integrity": "sha512-UnEggAQrmhxuTxlb7n1OsTtagNXWUv2CRlOogZhWOU4jLK4EJEbF8UDSNxuGu+jVtWNtO2j51ab2H1wlBIzF/w==", + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, "requires": { - "acorn": "^2.1.0" - }, - "dependencies": { - "acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==" - } + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" } }, "content-disposition": { @@ -34060,6 +36864,24 @@ "through2": "^4.0.0" }, "dependencies": { + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -34082,6 +36904,11 @@ "requires": { "readable-stream": "3" } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" } } }, @@ -34113,6 +36940,24 @@ "through2": "^4.0.0" }, "dependencies": { + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -34138,6 +36983,11 @@ "requires": { "readable-stream": "3" } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" } } }, @@ -34166,6 +37016,11 @@ "keygrip": "~1.1.0" } }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" + }, "core-js": { "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", @@ -34202,12 +37057,22 @@ "requires": {} }, "couleurs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-3.0.0.tgz", - "integrity": "sha512-37jCQ77RexibjSVs92no23jzXaEMJG0akD3sDsPtYfchq9yo3dwxtnh0jX/YjgpSqXBUqiu/g/iXa5MjdMCoaA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-5.2.1.tgz", + "integrity": "sha512-P1SOxvmtZ//1WAyLKyOZdvCjBvylbUMKZbIwUY+dZvOkqdILBSGHUzcQzQRIgikY4kMGgcbxg8bbKc0rOhGUQQ==", "dev": true, "requires": { + "flat-colors": "3.0.0", + "typpy": "2.0.0", "x256": "0.0.2" + }, + "dependencies": { + "typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + } } }, "crc-32": { @@ -34242,6 +37107,14 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "crlf-normalize": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/crlf-normalize/-/crlf-normalize-1.0.18.tgz", + "integrity": "sha512-bBPJTekqhw/yUgHvHrOT2QBb6gJt/gNDx++GKkSYaBIepeEiLIezouV8xgDFTL3yRMpK7wOYC9a8xvY7bFQCLg==", + "requires": { + "ts-type": ">=2" + } + }, "cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", @@ -34270,53 +37143,22 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, - "css": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", - "integrity": "sha512-qmTYWhHk910nQWnGqMAiWWPQlB6tESiWgNebQJmiozOAGcBAQ1+U/UzUOkhdrcshlkSRRiKWodwmVvO0OmnIGg==", + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "requires": { - "css-parse": "1.0.4", - "css-stringify": "1.0.5" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" } }, - "css-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", - "integrity": "sha512-pfstzKVRZiHprDXdsmtfH1HYUEw22lzjuHdnpe1hscwoQvgW2C5zDQIBE0RKoALEReTn9W1ECdY8uaT/kO4VfA==" - }, - "css-stringify": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", - "integrity": "sha512-aIThpcErhG5EyHorGqNlTh0TduNBqLrrXLO3x5rku3ZKBxuVfY+T7noyM2G2X/01iQANqJUb6d3+FLoa+N7Xwg==" - }, - "CSSselect": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/CSSselect/-/CSSselect-0.4.1.tgz", - "integrity": "sha512-r4HWARRbQ6enGbdPCrl3bNybORIcU0AcBLTyaxcWNTRd6EH2/w9RInHkUbUhwehrBFN1KQz+yFulhyIH31ZXAw==", - "requires": { - "CSSwhat": "0.4", - "domutils": "1.4" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domutils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", - "integrity": "sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w==", - "requires": { - "domelementtype": "1" - } - } - } - }, - "CSSwhat": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/CSSwhat/-/CSSwhat-0.4.7.tgz", - "integrity": "sha512-bU5cYG02crjQGDN6wm8USThp/sr/MUulMTrVA1CENSBhv3B+mlJfYDP1em/wJlMT0aYcWso0cuT9NXW74yPfog==" + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" }, "csv": { "version": "0.4.6", @@ -34344,10 +37186,14 @@ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-0.0.8.tgz", "integrity": "sha512-REHUwgPO2wPr69PZXW3cXmtvi+imJKvnqfxJw115rBsAMIKGQUP7a/nWo5SGzN5wmcKpN4v6uBcvc9CzvnT5zw==" }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==" + "custom-return": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/custom-return/-/custom-return-1.0.12.tgz", + "integrity": "sha512-Xy6IlEV6gW5Iu4YRoQe0A5RG1mzezawcTXzAk7u28oB2UilRfbbOc1C7RmWE6AJ1inSm8gghCkIpo0LUQfLbvw==", + "dev": true, + "requires": { + "noop6": "^1.0.0" + } }, "cz-conventional-changelog": { "version": "3.3.0", @@ -34431,14 +37277,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } } } }, @@ -34452,6 +37290,12 @@ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" }, + "d3-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/d3-helpers/-/d3-helpers-0.3.0.tgz", + "integrity": "sha512-uNJ5QRsTW7CdNC6CHX528VwIEzYCC/iFHMQ9ReaDUGA+iiJXHcR2uKobK68FkKSWmNYPxwaUV+9SswjoygF6VA==", + "dev": true + }, "d3-interpolate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", @@ -34568,6 +37412,12 @@ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, + "date-unit-ms": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/date-unit-ms/-/date-unit-ms-1.1.14.tgz", + "integrity": "sha512-6vUHdMQkblV8lKYQqnTM2kUmWlFVG6F/0mzUbcnNygcR2vuUPeHAIE7BO7mj/brmgV1INSAG9D2GpgTLOEOHvg==", + "dev": true + }, "date-utils": { "version": "1.2.21", "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", @@ -34578,11 +37428,30 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" }, + "daty": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/daty/-/daty-1.2.1.tgz", + "integrity": "sha512-0ScX8eww2sJ1fnJuuLhP6JXonVrIIJZiVlGL6ve+Dnv3vPVFf3ZMDlose5+h/SnR4gQ1nmG3acoBP3Slycr4ag==", + "dev": true, + "requires": { + "add-subtract-date": "^1.0.0", + "class-methods": "^1.0.4", + "date-unit-ms": "^1.1.0", + "diff-dates": "^1.0.0", + "formatoid": "^1.0.0" + } + }, "dayjs": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==" }, + "days": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/days/-/days-1.1.1.tgz", + "integrity": "sha512-vzeIwVsEIyA35GH4+mPd4hjVDNI87wYANyZFs0BHjBr5kIBH5zEl7LfD6Wr4SFZca4D3CU9IH1w4DuZLlXzKRw==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -34598,35 +37467,10 @@ } } }, - "debugger-api": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/debugger-api/-/debugger-api-0.1.2.tgz", - "integrity": "sha512-OAECiwgtx6mzb0rWxn8pk4Htd6KIdXJw+YRCTYaekPFDa1cYxHOYwX5Y74f4Gzd5eebgJShXL1Ae6rtEaNTfiQ==", - "requires": { - "debug": "^2.0.0", - "node-inspector": "^0.7.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, "debuglog": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==" }, "decamelize": { "version": "1.2.0", @@ -34649,6 +37493,11 @@ } } }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + }, "decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -34726,6 +37575,15 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, + "deffy": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.2.4.tgz", + "integrity": "sha512-pLc9lsbsWjr6RxmJ2OLyvm+9l4j1yK69h+TML/gUit/t3vTijpkNGh8LioaJYTGO7F25m6HZndADcUOo2PsiUg==", + "dev": true, + "requires": { + "typpy": "^2.0.0" + } + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -34740,6 +37598,15 @@ "object-keys": "^1.1.1" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", @@ -34856,6 +37723,15 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, + "diff-dates": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/diff-dates/-/diff-dates-1.0.14.tgz", + "integrity": "sha512-JbWO1wl9jJZdLPLK/nENeUL68Mv7+SQQrXlEPSxuzZid89+FXpl7xSGxbPGd5z/2Xx3KJe4+fHPpaKnWnZ8V3w==", + "dev": true, + "requires": { + "date-unit-ms": "^1.1.0" + } + }, "diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -34909,23 +37785,16 @@ "integrity": "sha512-+U+vFOh+y/kOciFkkZPR45CarRUcb0l8wtlsuJitgMIQmpJdoqW1y4ptJ/XWuAm+FYkVqXWz2lGMv3zDhsE0oA==", "requires": { "@xmldom/xmldom": "^0.8.6" - }, - "dependencies": { - "@xmldom/xmldom": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", - "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==" - } } }, "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, "dom-storage": { @@ -34939,21 +37808,21 @@ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "requires": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" } }, "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" } }, "dot-prop": { @@ -35011,6 +37880,12 @@ "readable-stream": "^2.0.2" } }, + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, "duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", @@ -35235,6 +38110,11 @@ "integrity": "sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==", "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==" + }, "enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -35279,9 +38159,9 @@ "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" }, "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, "env-ci": { "version": "5.5.0", @@ -35298,6 +38178,25 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, + "epub2": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/epub2/-/epub2-1.3.8.tgz", + "integrity": "sha512-krjEZmPdN4iiFdThTkWT0uGAQMF+0wwLFEOv6MwEGsYvyD4+08dlMQz/1pFlgfic/Bh3aqgAzArTptQRmfte1g==", + "requires": { + "adm-zip": "^0.4.13", + "array-hyper-unique": "^1.0.7", + "bluebird": "^3.5.5", + "crlf-normalize": "^1.0.3", + "xml2js": "^0.4.19" + }, + "dependencies": { + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + } + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -35433,6 +38332,12 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -35444,12 +38349,12 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" @@ -35570,12 +38475,6 @@ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "peer": true }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "peer": true - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -35712,6 +38611,13 @@ "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } } }, "eslint-utils": { @@ -35761,13 +38667,6 @@ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } } }, "esrecurse": { @@ -35776,19 +38675,12 @@ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { "version": "2.0.3", @@ -35847,13 +38739,20 @@ } } }, + "exclude-arr": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/exclude-arr/-/exclude-arr-1.0.11.tgz", + "integrity": "sha512-yQVFDXkkpDOhSPGOu2yG4fKmDsBiufj2M5uJRS6ijcLW7/pUvCxAHJ2YQTJUkLJ4nWbl+XZn/qwMzrWYfWFgFg==", + "dev": true + }, "exec-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/exec-limiter/-/exec-limiter-1.0.0.tgz", - "integrity": "sha512-9f+r3LWHgQ4uDvjXYyQ0IqVzyV52vJ71D6sESHd+m7gheBOlPQU6zZ1Fj/O90OCVAaELFlMmScj2f+MkDSzT5Q==", + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/exec-limiter/-/exec-limiter-3.2.13.tgz", + "integrity": "sha512-86Ri699bwiHZVBzTzNj8gspqAhCPchg70zPVWIh3qzUOA1pUMcb272Em3LPk8AE0mS95B9yMJhtqF8vFJAn0dA==", "dev": true, "requires": { - "limit-it": "^1.1.0" + "limit-it": "^3.0.0", + "typpy": "^2.1.0" } }, "execa": { @@ -35872,10 +38771,93 @@ "strip-final-newline": "^2.0.0" } }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } }, "expand-tilde": { "version": "2.0.2", @@ -36000,6 +38982,21 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -36011,6 +39008,15 @@ "tmp": "^0.0.33" }, "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -36022,6 +39028,31 @@ } } }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -36048,11 +39079,6 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" - }, "fast-csv": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", @@ -36189,6 +39215,12 @@ "to-regex-range": "^5.0.1" } }, + "fillo": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/fillo/-/fillo-1.0.13.tgz", + "integrity": "sha512-9LYJ0ww96DUYETd2Bia5NS1b8rj42nEE5zsfcUwDErMopTs6BRBe4dRIVjrZGXSiK4vNSL/Q3u0dyqbmkA2Zdg==", + "dev": true + }, "final-stream": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/final-stream/-/final-stream-2.0.4.tgz", @@ -36233,6 +39265,14 @@ "merge": "^2.1.1" } }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "requires": { + "array-back": "^3.0.1" + } + }, "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -36278,6 +39318,12 @@ "rimraf": "^3.0.2" } }, + "flat-colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/flat-colors/-/flat-colors-3.0.0.tgz", + "integrity": "sha512-UDm0W6LZOdQL0kfbHW1/hohk4bws+ypeww4SyKv5Kn0CIzWWn2blNLLv4nWFuVt5NFv6PHWQYzuHf0uWqiX56g==", + "dev": true + }, "flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", @@ -36400,9 +39446,21 @@ } }, "form-data-encoder": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.3.tgz", - "integrity": "sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ==" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "formatoid": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/formatoid/-/formatoid-1.2.4.tgz", + "integrity": "sha512-9wWHOPJvbIheSpiHGl0xaBwdszlzPaeh2KqHVexGQnKpO85xrMoKvuf6M3q0B4uC3I9lkXjH6+8ipQC8PQ/7Gw==", + "dev": true, + "requires": { + "days": "^1.0.1", + "fillo": "^1.0.0", + "months": "^1.0.0", + "parse-it": "^1.0.0" + } }, "formdata-node": { "version": "4.4.1", @@ -36437,9 +39495,17 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "frac": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/frac/-/frac-0.3.1.tgz", - "integrity": "sha512-1Lzf2jOjhIkRaa013KlxNOn2D9FemmQNeYUDpEIyPeFXmpLvbZXJOlaayMBT6JKXx+afQFgQ1QJ4kaF7Z07QFQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "requires": { + "map-cache": "^0.2.2" + } }, "fresh": { "version": "0.5.2", @@ -36465,6 +39531,11 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==" + }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -36625,6 +39696,11 @@ "get-intrinsic": "^1.1.1" } }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -36633,21 +39709,111 @@ "assert-plus": "^1.0.0" } }, - "git-issues": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/git-issues/-/git-issues-1.0.0.tgz", - "integrity": "sha512-03R/xgSb4cl0BD49Osti/6dVm2DiNBFlSRbI46/PdZuzEKwCbwFnVDQeIVowL+ls0LxO0XLaX1RJUqt25Nxejg==", + "ggit": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/ggit/-/ggit-2.4.12.tgz", + "integrity": "sha512-29DxkCEmqhXNk+JrV8GNQ+IY8OaJ1J2jC+B/vPvOk7CWs/2K8uX2DQeMlnFy7S+NeJrTNcLWfPJDdi6IflDt/A==", "dev": true, "requires": { - "bug-killer": "^1.0.0", - "clp": "^1.2.0", - "couleurs": "^3.0.0", - "giturlparse": "^1.2.0", - "gry": "^2.1.0", - "is-there": "^2.0.0", - "le-table": "^2.2.0", - "request": "^2.55.0", - "ul": "^2.1.0" + "always-error": "1.0.0", + "bluebird": "3.5.1", + "chdir-promise": "0.6.2", + "check-more-types": "2.24.0", + "cli-table": "0.3.1", + "colors": "1.3.2", + "commander": "2.17.1", + "d3-helpers": "0.3.0", + "debug": "3.2.6", + "find-up": "3.0.0", + "glob": "7.1.3", + "lazy-ass": "1.6.0", + "lodash": "4.17.15", + "moment": "2.23.0", + "moment-timezone": "0.5.23", + "optimist": "0.6.1", + "pluralize": "7.0.0", + "q": "2.0.3", + "quote": "0.4.0", + "ramda": "0.26.1", + "semver": "5.6.0" + }, + "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "moment": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz", + "integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==", + "dev": true + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "ramda": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", + "dev": true + } + } + }, + "git-issues": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/git-issues/-/git-issues-1.3.1.tgz", + "integrity": "sha512-77jo6cR2az+VSaATg50oOR1uiUPI7Byiy62BLTx22Qkx8rhCNxApBkEzcQZ5Mkk56FnKtt3jEcTGvN/hCsdf1w==", + "dev": true, + "requires": { + "abs": "^1.0.0", + "bug-killer": "^4.0.0", + "clp": "^3.0.0", + "couleurs": "^5.0.0", + "git-url-parse": "^4.0.0", + "gry": "^4.1.0", + "is-there": "^4.1.0", + "le-table": "^4.0.0", + "request": "^2.55.0" } }, "git-log-parser": { @@ -36682,17 +39848,24 @@ } } }, - "github": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/github/-/github-0.1.16.tgz", - "integrity": "sha512-IVtcAhrb2HsThCNs1MTPuntLk6C1km0Q4A+md/FD/00SgyyJc4+2XsG1UsF2SUM7enumAgP5VKGVqzyyUmuNCw==", - "dev": true + "git-up": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-1.2.1.tgz", + "integrity": "sha512-SRVN3rOLACva8imc7BFrB6ts5iISWKH1/h/1Z+JZYoUI7UVQM7gQqk4M2yxUENbq2jUUT09NEND5xwP1i7Ktlw==", + "dev": true, + "requires": { + "is-ssh": "^1.0.0", + "parse-url": "^1.0.0" + } }, - "giturlparse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/giturlparse/-/giturlparse-1.2.0.tgz", - "integrity": "sha512-SaiYk1sXtKms17tlX2n5QC+pYwIahDPaI/XftAt6hHBo8FAXcflrm4APOsM24GeH1Bpku0+36VFSfK3/Q4g/Cw==", - "dev": true + "git-url-parse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-4.2.1.tgz", + "integrity": "sha512-NVGrijTzKLAKElI2OfK0u3E8Wk62Hh6bgBOFCBFWcC8Dr6GOcou0PktbztEToLMpdE9u59bMEsZliyIVgkFz8w==", + "dev": true, + "requires": { + "git-up": "^1.0.0" + } }, "glob": { "version": "7.2.3", @@ -36715,6 +39888,11 @@ "is-glob": "^4.0.1" } }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==" + }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -36923,7 +40101,6 @@ "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", - "dev": true, "requires": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -36943,32 +40120,20 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" - }, "grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, "gry": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gry/-/gry-2.1.0.tgz", - "integrity": "sha512-mmMBeRxkO0s28+cHWATodR2nLJW4xK17FTwiflYETiGUoWG+jl229M8CiLUjDNnyg+ryvfBnizBZn2ugcrD5Ng==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gry/-/gry-4.3.1.tgz", + "integrity": "sha512-QBplIkFdvdLGDW6UaAdpJvVJJzAbErHmfz2OYh/BULGy+NdRaDBYXH96s25Ahuht11n1yKlNyvZChf/sA5wXiQ==", "dev": true, "requires": { - "exec-limiter": "^1.0.0", - "ul": "^1.1.0" - }, - "dependencies": { - "ul": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ul/-/ul-1.1.0.tgz", - "integrity": "sha512-Y5LddrglZ/lZMHSoGRXXOqPEB7M7iWV5s1XMcBzhEzY2u5mi0hYyJs1czSdEab0f4a0Iyh7lNydkVMQftnb8Nw==", - "dev": true - } + "exec-limiter": "^3.0.0", + "one-by-one": "^2.0.0", + "ul": "^5.0.0" } }, "gtoken": { @@ -37106,11 +40271,26 @@ "get-intrinsic": "^1.1.1" } }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", @@ -37119,6 +40299,59 @@ "has-symbols": "^1.0.2" } }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -37171,9 +40404,27 @@ "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==" }, "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } }, "hpagent": { "version": "0.1.2", @@ -37182,6 +40433,11 @@ "dev": true, "optional": true }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, "html-tags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", @@ -37196,6 +40452,41 @@ "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } } }, "http-assert": { @@ -37287,7 +40578,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, "requires": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -37415,11 +40705,11 @@ } }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "ieee754": { @@ -37458,6 +40748,12 @@ "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==" }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -37598,13 +40894,6 @@ "requires": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" - }, - "dependencies": { - "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" - } } }, "invert-kv": { @@ -37622,6 +40911,23 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -37671,6 +40977,15 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, "is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -37679,6 +40994,14 @@ "has": "^1.0.3" } }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -37687,6 +41010,16 @@ "has-tostringtag": "^1.0.0" } }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", @@ -37711,11 +41044,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" - }, "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", @@ -37745,6 +41073,33 @@ "html-tags": "^3.0.0" } }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "dependencies": { + "global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } + } + }, "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -37764,11 +41119,22 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==" + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -37787,6 +41153,12 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, "is-observable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", @@ -37848,11 +41220,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, "requires": { "is-unc-path": "^1.0.0" } }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, "is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", @@ -37866,6 +41243,15 @@ "call-bind": "^1.0.2" } }, + "is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "requires": { + "protocols": "^2.0.1" + } + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -37901,9 +41287,9 @@ } }, "is-there": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-there/-/is-there-2.0.0.tgz", - "integrity": "sha512-B4Hqwe1tqtVUHHYlfE8/Xupohp34DjYeGoFTfu2dnmD7bKlR7sgaaIGQVY0+mVhRFM+A94bo7FLgMHn2cTimdg==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/is-there/-/is-there-4.5.1.tgz", + "integrity": "sha512-vIZ7HTXAoRoIwYSsTnxb0sg9L6rth+JOulNcavsbskQkCIWoSM2cjFOWZs4wGziGZER+Xgs/HXiCQZgiL8ppxQ==", "dev": true }, "is-typed-array": { @@ -37927,7 +41313,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, "requires": { "unc-path-regex": "^0.1.2" } @@ -37969,8 +41354,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-wsl": { "version": "2.2.0", @@ -37980,6 +41364,12 @@ "is-docker": "^2.0.0" } }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -38012,124 +41402,21 @@ "lodash.uniqby": "^4.7.0" } }, - "j": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/j/-/j-0.3.11.tgz", - "integrity": "sha512-w7qn1FaQtMmdzq26QHEYuPDyHaLMs6WMskGpbtxItEsrawYp/VsmDDAtTqJx0UH+Xr5GDSvhtvRB8eRuIHM4DQ==", + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, "requires": { - "commander": "", - "xlsjs": "~0.7.1", - "xlsx": "~0.7.8" - }, - "dependencies": { - "codepage": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.3.8.tgz", - "integrity": "sha512-cjAoQW5L/TCKWRbzt/xGBvhwJKQFhcIVO0jWQtpKQx4gr9qvXNkpRfq6gSmjjA8dB2Is/DPOb7gNwqQXP7UgTQ==", - "requires": { - "commander": "", - "concat-stream": "", - "voc": "" - } - }, - "jszip": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.4.0.tgz", - "integrity": "sha512-m+yvNmYfRCaf1gr5YFT5e3fnSqLnE9McbNyRd0fNycsT0HltS19NKc18fh3Lvl/AIW/ovL6/MQ1JnfFg4G3o4A==", - "requires": { - "pako": "~0.2.5" - } - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" - }, - "xlsx": { - "version": "0.7.12", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.7.12.tgz", - "integrity": "sha512-+dljNu2OdnbvAsjWZPlB4YMsJjC0JcNeR0cYH5lowp2YrxF55HjgD0jcff9alUDHxEKGw0nLIlbd9K+QbteEgg==", - "requires": { - "adler-32": "", - "cfb": ">=0.10.0", - "codepage": "~1.3.6", - "commander": "", - "crc-32": "", - "jszip": "2.4.0", - "ssf": "~0.8.1" - } - } + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, - "jade": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", - "integrity": "sha512-J76sbGKeLtu7uwW97Ntzb1UvGnpKTDplYa9ROr2gNRhM+SxvlBSG0Ees3TQ8+7ya2UVkzMEeFxhRhEpN68s7Tg==", - "requires": { - "character-parser": "1.2.1", - "clean-css": "^3.1.9", - "commander": "~2.6.0", - "constantinople": "~3.0.1", - "jstransformer": "0.0.2", - "mkdirp": "~0.5.0", - "transformers": "2.1.0", - "uglify-js": "^2.4.19", - "void-elements": "~2.0.1", - "with": "~4.0.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==" - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==", - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==" - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==", - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } + "iterate-object": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/iterate-object/-/iterate-object-1.3.4.tgz", + "integrity": "sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw==", + "dev": true }, "java-properties": { "version": "1.0.2", @@ -38409,6 +41696,11 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, + "jschardet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.0.0.tgz", + "integrity": "sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==" + }, "jsdoc": { "version": "3.6.11", "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", @@ -38574,15 +41866,6 @@ "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz", "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==" }, - "jstransformer": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", - "integrity": "sha512-b7tmf91j1ChMuYhwbPBnNgB62dmHuqiHpOdd6QLKzde8HydZqm+ud3qWreGWecSxPBFFNOf1Ozjx0xo2plFdHA==", - "requires": { - "is-promise": "^2.0.0", - "promise": "^6.0.1" - } - }, "jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -38635,12 +41918,9 @@ } }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "klaw": { "version": "3.0.0", @@ -38773,10 +42053,19 @@ "zlibjs": "^0.3.1" } }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, "lazy-ass": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.1.0.tgz", - "integrity": "sha512-WkoinARtzbvsXb1TPmBsJsNzSJzpWYsgQ84qI+u4g08EDjdn02Kl5Pb1amoiMvdz7qUcGXVgFibAKmrobRaMPQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true }, "lazy-cache": { @@ -38801,14 +42090,41 @@ } }, "le-table": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/le-table/-/le-table-2.2.0.tgz", - "integrity": "sha512-XI0o3lrX9vy+3J8lffIP9qYvGFxnd1076bglLiAGc7qHlH6LabKSk1cv4LkcNOGrf0VKscH/T44enFFr5k6HqA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/le-table/-/le-table-4.2.2.tgz", + "integrity": "sha512-1PhE5bd0Rc6d8JAHJbDkxMq4S9qPdLwb+TRHtfgrN+V+1Rl4WSG8uY804q/kKjTuWy1BGcg/4ONX/N5fMQLXCQ==", "dev": true, "requires": { - "cli-box": "^2.1.1", - "overlap": "^1.5.0", - "ul": "2.1.0" + "cli-box": "5.0.0", + "overlap": "2.0.0", + "ul": "5.0.0" + }, + "dependencies": { + "deffy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.0.0.tgz", + "integrity": "sha512-Gcn10MX982lqx8XmJES2JvN8Im7h0lFwRanyQfkQG2wXko4SouD0pSGUlK6Do165Itfidhpssn6NqlRkKp/4ig==", + "dev": true, + "requires": { + "typpy": "^2.0.0" + } + }, + "typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + }, + "ul": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ul/-/ul-5.0.0.tgz", + "integrity": "sha512-/wMRf3ZchW/MHV8M0fWhxhUTeJAOgrxt6u/9snab4xuMTkCuHo7TH7nyMZxrsjNobAFC8UhCNwlwVVQdVbcf1w==", + "dev": true, + "requires": { + "deffy": "2.0.0", + "typpy": "2.0.0" + } + } } }, "levn": { @@ -38868,10 +42184,13 @@ } }, "limit-it": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/limit-it/-/limit-it-1.1.0.tgz", - "integrity": "sha512-mAF9vkb8SwnYTYTRBbvj5jSJmYkU/85Vvmqp9/aAMLpWwJOAo23oCIux+/LZjH9cF0KINONYBjvhbtdbPA5R2w==", - "dev": true + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/limit-it/-/limit-it-3.2.10.tgz", + "integrity": "sha512-T0NK99pHnkimldr1WUqvbGV1oWDku/xC9J/OqzJFsV1jeOS6Bwl8W7vkeQIBqwiON9dTALws+rX/XPMQqWerDQ==", + "dev": true, + "requires": { + "typpy": "^2.0.0" + } }, "linebreak": { "version": "1.1.0", @@ -39395,6 +42714,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==" + }, "lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", @@ -39621,8 +42945,7 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, "lru-cache": { "version": "5.1.1", @@ -39645,6 +42968,23 @@ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.1.0.tgz", "integrity": "sha512-7w6hmKC0/aoWnEsmPCu5Br54BmbmUp5GfcqBxQngRcXJ+q5fdfjEzn7dxmJh2YdDhgW8PccYtlWKSv4tQkrTQg==" }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.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 + } + } + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -39679,11 +43019,24 @@ } } }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" + }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "requires": { + "object-visit": "^1.0.0" + } + }, "markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -39803,12 +43156,13 @@ } }, "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "requires": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", @@ -39820,50 +43174,10 @@ "yargs-parser": "^20.2.3" }, "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -39881,6 +43195,16 @@ "arr-union": "^3.1.0", "clone-deep": "^0.2.4", "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "merge-descriptors": { @@ -39938,8 +43262,7 @@ "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "min-indent": { "version": "1.0.1", @@ -39973,11 +43296,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -39999,6 +43317,15 @@ } } }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, "mixin-object": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", @@ -40043,6 +43370,23 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-1.3.0.tgz", "integrity": "sha512-sW6dc6TUzbX5tdN5eHBTUu6FuzSJz8wrP0temvkYQT7gnKg2ykDkXsQkECEQoEOlTtKCF+q+JOSh+BGYuCtpug==" }, + "moment-timezone": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", + "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", + "dev": true, + "requires": { + "moment": ">= 2.9.0" + }, + "dependencies": { + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "dev": true + } + } + }, "mongodb-core": { "version": "1.3.21", "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-1.3.21.tgz", @@ -40052,6 +43396,12 @@ "require_optional": "~1.0.0" } }, + "months": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/months/-/months-1.2.0.tgz", + "integrity": "sha512-zFM7hUpziSYGk2DNObYGWgHdRRxAOgjl8CC1Rbl50p/q0rGDsREfk0nbxxmSIquVi/lEAuUY8nwbwkZ8biNCOQ==", + "dev": true + }, "mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -40177,10 +43527,34 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nan": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz", - "integrity": "sha512-Wm2/nFOm2y9HtJfgOLnctGbfvF23FcQZeyUZqDD8JQG3zO5kXh3MkQKiUaA68mJiVWrOzLFkAV1u6bC8P52DJA==" + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } }, "native-duplexpair": { "version": "1.0.0", @@ -40350,272 +43724,6 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" }, - "node-inspector": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-inspector/-/node-inspector-0.7.5.tgz", - "integrity": "sha512-W/GkmmXenEqjBetAz1q4Xyrt4LP1MtB8WL/X7UfrwSxZmSSg4t+mgNCDP+037KkKwLGjRxRjNce0eJV5Tu/lvw==", - "requires": { - "async": "~0.8", - "debug": "~0.8", - "express": "~4.0", - "glob": "~3.2.1", - "opener": "~1.3.0", - "rc": "~0.3.0", - "strong-data-uri": "~0.1.0", - "which": "~1.0.5", - "ws": "~0.4.31", - "yargs": "~1.2.1" - }, - "dependencies": { - "accepts": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.0.0.tgz", - "integrity": "sha512-2GdyQ5yRXA5MZi1gmU/XUFQTo7FtXsR2Jt90pl1pQftbsRdXQn69Mycn7xNGxVVmu1xdzZKe/GyMHnDlcV7ojg==", - "requires": { - "mime": "~1.2.11", - "negotiator": "~0.3.0" - } - }, - "async": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.8.0.tgz", - "integrity": "sha512-M2LC+aqW7VetFcnFiYEbjUsmASW6GSsMNkRzhUzwHoQNfNIRClf5GLgozwuJ4tAMLAfjywrKyQ2wWiODJivQmg==" - }, - "buffer-crc32": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz", - "integrity": "sha512-vMfBIRp/wjlpueSz7Sb0OmO7C5SH58SSmbsT8G4D48YfO/Zgbr29xNXMpZVSC14ujVJfrZZH1Bl+kXYRQPuvfQ==" - }, - "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==" - }, - "cookie": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz", - "integrity": "sha512-YSNOBX085/nzHvrTLEHYHoNdkvpLU1MPjU3r1IGawudZJjfuqnRNIFrcOJJ7bfwC+HWbHL1Y4yMkC0O+HWjV7w==" - }, - "cookie-signature": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz", - "integrity": "sha512-/KzKzsm0OlguYov01OlOpTkX5MhBKUmfL/KMum7R80rPKheb9AwUzr78TwtBt1OdbnWrt4X+wxbTfcQ3noZqHw==" - }, - "debug": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", - "integrity": "sha512-HlXEJm99YsRjLJ8xmuz0Lq8YUwrv7hAJkTEr6/Em3sUlSUNl0UdFA+1SrY4fnykeq1FVkUEUtwRGHs9VvlYbGA==" - }, - "deep-extend": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz", - "integrity": "sha512-t2N+4ihO7YgydJOUI47I6GdXpONJ+jUZmYeTNiifALaEduiCja1mKcq3tuSp0RhA9mMfxdMN3YskpwB7puMAtw==" - }, - "escape-html": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz", - "integrity": "sha512-z6kAnok8fqVTra7Yu77dZF2Y6ETJlxH58wN38wNyuNQLm8xXdKnfNrlSmfXsTePWP03rRVUKHubtUwanwUi7+g==" - }, - "express": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.0.0.tgz", - "integrity": "sha512-HP2D9TkAYTAfau6FklzmchQQH/7Dh/JmbrbiJanV80rO12Kc00z5tDrqahBG3fR6x/RuUZvpEwiQ91b7UhJ8qQ==", - "requires": { - "accepts": "1.0.0", - "buffer-crc32": "0.2.1", - "cookie": "0.1.0", - "cookie-signature": "1.0.3", - "debug": ">= 0.7.3 < 1", - "escape-html": "1.0.1", - "fresh": "0.2.2", - "merge-descriptors": "0.0.2", - "methods": "0.1.0", - "parseurl": "1.0.1", - "path-to-regexp": "0.1.2", - "qs": "0.6.6", - "range-parser": "1.0.0", - "send": "0.2.0", - "serve-static": "1.0.1", - "type-is": "1.0.0", - "utils-merge": "1.0.0" - } - }, - "fresh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.2.tgz", - "integrity": "sha512-ZGGi8GROK//ijm2gB33sUuN9TjN1tC/dvG4Bt4j6IWrVGpMmudUBCxx+Ir7qePsdREfkpQC4FL8W0jeSOsgv1w==" - }, - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha512-hVb0zwEZwC1FXSKRPFTeOtN7AArJcJlI6ULGLtrstaswKNlrTJqAA+1lYlSUop4vjA423xlBzqfVS3iWGlqJ+g==", - "requires": { - "inherits": "2", - "minimatch": "0.3" - } - }, - "ini": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz", - "integrity": "sha512-B6L/jfyFRcG2dqKiHggWnfby52Iy07iabE4F6srQAr/OmVKBRE5uU+B5MQ+nQ7NiYnjz93gENh1GhqHzpDgHgA==" - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==" - }, - "merge-descriptors": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz", - "integrity": "sha512-dYBT4Ep+t/qnPeJcnMymmhTdd4g8/hn48ciaDqLAkfRf8abzLPS6Rb6EBdz5CZCL8tzZuI5ps9MhGQGxk+EuKg==" - }, - "methods": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/methods/-/methods-0.1.0.tgz", - "integrity": "sha512-N4cn4CbDqu7Fp3AT4z3AsO19calgczhsmCGzXLCiUOrWg9sjb1B+yKFKOrnnPGKKvjyJBmw+k6b3adFN2LbuBw==" - }, - "mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha512-Ysa2F/nqTNGHhhm9MV8ure4+Hc+Y8AWiqUdHxsO7xu8zc92ND9f3kpALHjaP026Ft17UfxrMt95c50PLUeynBw==" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==", - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - }, - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==" - }, - "negotiator": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.3.0.tgz", - "integrity": "sha512-q9wF64uB31BDZQ44DWf+8gE7y8xSpBdREAsJfnBO2WX9ecsutfUO6S9uWEdixlDLOlWaqnlnFXXwZxUUmyLfgg==" - }, - "parseurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.0.1.tgz", - "integrity": "sha512-6W9+0+9Ihayqwjgp4OaLLqZ3KDtqPY2PtUPz8YNiy4PamjJv+7x6J9GO93O9rUZOLgaanTPxsKTasxqKkO1iSw==" - }, - "path-to-regexp": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.2.tgz", - "integrity": "sha512-BZU7Qr+qKkXJX9UBypMNikdZ85cQSjtfMhUykJFLJn4SNF0jhEbb9nMRpnNdA76ESryY8JpMA4k6XKdz3JS1pw==" - }, - "qs": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", - "integrity": "sha512-kN+yNdAf29Jgp+AYHUmC7X4QdJPR8czuMWLNLc0aRxkQ7tB3vJQEONKKT9ou/rW7EbqVec11srC9q9BiVbcnHA==" - }, - "range-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.0.tgz", - "integrity": "sha512-wOH5LIH2ZHo0P7/bwkR+aNbJ+kv3CHVX4B8qs9GqbtY29fi1bGPV5xczrutN20G+Z4XhRqRMTW3q0S4iyJJPfw==" - }, - "rc": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/rc/-/rc-0.3.5.tgz", - "integrity": "sha512-QOAK72kdSN8d1wkK1QwHGksba0AyUT/tWQPsFQGHmBPSoPY8Boqr26YATE/nCt/RQ1+iijOUpDjY1QdWBVVMtw==", - "requires": { - "deep-extend": "~0.2.5", - "ini": "~1.1.0", - "minimist": "~0.0.7" - } - }, - "send": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.2.0.tgz", - "integrity": "sha512-CR/kej5a8BChsMJwpmAtqOgdGI3nemoRaPcoXj/choHibvaOfkYcohcAbd9aEG8MhL9CfRH3KlUb+oHZsdNmTg==", - "requires": { - "debug": "*", - "fresh": "~0.2.1", - "mime": "~1.2.9", - "range-parser": "~1.0.0" - } - }, - "serve-static": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.0.1.tgz", - "integrity": "sha512-bo0TWkZYykHO97QfRgoaXQQBBmyheAb3MeYFzufTXDHUdaTwJXFa8NejuKbt7UdovoUzB8lJn4gHGQSEC+R4Nw==", - "requires": { - "send": "0.1.4" - }, - "dependencies": { - "fresh": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz", - "integrity": "sha512-ckGdAuSRr1wBmnq7CsW7eU37DBwQxHx3vW8foJUIrF56rkOy8Osm6Fe8KSwemwyKejivKki7jVBgpBpBJexmrw==" - }, - "range-parser": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz", - "integrity": "sha512-okJVEq9DbZyg+5lD8pr6ooQmeA0uu8DYIyAU7VK1WUUK7hctI1yw2ZHhKiKjB6RXaDrYRmTR4SsIHkyiQpaLMA==" - }, - "send": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/send/-/send-0.1.4.tgz", - "integrity": "sha512-NJnIaB29/EcNqkNneUAm16oEVnzM2LeNBc/hmgKuExv2k9pCZQEw8SHJeCdjqesHJTyWAr7x5HjeOmRFS4BoFw==", - "requires": { - "debug": "*", - "fresh": "0.2.0", - "mime": "~1.2.9", - "range-parser": "0.0.4" - } - } - } - }, - "type-is": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.0.0.tgz", - "integrity": "sha512-CLdmAJgLeMtSPcTFX3eDdC1+ysfYoVdcYjMtuDtg23/fhHXoP5quNsvobr05ZNlG7og+oHQ4bosEzJX++DlIzQ==", - "requires": { - "mime": "~1.2.11" - } - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha512-HwU9SLQEtyo+0uoKXd1nkLqigUWLB+QuNQR4OcmB73eWqksM5ovuqcycks2x043W8XVb75rG1HQ0h93TMXkzQQ==" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha512-E87fdQ/eRJr9W1X4wTPejNy9zTW3FI2vpCZSJ/HAY+TkjKVC0TUm1jk6vn2Z7qay0DQy0+RBGdXxj+RmmiGZKQ==" - }, - "ws": { - "version": "0.4.32", - "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz", - "integrity": "sha512-htqsS0U9Z9lb3ITjidQkRvkLdVhQePrMeu475yEfOWkAYvJ6dSjQp1tOH6ugaddzX5b7sQjMPNtY71eTzrV/kA==", - "requires": { - "commander": "~2.1.0", - "nan": "~1.0.0", - "options": ">=0.0.5", - "tinycolor": "0.x" - } - }, - "yargs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", - "integrity": "sha512-wwBCGnWIeR7M6d7Wmd4NT48TI8jEzRXFzmYGTNpsHZZ9Uu13vj+p6EawS7kGrzBvkX6rF7vYjUrQnwEOI7QOIw==", - "requires": { - "minimist": "^0.1.0" - }, - "dependencies": { - "minimist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha512-wR5Ipl99t0mTGwLjQJnBjrP/O7zBbLZqvA3aw32DmLx+nXHfWctUjzDjnDx09pX1Po86WFQazF9xUzfMea3Cnw==" - } - } - } - } - }, "node-nlp": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/node-nlp/-/node-nlp-4.24.0.tgz", @@ -40668,14 +43776,37 @@ } }, "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==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "normalize-path": { @@ -42361,8 +45492,7 @@ "npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, "npm-run-path": { "version": "4.0.1", @@ -42372,6 +45502,14 @@ "path-key": "^3.0.0" } }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, "nugget": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.2.0.tgz", @@ -42422,6 +45560,67 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -42446,6 +45645,14 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "requires": { + "isobject": "^3.0.0" + } + }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -42489,6 +45696,15 @@ "wrappy": "1" } }, + "one-by-one": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/one-by-one/-/one-by-one-2.2.1.tgz", + "integrity": "sha512-mHHNdoFnj1DAH2t1X6YKGyuVFi8EkIWhqgUrvdyLTuhMCVMfGFnVVgPGmLFVFzrIx2BEz+Xld4TtCGQwlyfqUw==", + "dev": true, + "requires": { + "deffy": "^2.0.0" + } + }, "one-time": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", @@ -42520,10 +45736,23 @@ "is-wsl": "^2.2.0" } }, - "opener": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.3.0.tgz", - "integrity": "sha512-sBqelaOnn8SA+zefIj/VMXgIACr6URhyysMn2DEx2fTcbmyDbPf8wWs5rPgoR2SVRBk1oNYl8YE7LwV84FCJCg==" + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", + "dev": true + } + } }, "option": { "version": "0.2.4", @@ -42543,11 +45772,6 @@ "word-wrap": "~1.2.3" } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==" - }, "ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -42738,19 +45962,45 @@ } }, "overlap": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/overlap/-/overlap-1.5.0.tgz", - "integrity": "sha512-R9J9wul7UmFFTr7jJIFIj1o6WhPWkxK1Q1tI7LxjUUB7y9FvO/p+zpLRA85C7WRnR11QFx/OrFkE1lib5vYfRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/overlap/-/overlap-2.0.0.tgz", + "integrity": "sha512-ws+kLVh3SdfWupIOWklnU91UHix2PU85bJf52/TPoo0EFgEYhKB6+2fCM/NuPreWMuM51cXN4xNbygNqkL8YrQ==", "dev": true, "requires": { - "ansi-parser": "1.4.0" + "ansi-parser": "3.0.0", + "cli-box": "5.0.0", + "couleurs": "5.0.0" + }, + "dependencies": { + "ansi-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-parser/-/ansi-parser-3.0.0.tgz", + "integrity": "sha512-edNYJqqmeQJ+N7YV6gWQ4xAumqctsOchnNVDZEHsMSVZcytGLwq9SbGDwm9Jg+XpPNdl6zSGgujFRqiu1PmFYg==", + "dev": true + }, + "couleurs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/couleurs/-/couleurs-5.0.0.tgz", + "integrity": "sha512-B+loDDlwPNwI27lC2WLJX9EqDhYV97nkUq4in2mJVco3P53hDztcIu3kUhrqS4+eb6w7dL9WcXADkn7V2DQFOw==", + "dev": true, + "requires": { + "flat-colors": "3.0.0", + "typpy": "2.0.0", + "x256": "0.0.2" + } + }, + "typpy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.0.0.tgz", + "integrity": "sha512-IucehPujjCCGqmRNLfJwwDXRDleVfnt/dKMQhQWJv8q62dXb6TuJs3zscdtq1agk+po5E+WweZ9RS0VMuaXXfg==", + "dev": true + } } }, "p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "p-defer": { "version": "3.0.0", @@ -42783,6 +46033,11 @@ "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", "dev": true }, + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -42804,7 +46059,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -42823,11 +46077,184 @@ "retry": "^0.13.1" } }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + }, + "dependencies": { + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + } + } + }, "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==" }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + } + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + } + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -42851,6 +46278,15 @@ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" }, + "parse-it": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/parse-it/-/parse-it-1.0.10.tgz", + "integrity": "sha512-VAG4EuoNd2TT2wSRUuKyLEkZR3MhdWc+3UPp5CDQzqSt/FiniG+yJ5RXyJYiuzVAMEKL4d97gx6O3LR5jEB3uQ==", + "dev": true, + "requires": { + "regex-escape": "^3.4.0" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -42873,11 +46309,51 @@ "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true }, + "parse-url": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz", + "integrity": "sha512-1wj9nkgH/5EboDxLwaTMGJh3oH3f+Gue+aGdh631oCqoSBpokzmMmOldvOeBPtB8GJBYJbaF93KPzlkU+Y1ksg==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + }, + "dependencies": { + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + } + } + }, + "parse5": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "requires": { + "entities": "^4.4.0" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" + }, "path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -42887,6 +46363,11 @@ "util": "^0.10.3" } }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -42942,9 +46423,9 @@ } }, "pdf-text-extract": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pdf-text-extract/-/pdf-text-extract-1.1.3.tgz", - "integrity": "sha512-cFL9it2Iu+KLoH7QA2RLNESyc0OLno4u2OqY5QcUrD32xg0AVLZ1UAq1bWClVaxHjmi4C2ilfea/edxv4kQgAQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pdf-text-extract/-/pdf-text-extract-1.5.0.tgz", + "integrity": "sha512-5zpNQljVf4h0b9sY8KGKDHxYoTYqDjahvkxmpHwpxBe3p92AWnscpWausl5/OaedOgnS8Pw53DOQx7bqtYcpow==", "requires": { "yargs": "^1.2.5" }, @@ -43086,6 +46567,46 @@ } } }, + "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==", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.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==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "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==" + } + } + }, "pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -43104,6 +46625,12 @@ "semver-compare": "^1.0.0" } }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, "png-js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", @@ -43114,6 +46641,17 @@ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" }, + "pop-iterate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pop-iterate/-/pop-iterate-1.0.1.tgz", + "integrity": "sha512-HRCx4+KJE30JhX84wBN4+vja9bNfysxg1y28l0DuJmkoaICiv2ZSilKddbS48pq50P8d2erAhqDLbp47yv3MbQ==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" + }, "pptxtemplater": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/pptxtemplater/-/pptxtemplater-1.0.5.tgz", @@ -43159,6 +46697,12 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true + }, "prettier-standard": { "version": "15.0.1", "resolved": "https://registry.npmjs.org/prettier-standard/-/prettier-standard-15.0.1.tgz", @@ -43689,21 +47233,6 @@ "through2": "~0.2.3" } }, - "promise": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", - "integrity": "sha512-O+uwGKreKNKkshzZv2P7N64lk6EP17iXBn0PbUnNQhk+Q0AHLstiTrjkx3v5YBd3cxUe7Sq6KyRhl/A0xUjk7Q==", - "requires": { - "asap": "~1.0.0" - }, - "dependencies": { - "asap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", - "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" - } - } - }, "promised-mongo": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/promised-mongo/-/promised-mongo-1.2.0.tgz", @@ -43845,10 +47374,24 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } }, "glob": { "version": "8.0.3", @@ -43906,6 +47449,12 @@ } } }, + "protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -43995,6 +47544,11 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" }, + "form-data-encoder": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.3.tgz", + "integrity": "sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ==" + }, "got": { "version": "12.5.3", "resolved": "https://registry.npmjs.org/got/-/got-12.5.3.tgz", @@ -44071,6 +47625,15 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, "puppeteer": { "version": "19.2.2", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.2.2.tgz", @@ -44187,6 +47750,17 @@ "puppeteer-extra-plugin-user-data-dir": "^2.4.0" } }, + "q": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/q/-/q-2.0.3.tgz", + "integrity": "sha512-gv6vLGcmAOg96/fgo3d9tvA4dJNZL3fMyBqVRrGxQ+Q/o4k9QzbJ3NQF9cOO/71wRodoXhaPgphvMFU68qVAJQ==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "pop-iterate": "^1.0.1", + "weak-map": "^1.0.5" + } + }, "qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", @@ -44321,6 +47895,17 @@ "side-channel": "^1.0.4" } }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -44341,6 +47926,18 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, + "quote": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/quote/-/quote-0.4.0.tgz", + "integrity": "sha512-KHp3y3xDjuBhRx+tYKOgzPnVHMRlgpn2rU450GcU4PL24r1H6ls/hfPrxDwX2pvYMlwODHI2l8WwgoV69x5rUQ==", + "dev": true + }, + "ramda": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", + "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", + "dev": true + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -44355,6 +47952,16 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "rc": { @@ -44399,12 +48006,29 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", - "dev": true, "requires": { "glob": "^7.1.1", "json-parse-even-better-errors": "^2.3.0", "normalize-package-data": "^2.0.0", "npm-normalize-package-bin": "^1.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "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==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + } } }, "read-pkg": { @@ -44418,6 +48042,22 @@ "type-fest": "^0.6.0" }, "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "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==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -44543,7 +48183,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, "requires": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", @@ -44581,6 +48220,11 @@ "esprima": "~4.0.0" } }, + "reduce-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", + "integrity": "sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==" + }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -44591,6 +48235,32 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, + "regex-escape": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/regex-escape/-/regex-escape-3.4.10.tgz", + "integrity": "sha512-qEqf7uzW+iYcKNLMDFnMkghhQBnGdivT6KqVQyKsyjSWnoFyooXVnxrw9dtv3AFLnD6VBGXxtZGAQNFGFTnCqA==", + "dev": true + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, "regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -44615,19 +48285,25 @@ "rc": "1.2.8" } }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" }, - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha512-Nh30JLeMHdoI+AsQ5eblhZ7YlTsM9wiJQe/AHIunlK3KWzvXhXb36IJ7K1IOeRjIOtzMjdUHjwXUFxKJoPTSOg==", - "requires": { - "is-finite": "^1.0.0" - } - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -44823,11 +48499,15 @@ "global-dirs": "^0.1.1" } }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" + }, "responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, "requires": { "lowercase-keys": "^2.0.0" } @@ -44847,6 +48527,11 @@ "resolved": "https://registry.npmjs.org/restructure/-/restructure-2.0.1.tgz", "integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg==" }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -44877,14 +48562,6 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -44939,6 +48616,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "requires": { + "ret": "~0.1.10" + } + }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -45012,14 +48697,6 @@ "yargs": "^16.2.0" }, "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -45238,6 +48915,24 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -45451,11 +49146,169 @@ "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", "dev": true }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, "spawn-error-forwarder": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", @@ -45535,6 +49388,25 @@ "through": "2" } }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, "split2": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", @@ -45560,13 +49432,11 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "ssf": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.8.2.tgz", - "integrity": "sha512-+ZkFDAG+ImJ48DcZvabx6YTrZ67DKkM0kbyOOtH73mbUEvNhQWWgRZrHC8+k7GuGKWQnACYLi7bj0eCt1jmosQ==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", "requires": { - "colors": "0.6.2", - "frac": "0.3.1", - "voc": "" + "frac": "~1.1.2" } }, "sshpk": { @@ -45605,15 +49475,6 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz", "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==" }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "https-proxy-agent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", @@ -45623,35 +49484,6 @@ "debug": "4" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "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==" - }, - "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==", - "requires": { - "find-up": "^4.0.0" - } - }, "puppeteer": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-5.5.0.tgz", @@ -45693,6 +49525,82 @@ } } }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "static-methods": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/static-methods/-/static-methods-1.0.12.tgz", + "integrity": "sha512-QreySTr3LHtHk0OhrZ3RKvrV/4nBRyUPPCycmTUQTENIopEaDalZzI+q+KfmNmcxeHhA3WKe3h25lAxXZEDGVw==", + "dev": true + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -45744,6 +49652,12 @@ "lodash": "^4.15.0" } }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -45773,13 +49687,6 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "dependencies": { - "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==" - } } }, "string.prototype.trimend": { @@ -45871,14 +49778,6 @@ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, - "strong-data-uri": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strong-data-uri/-/strong-data-uri-0.1.1.tgz", - "integrity": "sha512-2DXKICrngSlPD7F8qOvmZ/S2J8z7kBlL1c81dDCr7Ojx2qSrQiV8sQRYKnQkqz9npOewj62B2oa8QFmh+hgSkA==", - "requires": { - "truncate": "~1.0.2" - } - }, "strtok3": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", @@ -45987,11 +49886,6 @@ "url": "~0.11.0" }, "dependencies": { - "form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" - }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -46086,6 +49980,33 @@ } } }, + "table-layout": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", + "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", + "requires": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "requires": { + "typical": "^2.6.1" + } + }, + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==" + } + } + }, "tabulator-tables": { "version": "5.4.2", "resolved": "https://registry.npmjs.org/tabulator-tables/-/tabulator-tables-5.4.2.tgz", @@ -46169,14 +50090,6 @@ "ieee754": "^1.2.1" } }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, "jsbi": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", @@ -46293,82 +50206,6 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "textract": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/textract/-/textract-0.20.0.tgz", - "integrity": "sha512-B/dgAGxWsgy7tb8qyeYrw2v1rHv76jkO8+PlezbrDe+OxH0Vhye0ijs0wnK2D+9cW1S75TNg3qzjJbwo+2gcmQ==", - "requires": { - "cheerio": "0.17.0", - "j": "0.3.11", - "meow": "2.0.0", - "mime": "1.2.9", - "pdf-text-extract": "1.1.3", - "xmldom": "0.1.16", - "xpath": "0.0.5" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==" - }, - "camelcase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz", - "integrity": "sha512-hwNYKTjJTlDabjJp2xn0h8bRmOpObvXVgYbQmR+Xob/EeBDtYea3xttjr5hqiWqLWtI3/6xO7x1ZAktQ9up+ag==", - "requires": { - "camelcase": "^1.0.1", - "map-obj": "^1.0.0" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==" - }, - "indent-string": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-1.2.2.tgz", - "integrity": "sha512-Z1vqf6lDC3f4N2mWqRywY6odjRatPNGDZgUr4DY9MLC14+Fp2/y+CI/RnNGlb8hD6ckscE/8DlZUwHUaiDBshg==", - "requires": { - "get-stdin": "^4.0.1", - "minimist": "^1.1.0", - "repeating": "^1.1.0" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" - }, - "meow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-2.0.0.tgz", - "integrity": "sha512-X7rkdgy5Wxxp2MhCiAOkC3lqfkrJkt3iXvW4BY0rYQIn3GMvYvBTsAPEmHHTjTeVzBelrRcQa2F80rYfigz2+A==", - "requires": { - "camelcase-keys": "^1.0.0", - "indent-string": "^1.1.0", - "minimist": "^1.1.0", - "object-assign": "^1.0.0" - } - }, - "mime": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.9.tgz", - "integrity": "sha512-WiLgbHTIq5AYUvU/Luli4mZ1bUcHpGNHyCsbl+KPMg4zt+XUDpQehWjuBjdLaEvDTinvKj/FgfQt3fPoT7j08g==" - }, - "object-assign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz", - "integrity": "sha512-LpUkixU1BUMQ6bwUHbOue4IGGbdRbxi+IEZw7zHniw78erlxrKGHbhfLbHIsI35LGbGqys6QOrjVmLnD2ie+1A==" - }, - "xpath": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.5.tgz", - "integrity": "sha512-Y1Oyy8lyIDwWpmKIWBF0RZrQOP1fzE12G0ekSB1yzKPtbAdCI5sBCqBU/CAZUkKk81OXuq9tul/5lyNS+22iKg==" - } - } - }, "throttleit": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", @@ -46424,6 +50261,12 @@ } } }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true + }, "timers-ext": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", @@ -46438,11 +50281,6 @@ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, - "tinycolor": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz", - "integrity": "sha512-+CorETse1kl98xg0WAzii8DTT4ABF4R3nquhrkIbVGcw1T8JYs5Gfx9xEfGINPUZGDj9C4BmOtuKeaTtuuRolg==" - }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -46457,6 +50295,52 @@ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "peer": true }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -46506,93 +50390,162 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "transformers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", - "integrity": "sha512-zJf5m2EIOngmBbDe2fhTPpCjzM2qkZVqrFJZc2jaln+KBeEaYKhS2QMOIkfVrNUyoOwqgbTwOHATzr3jZRQDyg==", - "requires": { - "css": "~1.0.8", - "promise": "~2.0", - "uglify-js": "~2.2.5" - }, - "dependencies": { - "is-promise": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", - "integrity": "sha512-mjWH5XxnhMA8cFnDchr6qRP9S/kLntKuEfIYku+PaN1CnS8v+OG9O/BKpRCVRJvpIkgAZm0Pf5Is3iSSOILlcg==" - }, - "optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", - "requires": { - "wordwrap": "~0.0.2" - } - }, - "promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", - "integrity": "sha512-OgMc+sxI3zWF8D5BJGtA0z7/IsrDy1/0cPaDv6HPpqa2fSTo7AdON5U10NbZCUeF+zCAj3PtfPE50Hf02386aA==", - "requires": { - "is-promise": "~1" - } - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "requires": { - "amdefine": ">=0.0.4" - } - }, - "uglify-js": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", - "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", - "requires": { - "optimist": "~0.3.5", - "source-map": "~0.1.7" - } - } - } - }, "traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" }, - "travis-ci": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/travis-ci/-/travis-ci-2.2.0.tgz", - "integrity": "sha512-6m+VoKD/va53D4O8I1SLtoLXKLHVUoEL2GksMKLUR0yUqYqco2kj5QB4gdBdFAMw3XL0VBozFsGw8jb6MrrIEQ==", - "dev": true, - "requires": { - "github": "~0.1.10", - "lodash": "~1.3.1", - "request": "^2.87.0", - "underscore.string": "~2.2.0rc" - }, - "dependencies": { - "lodash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.3.1.tgz", - "integrity": "sha512-F7AB8u+6d00CCgnbjWzq9fFLpzOMCgq6mPjOW4+8+dYbrnc0obRrC+IHctzfZ1KKTQxX0xo/punrlpOWcf4gpw==", - "dev": true - } - } - }, "travis-deploy-once": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/travis-deploy-once/-/travis-deploy-once-3.0.0.tgz", - "integrity": "sha512-ST4Rs/WrAeq6MXi9/Iagw7p1MLje1mPV1UqGXB2jvBAweBlFHOjqbBvfpGLjmI+ZckOc2FkX0X1gNBOa9nc13w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/travis-deploy-once/-/travis-deploy-once-3.3.0.tgz", + "integrity": "sha512-N0l+sdYHMQbJmQWfjmxkKRJrMWJ+52Ve1dhGDiPhGXFiWO0A0zSeTxiFujz0rSOLOl9OhsZ9EMlJh2lNrgGugA==", "dev": true, "requires": { "chalk": "^2.1.0", + "got": "^8.0.1", "p-retry": "^1.0.0", "semver": "^5.4.1", - "travis-ci": "^2.1.1" + "url-join": "^2.0.2" }, "dependencies": { + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", + "dev": true + } + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", + "dev": true + }, "p-retry": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-1.0.0.tgz", @@ -46602,11 +50555,32 @@ "retry": "^0.10.0" } }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "retry": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", "integrity": "sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ==", "dev": true + }, + "url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow==", + "dev": true } } }, @@ -46634,10 +50608,257 @@ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, - "truncate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/truncate/-/truncate-1.0.5.tgz", - "integrity": "sha512-rVvPVihrjbMJ4ISBmQMky7YNPj24oiGigLEggNbQnClOF8NIs7FL9UBAAhXy7GN93Hpk1hE6AjIpAXp3Gv55dw==" + "ts-morph": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-1.3.5.tgz", + "integrity": "sha512-GvndIxlv8Bwv8AS3HZmLdl+84KAc7foXgiW6TKXJeESN00PAmosj/G/XO9TDb2m5UJ9616OlC1oVlm3HjuzeGg==", + "requires": { + "@dsherret/to-absolute-glob": "^2.0.2", + "code-block-writer": "7.2.2", + "fs-extra": "^7.0.0", + "glob-parent": "^3.1.0", + "globby": "^8.0.1", + "is-negated-glob": "^1.0.0", + "multimatch": "^2.1.0", + "tslib": "^1.9.0", + "typescript": ">=3.0.1 <3.6.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "requires": { + "is-extglob": "^2.1.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha512-0mzK8ymiWdehTBiJh0vClAzGyQbdtyWqzSVx//EK4N/D+599RFlGfTAsKw2zMSABtDG9C6Ul2+t8f2Lbdjf5mA==", + "requires": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==" + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } }, "ts-node": { "version": "10.9.1", @@ -46674,6 +50895,29 @@ } } }, + "ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "peer": true + }, + "ts-type": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ts-type/-/ts-type-3.0.1.tgz", + "integrity": "sha512-cleRydCkBGBFQ4KAvLH0ARIkciduS745prkGVVxPGvcRGhMMoSJUB7gNR1ByKhFTEYrYRg2CsMRGYnqp+6op+g==", + "requires": { + "@types/node": "*", + "tslib": ">=2", + "typedarray-dts": "^1.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + } + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -46712,14 +50956,6 @@ "argparse": "^1.0.7", "esprima": "^4.0.0" } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "requires": { - "tslib": "^1.8.1" - } } } }, @@ -46728,6 +50964,14 @@ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -46789,6 +51033,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "typedarray-dts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typedarray-dts/-/typedarray-dts-1.0.0.tgz", + "integrity": "sha512-Ka0DBegjuV9IPYFT1h0Qqk5U4pccebNIJCGl8C5uU7xtOs+jpJvKGAY4fHGK25hTmXZOEUl9Cnsg5cS6K/b5DA==" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -46803,11 +51052,15 @@ "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==" }, "typescript-rest-rpc": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typescript-rest-rpc/-/typescript-rest-rpc-1.0.7.tgz", - "integrity": "sha512-blwtOLRkb7AALcwrr+X/+MAiEL7WVnLaDIBfb4HwVDwn/a8J35k76DXvDnnZOeUtUzKZ42XmcIw0oykuoqSh7g==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/typescript-rest-rpc/-/typescript-rest-rpc-1.0.10.tgz", + "integrity": "sha512-LbrCfBGNldOkkU9lk1Cgl8q/qp9zWitVETj+orfIWS0vuqZj3KQBWT1Gf4Jubig4n28ciSojqCLBEgndiC7MFQ==", "requires": { - "moment": "^2.22.1" + "command-line-args": "^5.0.2", + "command-line-usage": "^5.0.5", + "moment": "^2.22.1", + "ts-morph": "^1.0.0", + "write-yaml": "^1.0.0" }, "dependencies": { "moment": { @@ -46817,6 +51070,11 @@ } } }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + }, "typpy": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.3.11.tgz", @@ -46840,17 +51098,15 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", - "optional": true - }, "ul": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ul/-/ul-2.1.0.tgz", - "integrity": "sha512-0R6FDJ4LSs71F6Ux8JurCYm5bQixMxs/nvyNZnIkh4tQ0xJzMz7RGq9+WHusFAYwYSCaT6xHauWDvQrdXNR9AA==", - "dev": true + "version": "5.2.15", + "resolved": "https://registry.npmjs.org/ul/-/ul-5.2.15.tgz", + "integrity": "sha512-svLEUy8xSCip5IWnsRa0UOg+2zP0Wsj4qlbjTmX6GJSmvKMHADBuHOm1dpNkWqWPIGuVSqzUkV3Cris5JrlTRQ==", + "dev": true, + "requires": { + "deffy": "^2.2.2", + "typpy": "^2.3.4" + } }, "umzug": { "version": "2.3.0", @@ -46883,20 +51139,13 @@ "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==" }, "underscore": { "version": "1.13.6", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", - "integrity": "sha512-3FVmhXqelrj6gfgp3Bn6tOavJvW0dNH2T+heTD38JRxIrAbiuzbqjknszoOYj3DyFB1nWiLj208Qt2no/L4cIA==", - "dev": true - }, "unicode-properties": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", @@ -46922,6 +51171,24 @@ } } }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -46945,6 +51212,42 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" + } + } + }, "unzipper": { "version": "0.10.11", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", @@ -46979,6 +51282,103 @@ "picocolors": "^1.0.0" } }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.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" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -46987,6 +51387,11 @@ "punycode": "^2.1.0" } }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" + }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -47017,11 +51422,31 @@ "requires-port": "^1.0.0" } }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, "utf-8-validate": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", @@ -47155,16 +51580,6 @@ "vm2": "^3.9.11" } }, - "voc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/voc/-/voc-1.2.0.tgz", - "integrity": "sha512-BOuDjFFYvJdZO6e/N65AlaDItXo2TgyLjeyRYcqgAPkXpp5yTJcvkL2n+syO1r9Qc5g96tfBD2tuiMhYDmaGcA==" - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==" - }, "walk-promise": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/walk-promise/-/walk-promise-0.2.0.tgz", @@ -47196,6 +51611,12 @@ "defaults": "^1.0.3" } }, + "weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==", + "dev": true + }, "web-streams-polyfill": { "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", @@ -47256,15 +51677,6 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==" }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -47276,35 +51688,6 @@ "universalify": "^2.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==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "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==" - }, - "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==", - "requires": { - "find-up": "^4.0.0" - } - }, "puppeteer": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", @@ -47390,10 +51773,14 @@ "is-typed-array": "^1.1.10" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==" + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } }, "winston": { "version": "3.8.2", @@ -47430,39 +51817,6 @@ } } }, - "winston-logs-display": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/winston-logs-display/-/winston-logs-display-1.0.0.tgz", - "integrity": "sha512-CTb3VKNNRDPEiFwGKftpaNwzERuZ/UO3bbRaZU/hce8IWPC5/SFZ78vdjvgppoK53P8hVIglj1ArJM2oZj2FuA==", - "requires": { - "bluebird": "^3.5.1", - "express": "^4.9.4", - "jade": "^1.7.0", - "lodash": "^4.17.5", - "serve-static": "^1.10.1", - "winston": "^2.4.2" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" - }, - "winston": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.7.tgz", - "integrity": "sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==", - "requires": { - "async": "^2.6.4", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - } - } - } - }, "winston-transport": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", @@ -47485,22 +51839,6 @@ } } }, - "with": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", - "integrity": "sha512-mJZFpyEc1JTAdxhi/vhVeAM2S7vsltEKDiexDDo1HuAzlYKhcVUU6cwY8cHrFYdt82ZNkfKCeyhA3IYFegI0Kg==", - "requires": { - "acorn": "^1.0.1", - "acorn-globals": "^1.0.3" - }, - "dependencies": { - "acorn": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", - "integrity": "sha512-FsqWmApWGMGLKKNpHt12PMc5AK7BaZee0WRh04fCysmTzHe+rrKOa2MKjORhnzfpe4r0JnfdqHn02iDA9Dqj2A==" - } - } - }, "wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", @@ -47527,7 +51865,24 @@ "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==" + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "dev": true + }, + "wordwrapjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", + "requires": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + }, + "dependencies": { + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==" + } + } }, "wrap-ansi": { "version": "7.0.0", @@ -47582,6 +51937,47 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "write": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/write/-/write-0.3.3.tgz", + "integrity": "sha512-e63bsTAFxFUU8OGClhjhhf2R72Njpq6DDTOFFBxDkfZFwoRRKZUx9rll6g/TvY0UcCdKE2OroYZje0v9ROzmfA==", + "requires": { + "fs-exists-sync": "^0.1.0", + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "write-yaml": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/write-yaml/-/write-yaml-1.0.0.tgz", + "integrity": "sha512-QFB0QwNlUTSsICNb1HV+822MvFpTC1gtKcOfm0B9oqz4qOQXbRuMSxWPWryTEFBEZDWbI5zXabXArvShXTdLiA==", + "requires": { + "extend-shallow": "^2.0.1", + "js-yaml": "^3.8.3", + "write": "^0.3.3" + }, + "dependencies": { + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -47594,17 +51990,11 @@ "integrity": "sha512-ZsIH+sheoF8YG9YG+QKEEIdtqpHRA9FYuD7MqhfyB1kayXU43RUNBFSxBEnF8ywSUxdg+8no4+bPr5qLbyxKgA==", "dev": true }, - "xlsjs": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/xlsjs/-/xlsjs-0.7.6.tgz", - "integrity": "sha512-IQtL2z+BVYaIVzEhknZ1YBr8ItUbqiS7kaQZ3O35/k1q+kSgjVxmzwno6r3EbBgEWhrVCad2mKbnFeMmEE5zdw==", - "requires": { - "cfb": "~0.11.0", - "codepage": "", - "commander": "", - "exit-on-epipe": "", - "ssf": "~0.8.1" - } + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true }, "xlsx": { "version": "0.18.5", @@ -47618,30 +52008,6 @@ "ssf": "~0.11.2", "wmf": "~1.0.1", "word": "~0.3.0" - }, - "dependencies": { - "cfb": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", - "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", - "requires": { - "adler-32": "~1.3.0", - "crc-32": "~1.2.0" - } - }, - "frac": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", - "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" - }, - "ssf": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", - "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", - "requires": { - "frac": "~1.1.2" - } - } } }, "xml2js": { @@ -47675,11 +52041,6 @@ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" }, - "xmldom": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.16.tgz", - "integrity": "sha512-BAf7j3VCoH0YKmJkdN1yXDeHRj+T9Z2oxIhuaSvX3NigmNEInT9o9We6T+Ruh75hLZQBnATmekSmd0nd6GGrow==" - }, "xpath": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", diff --git a/package.json b/package.json index 34ea6075..5488fb59 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,6 @@ "core-js": "3.26.1", "data-forge": "1.9.6", "date-diff": "1.0.2", - "debugger-api": "0.1.2", "docxtemplater": "3.32.4", "dotenv-extended": "2.9.0", "exceljs": "4.3.0", @@ -106,7 +105,7 @@ "luxon": "3.1.0", "mammoth": "1.5.1", "marked": "4.2.2", - "moment": "^1.3.0", + "moment": "1.3.0", "ms-rest-azure": "3.0.2", "nexmo": "2.9.1", "node-cron": "3.0.2", @@ -143,7 +142,7 @@ "swagger-client": "^3.18.5", "tabulator-tables": "5.4.2", "tedious": "15.1.2", - "textract": "^0.20.0", + "@nosferatu500/textract": "3.1.2", "twitter-api-v2": "1.12.9", "typescript": "4.9.3", "typescript-rest-rpc": "^1.0.7", @@ -156,13 +155,11 @@ "washyourmouthoutwithsoap": "1.0.2", "whatsapp-web.js": "1.18.3", "winston": "3.8.2", - "winston-logs-display": "1.0.0", - "yarn": "1.22.19" + "yarn": "^1.22.19" }, "devDependencies": { - "@types/puppeteer": "7.0.4", "@types/url-join": "4.0.1", - "ban-sensitive-files": "^1.3.0", + "ban-sensitive-files": "1.9.18", "commitizen": "4.2.5", "cz-conventional-changelog": "3.3.0", "dependency-check": "4.1.0", diff --git a/packages/admin.gbapp/dialogs/AdminDialog.ts b/packages/admin.gbapp/dialogs/AdminDialog.ts index fe0f18bd..8b16fcad 100644 --- a/packages/admin.gbapp/dialogs/AdminDialog.ts +++ b/packages/admin.gbapp/dialogs/AdminDialog.ts @@ -50,11 +50,11 @@ import { CollectionUtil } from 'pragmatismo-io-framework'; * Dialogs for administration tasks. */ export class AdminDialog extends IGBDialog { - public static isIntentYes(locale, utterance) { + public static isIntentYes (locale, utterance) { return utterance.toLowerCase().match(Messages[locale].affirmative_sentences); } - public static isIntentNo(locale, utterance) { + public static isIntentNo (locale, utterance) { return utterance.toLowerCase().match(Messages[locale].negative_sentences); } @@ -64,7 +64,7 @@ export class AdminDialog extends IGBDialog { * @param bot The bot adapter. * @param min The minimal bot instance data. */ - public static setup(min: GBMinInstance) { + public static setup (min: GBMinInstance) { // Setup services. const importer = new GBImporter(min.core); @@ -77,8 +77,7 @@ export class AdminDialog extends IGBDialog { async step => { if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { return await step.beginDialog('/auth'); - } - else { + } else { return await step.next(step.options); } }, @@ -109,8 +108,7 @@ export class AdminDialog extends IGBDialog { async step => { if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { return await step.beginDialog('/auth'); - } - else { + } else { return await step.next(step.options); } }, @@ -200,8 +198,7 @@ export class AdminDialog extends IGBDialog { async step => { if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { return await step.beginDialog('/auth'); - } - else { + } else { return await step.next(step.options); } }, @@ -237,17 +234,15 @@ export class AdminDialog extends IGBDialog { min.dialogs.add( new WaterfallDialog('/publish', [ async step => { - if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { return await step.beginDialog('/auth'); - } - else { + } else { return await step.next(step.options); } }, async step => { - if (step.activeDialog.state.options.confirm || process.env.ADMIN_OPEN_PUBLISH === "true") { + if (step.activeDialog.state.options.confirm || process.env.ADMIN_OPEN_PUBLISH === 'true') { return await step.next('sim'); } else { const locale = step.context.activity.locale; @@ -266,7 +261,7 @@ export class AdminDialog extends IGBDialog { if (step.activeDialog.state.options.firstTime) { canPublish = true; } else { - canPublish = AdminDialog.canPublish(min, from) || process.env.ADMIN_OPEN_PUBLISH === "true"; + canPublish = AdminDialog.canPublish(min, from) || process.env.ADMIN_OPEN_PUBLISH === 'true'; } if (!canPublish) { @@ -313,11 +308,14 @@ export class AdminDialog extends IGBDialog { try { let cmd1; if (packageName.indexOf('.') !== -1) { - cmd1 = `deployPackage ${process.env.STORAGE_SITE} /${process.env.STORAGE_LIBRARY}/${botId}.gbai/${packageName}`; + cmd1 = `deployPackage ${process.env.STORAGE_SITE} /${ + process.env.STORAGE_LIBRARY + }/${botId}.gbai/${packageName}`; } else { cmd1 = `deployPackage ${packageName}`; } - if ((await (deployer as any).getStoragePackageByName(min.instance.instanceId, packageName)) !== null && + if ( + (await (deployer as any).getStoragePackageByName(min.instance.instanceId, packageName)) !== null && !process.env.DONT_DOWNLOAD ) { const cmd2 = `undeployPackage ${packageName}`; @@ -350,12 +348,11 @@ export class AdminDialog extends IGBDialog { * the /broadcast command with specific phone numbers. * @param phone Phone number to check (eg.: +5521900002233) */ - public static canPublish(min: GBMinInstance, phone: string): Boolean { + public static canPublish (min: GBMinInstance, phone: string): Boolean { if (process.env.SECURITY_CAN_PUBLISH !== undefined) { let list = process.env.SECURITY_CAN_PUBLISH.split(';'); - const canPublish = - min.core.getParam(min.instance, 'Can Publish', null); + const canPublish = min.core.getParam(min.instance, 'Can Publish', null); if (canPublish) { list = list.concat(canPublish.split(';')); } @@ -370,14 +367,13 @@ export class AdminDialog extends IGBDialog { } } - private static setupSecurityDialogs(min: GBMinInstance) { + private static setupSecurityDialogs (min: GBMinInstance) { min.dialogs.add( new WaterfallDialog('/setupSecurity', [ async step => { if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { return await step.beginDialog('/auth'); - } - else { + } else { return await step.next(step.options); } }, @@ -398,10 +394,8 @@ export class AdminDialog extends IGBDialog { async step => { step.activeDialog.state.authenticatorAuthorityHostUrl = step.result; - min.instance.authenticatorTenant = - step.activeDialog.state.authenticatorTenant; - min.instance.authenticatorAuthorityHostUrl = - step.activeDialog.state.authenticatorAuthorityHostUrl; + min.instance.authenticatorTenant = step.activeDialog.state.authenticatorTenant; + min.instance.authenticatorAuthorityHostUrl = step.activeDialog.state.authenticatorAuthorityHostUrl; await min.adminService.updateSecurityInfo( min.instance.instanceId, @@ -415,15 +409,12 @@ export class AdminDialog extends IGBDialog { min.adminService.setValue(min.instance.instanceId, 'AntiCSRFAttackState', state); - const redirectUri = urlJoin( - min.instance.botEndpoint, - min.instance.botId, - '/token' - ); - const url = `https://login.microsoftonline.com/${step.activeDialog.state.authenticatorTenant - }/oauth2/authorize?client_id=${min.instance.marketplaceId - }&response_type=code&redirect_uri=${redirectUri - }&scope=https://graph.microsoft.com/.default&state=${state}&response_mode=query`; + const redirectUri = urlJoin(min.instance.botEndpoint, min.instance.botId, '/token'); + const url = `https://login.microsoftonline.com/${ + step.activeDialog.state.authenticatorTenant + }/oauth2/authorize?client_id=${ + min.instance.marketplaceId + }&response_type=code&redirect_uri=${redirectUri}&scope=https://graph.microsoft.com/.default&state=${state}&response_mode=query`; await min.conversationalService.sendText(min, step, Messages[locale].consent(url)); diff --git a/packages/admin.gbapp/index.ts b/packages/admin.gbapp/index.ts index 0b985f14..3d670401 100644 --- a/packages/admin.gbapp/index.ts +++ b/packages/admin.gbapp/index.ts @@ -47,28 +47,27 @@ import { GuaribasAdmin } from './models/AdminModel.js'; export class GBAdminPackage implements IGBPackage { public sysPackages: IGBPackage[]; - public async getDialogs(min: GBMinInstance) { + public async getDialogs (min: GBMinInstance) { GBLog.verbose(`getDialogs called.`); } - public async unloadPackage(core: IGBCoreService): Promise { + public async unloadPackage (core: IGBCoreService): Promise { GBLog.verbose(`unloadPackage called.`); } - public async unloadBot(min: GBMinInstance): Promise { + public async unloadBot (min: GBMinInstance): Promise { GBLog.verbose(`unloadBot called.`); } - public async onNewSession(min: GBMinInstance, step: GBDialogStep): Promise { + public async onNewSession (min: GBMinInstance, step: GBDialogStep): Promise { GBLog.verbose(`onNewSession called.`); } - public async onExchangeData(min: GBMinInstance, kind: string, data: any) { + public async onExchangeData (min: GBMinInstance, kind: string, data: any) { GBLog.verbose(`onExchangeData called.`); } - public async loadPackage(core: IGBCoreService, sequelize: Sequelize): Promise { + public async loadPackage (core: IGBCoreService, sequelize: Sequelize): Promise { core.sequelize.addModels([GuaribasAdmin]); } - public async loadBot(min: GBMinInstance): Promise { + public async loadBot (min: GBMinInstance): Promise { AdminDialog.setup(min); } - } diff --git a/packages/admin.gbapp/models/AdminModel.ts b/packages/admin.gbapp/models/AdminModel.ts index 86e44585..b5401f96 100644 --- a/packages/admin.gbapp/models/AdminModel.ts +++ b/packages/admin.gbapp/models/AdminModel.ts @@ -36,36 +36,27 @@ 'use strict'; -import { - Column, - CreatedAt, - DataType, - Model, - Table, - UpdatedAt -} from 'sequelize-typescript'; +import { Column, CreatedAt, DataType, Model, Table, UpdatedAt } from 'sequelize-typescript'; /** * General settings store. */ @Table export class GuaribasAdmin extends Model { - @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @Column(DataType.STRING(255)) - declare key: string; + key: string; @Column(DataType.STRING(4000)) - declare value: string; + value: string; @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; - + updatedAt: Date; } diff --git a/packages/admin.gbapp/services/GBAdminService.ts b/packages/admin.gbapp/services/GBAdminService.ts index d5ec7607..7393f9e3 100644 --- a/packages/admin.gbapp/services/GBAdminService.ts +++ b/packages/admin.gbapp/services/GBAdminService.ts @@ -39,7 +39,7 @@ import { AuthenticationContext, TokenResponse } from 'adal-node'; import { GBLog, GBMinInstance, IGBAdminService, IGBCoreService, IGBDeployer, IGBInstance } from 'botlib'; import { FindOptions } from 'sequelize/types'; -import urlJoin from 'url-join'; +import urlJoin from 'url-join'; import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService.js'; import { GuaribasInstance } from '../../core.gbapp/models/GBModel.js'; import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js'; @@ -50,7 +50,7 @@ import { GuaribasAdmin } from '../models/AdminModel.js'; import msRestAzure from 'ms-rest-azure'; import Path from 'path'; import PasswordGenerator from 'strict-password-generator'; -import crypto from 'crypto'; +import crypto from 'crypto'; /** * Services for server administration. @@ -63,16 +63,16 @@ export class GBAdminService implements IGBAdminService { public core: IGBCoreService; - constructor(core: IGBCoreService) { + constructor (core: IGBCoreService) { this.core = core; } - public static generateUuid(): string { + public static generateUuid (): string { return crypto.randomUUID(); } - public static getNodeVersion() { - return "19.1.0"; + public static getNodeVersion () { + return '19.1.0'; const packageJson = urlJoin(process.cwd(), 'package.json'); // tslint:disable-next-line: non-literal-require // TODO @@ -81,17 +81,17 @@ export class GBAdminService implements IGBAdminService { // return pjson.engines.node.replace('=', ''); } - public static async getADALTokenFromUsername(username: string, password: string) { + public static async getADALTokenFromUsername (username: string, password: string) { const credentials = await GBAdminService.getADALCredentialsFromUsername(username, password); return (credentials as any).tokenCache._entries[0].accessToken; } - public static async getADALCredentialsFromUsername(username: string, password: string) { - return await msRestAzure.loginWithUsernamePassword(username, password) + public static async getADALCredentialsFromUsername (username: string, password: string) { + return await msRestAzure.loginWithUsernamePassword(username, password); } - public static getMobileCode() { + public static getMobileCode () { const passwordGenerator = new PasswordGenerator(); const options = { upperCaseAlpha: false, @@ -105,7 +105,7 @@ export class GBAdminService implements IGBAdminService { return passwordGenerator.generatePassword(options); } - public static getRndPassword(): string { + public static getRndPassword (): string { const passwordGenerator = new PasswordGenerator(); const options = { upperCaseAlpha: true, @@ -121,7 +121,7 @@ export class GBAdminService implements IGBAdminService { return password; } - public static getRndReadableIdentifier() { + public static getRndReadableIdentifier () { const passwordGenerator = new PasswordGenerator(); const options = { upperCaseAlpha: false, @@ -135,7 +135,7 @@ export class GBAdminService implements IGBAdminService { return passwordGenerator.generatePassword(options); } - public static getNumberIdentifier() { + public static getNumberIdentifier () { const passwordGenerator = new PasswordGenerator(); const options = { upperCaseAlpha: false, @@ -152,8 +152,9 @@ export class GBAdminService implements IGBAdminService { /** * @see https://stackoverflow.com/a/52171480 */ - public static getHash(str, seed = 0) { - let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed; + public static getHash (str, seed = 0) { + let h1 = 0xdeadbeef ^ seed, + h2 = 0x41c6ce57 ^ seed; for (let i = 0, ch; i < str.length; i++) { ch = str.charCodeAt(i); h1 = Math.imul(h1 ^ ch, 2654435761); @@ -164,7 +165,7 @@ export class GBAdminService implements IGBAdminService { return 4294967296 * (2097151 & h2) + (h1 >>> 0); } - public static async undeployPackageCommand(text: any, min: GBMinInstance) { + public static async undeployPackageCommand (text: any, min: GBMinInstance) { const packageName = text.split(' ')[1]; const importer = new GBImporter(min.core); const deployer = new GBDeployer(min.core, importer); @@ -172,10 +173,10 @@ export class GBAdminService implements IGBAdminService { await deployer.undeployPackageFromLocalPath(min.instance, localFolder); } - public static isSharePointPath(path: string) { + public static isSharePointPath (path: string) { return path.indexOf('sharepoint.com') !== -1; } - public static async deployPackageCommand(min: GBMinInstance, text: string, deployer: IGBDeployer) { + public static async deployPackageCommand (min: GBMinInstance, text: string, deployer: IGBDeployer) { const packageName = text.split(' ')[1]; if (!this.isSharePointPath(packageName)) { @@ -195,26 +196,24 @@ export class GBAdminService implements IGBAdminService { // .gbot packages are handled using storage API, so no download // of local resources is required. - await deployer['downloadFolder'](min, - Path.join('work', `${min.instance.botId}.gbai`), - Path.basename(folderName)); + await deployer['downloadFolder'](min, Path.join('work', `${min.instance.botId}.gbai`), Path.basename(folderName)); await deployer.deployPackage(min, localFolder); } } - public static async rebuildIndexPackageCommand(min: GBMinInstance, deployer: IGBDeployer) { + public static async rebuildIndexPackageCommand (min: GBMinInstance, deployer: IGBDeployer) { await deployer.rebuildIndex( min.instance, new AzureDeployerService(deployer).getKBSearchSchema(min.instance.searchIndex) ); } - public static async syncBotServerCommand(min: GBMinInstance, deployer: GBDeployer) { + public static async syncBotServerCommand (min: GBMinInstance, deployer: GBDeployer) { const serverName = `${min.instance.botId}-server`; const service = await AzureDeployerService.createInstance(deployer); service.syncBotServerRepository(min.instance.botId, serverName); } - public async setValue(instanceId: number, key: string, value: string) { + public async setValue (instanceId: number, key: string, value: string) { const options = { where: {} }; options.where = { key: key }; let admin = await GuaribasAdmin.findOne(options); @@ -227,7 +226,7 @@ export class GBAdminService implements IGBAdminService { await admin.save(); } - public async updateSecurityInfo( + public async updateSecurityInfo ( instanceId: number, authenticatorTenant: string, authenticatorAuthorityHostUrl: string @@ -241,7 +240,7 @@ export class GBAdminService implements IGBAdminService { return item.save(); } - public async getValue(instanceId: number, key: string): Promise { + public async getValue (instanceId: number, key: string): Promise { const options = { where: {} }; options.where = { key: key, instanceId: instanceId }; const obj = await GuaribasAdmin.findOne(options); @@ -249,7 +248,7 @@ export class GBAdminService implements IGBAdminService { return obj.value; } - public async acquireElevatedToken(instanceId: number): Promise { + public async acquireElevatedToken (instanceId: number): Promise { // TODO: Use boot bot as base for authentication. const botId = GBConfigService.get('BOT_ID'); @@ -298,5 +297,5 @@ export class GBAdminService implements IGBAdminService { }); } - public async publish(min: GBMinInstance, packageName: string, republish: boolean): Promise { } + public async publish (min: GBMinInstance, packageName: string, republish: boolean): Promise {} } diff --git a/packages/admin.gbapp/strings.ts b/packages/admin.gbapp/strings.ts index 752b52c6..0acd189e 100644 --- a/packages/admin.gbapp/strings.ts +++ b/packages/admin.gbapp/strings.ts @@ -3,7 +3,7 @@ export const Messages = { authenticate: 'Please, authenticate:', welcome: 'Welcome to Pragmatismo.io GeneralBots Administration.', which_task: 'Which task do you wanna run now?', - working: (command) => `I'm working on ${command}...`, + working: command => `I'm working on ${command}...`, finished_working: 'Done.', unknown_command: text => `Well, but ${text} is not a administrative General Bots command, I will try to search for it.`, @@ -12,7 +12,7 @@ export const Messages = { deployPackage: text => `Deploying package ${text}...`, redeployPackage: text => `Redeploying package ${text}...`, packageUndeployed: text => `√ Package ${text} undeployed...`, - consent: (url) => `Please, consent access to this app at: [Microsoft Online](${url}).`, + consent: url => `Please, consent access to this app at: [Microsoft Online](${url}).`, wrong_password: 'Sorry, wrong password. Please, try again.', enter_authenticator_tenant: 'Enter the Authenticator Tenant (eg.: domain.onmicrosoft.com):', enter_authenticator_authority_host_url: 'Enter the Authority Host URL (eg.: https://login.microsoftonline.com): ', @@ -28,7 +28,7 @@ export const Messages = { authenticate: 'Please, authenticate:', welcome: 'Welcome to Pragmatismo.io GeneralBots Administration.', which_task: 'Which task do you wanna run now?', - working: (command) => `I'm working on ${command}...`, + working: command => `I'm working on ${command}...`, finished_working: 'Done.', unknown_command: text => `Well, but ${text} is not a administrative General Bots command, I will try to search for it.`, @@ -37,7 +37,7 @@ export const Messages = { deployPackage: text => `Deploying package ${text}...`, redeployPackage: text => `Redeploying package ${text}...`, packageUndeployed: text => `Package ${text} undeployed...`, - consent: (url) => `Please, consent access to this app at: [Microsoft Online](${url}).`, + consent: url => `Please, consent access to this app at: [Microsoft Online](${url}).`, wrong_password: 'Sorry, wrong password. Please, try again.', enter_authenticator_tenant: 'Enter the Authenticator Tenant (eg.: domain.onmicrosoft.com):', enter_authenticator_authority_host_url: 'Enter the Authority Host URL (eg.: https://login.microsoftonline.com): ', diff --git a/packages/analytics.gblib/index.ts b/packages/analytics.gblib/index.ts index 0243bd71..648281ef 100644 --- a/packages/analytics.gblib/index.ts +++ b/packages/analytics.gblib/index.ts @@ -45,28 +45,26 @@ import { GuaribasConversation, GuaribasConversationMessage } from './models/inde */ export class GBAnalyticsPackage implements IGBPackage { public sysPackages: IGBPackage[]; - public async getDialogs(min: GBMinInstance) { + public async getDialogs (min: GBMinInstance) { GBLog.verbose(`getDialogs called.`); } - public async loadPackage(core: IGBCoreService, sequelize: Sequelize): Promise { + public async loadPackage (core: IGBCoreService, sequelize: Sequelize): Promise { GBLog.verbose(`loadPackage called.`); core.sequelize.addModels([GuaribasConversation, GuaribasConversationMessage]); - } - public async unloadPackage(core: IGBCoreService): Promise { + public async unloadPackage (core: IGBCoreService): Promise { GBLog.verbose(`unloadPackage called.`); } - public async loadBot(min: GBMinInstance): Promise { + public async loadBot (min: GBMinInstance): Promise { GBLog.verbose(`loadBot called.`); } - public async unloadBot(min: GBMinInstance): Promise { + public async unloadBot (min: GBMinInstance): Promise { GBLog.verbose(`unloadBot called.`); } - public async onNewSession(min: GBMinInstance, step: GBDialogStep): Promise { + public async onNewSession (min: GBMinInstance, step: GBDialogStep): Promise { GBLog.verbose(`onNewSession called.`); } - public async onExchangeData(min: GBMinInstance, kind: string, data: any) { + public async onExchangeData (min: GBMinInstance, kind: string, data: any) { GBLog.verbose(`onExchangeData called.`); } - } diff --git a/packages/analytics.gblib/models/index.ts b/packages/analytics.gblib/models/index.ts index b262a022..7c35f102 100644 --- a/packages/analytics.gblib/models/index.ts +++ b/packages/analytics.gblib/models/index.ts @@ -63,49 +63,48 @@ import { GuaribasUser } from '../../security.gbapp/models/index.js'; */ @Table export class GuaribasConversation extends Model { - @PrimaryKey @AutoIncrement @Column(DataType.INTEGER) - declare conversationId: number; + conversationId: number; @ForeignKey(() => GuaribasInstance) @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @ForeignKey(() => GuaribasSubject) @Column(DataType.INTEGER) - declare startSubjectId: number; + startSubjectId: number; @BelongsTo(() => GuaribasSubject) - declare startSubject: GuaribasSubject; + startSubject: GuaribasSubject; @ForeignKey(() => GuaribasChannel) @Column(DataType.INTEGER) - declare channelId: string; + channelId: string; @Column(DataType.DATE) - declare rateDate: Date; + rateDate: Date; @Column(DataType.FLOAT) - declare rate: number; + rate: number; @Column(DataType.STRING(512)) - declare feedback: string; + feedback: string; @CreatedAt @Column(DataType.DATE) - declare createdAt: Date; + createdAt: Date; @Column(DataType.STRING(255)) - declare text: string; + text: string; @ForeignKey(() => GuaribasUser) @Column(DataType.INTEGER) - declare startedByUserId: number; + startedByUserId: number; @BelongsTo(() => GuaribasUser) - declare startedBy: GuaribasUser; + startedBy: GuaribasUser; } /** @@ -113,45 +112,43 @@ export class GuaribasConversation extends Model { */ @Table export class GuaribasConversationMessage extends Model { - @PrimaryKey @AutoIncrement @Column(DataType.INTEGER) - declare conversationMessageId: number; + conversationMessageId: number; @ForeignKey(() => GuaribasSubject) @Column(DataType.INTEGER) - declare subjectId: number; + subjectId: number; @Column(DataType.TEXT) - declare content: string; + content: string; @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; - + updatedAt: Date; //tslint:disable-next-line:no-use-before-declare @ForeignKey(() => GuaribasConversation) @Column(DataType.INTEGER) - declare conversationId: number; + conversationId: number; //tslint:disable-next-line:no-use-before-declare @BelongsTo(() => GuaribasConversation) - declare conversation: GuaribasConversation; + conversation: GuaribasConversation; @ForeignKey(() => GuaribasInstance) @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @ForeignKey(() => GuaribasUser) @Column(DataType.INTEGER) - declare userId: number; + userId: number; @BelongsTo(() => GuaribasUser) - declare user: GuaribasUser; + user: GuaribasUser; } diff --git a/packages/analytics.gblib/services/AnalyticsService.ts b/packages/analytics.gblib/services/AnalyticsService.ts index e7076744..b904eccd 100644 --- a/packages/analytics.gblib/services/AnalyticsService.ts +++ b/packages/analytics.gblib/services/AnalyticsService.ts @@ -44,10 +44,7 @@ import { GuaribasConversation, GuaribasConversationMessage } from '../models/ind * Base services for Bot Analytics. */ export class AnalyticsService { - - public async createConversation( - user: GuaribasUser - ): Promise { + public async createConversation (user: GuaribasUser): Promise { const conversation = new GuaribasConversation(); conversation.startedBy = user; conversation.startedByUserId = user.userId; @@ -56,15 +53,18 @@ export class AnalyticsService { return await conversation.save(); } - public async updateConversationSuggestion(instanceId: number, - conversationId: string, feedback: string, locale: string): Promise { - + public async updateConversationSuggestion ( + instanceId: number, + conversationId: string, + feedback: string, + locale: string + ): Promise { const minBoot = GBServer.globals.minBoot as any; const rate = await AzureText.getSentiment( - minBoot.instance.textAnalyticsKey ? minBoot.instance.textAnalyticsKey : - minBoot.instance.textAnalyticsKey, - minBoot.instance.textAnalyticsEndpoint ? minBoot.instance.textAnalyticsEndpoint : - minBoot.instance.textAnalyticsEndpoint, + minBoot.instance.textAnalyticsKey ? minBoot.instance.textAnalyticsKey : minBoot.instance.textAnalyticsKey, + minBoot.instance.textAnalyticsEndpoint + ? minBoot.instance.textAnalyticsEndpoint + : minBoot.instance.textAnalyticsEndpoint, locale, feedback ); @@ -79,18 +79,16 @@ export class AnalyticsService { await item.save(); return rate; - } - public async createMessage( + public async createMessage ( instanceId: number, conversation: GuaribasConversation, userId: number, content: string ): Promise { - const message = GuaribasConversationMessage.build(); - message.content = typeof (content) === 'object' ? JSON.stringify(content) : content; + message.content = typeof content === 'object' ? JSON.stringify(content) : content; message.instanceId = instanceId; message.userId = userId; message.conversationId = conversation.conversationId; diff --git a/packages/azuredeployer.gbapp/dialogs/StartDialog.ts b/packages/azuredeployer.gbapp/dialogs/StartDialog.ts index f62ed8ae..c631506c 100644 --- a/packages/azuredeployer.gbapp/dialogs/StartDialog.ts +++ b/packages/azuredeployer.gbapp/dialogs/StartDialog.ts @@ -46,7 +46,7 @@ import scanf from 'scanf'; * Handles command-line dialog for getting info for Boot Bot. */ export class StartDialog { - public static async createBaseInstance(installationDeployer: IGBInstallationDeployer) { + public static async createBaseInstance (installationDeployer: IGBInstallationDeployer) { // No .env so asks for cloud credentials to start a new farm. if (!Fs.existsSync(`.env`)) { @@ -111,7 +111,7 @@ export class StartDialog { return { instance, credentials, subscriptionId }; } - private static retrieveUsername() { + private static retrieveUsername () { let value = GBConfigService.get('CLOUD_USERNAME'); if (value === undefined) { process.stdout.write(`${GBAdminService.GB_PROMPT}CLOUD_USERNAME:`); @@ -121,7 +121,7 @@ export class StartDialog { return value; } - private static retrievePassword() { + private static retrievePassword () { let password = GBConfigService.get('CLOUD_PASSWORD'); if (password === undefined) { process.stdout.write(`${GBAdminService.GB_PROMPT}CLOUD_PASSWORD:`); @@ -131,7 +131,7 @@ export class StartDialog { return password; } - private static retrieveBotId() { + private static retrieveBotId () { let botId = GBConfigService.get('BOT_ID'); if (botId === undefined) { process.stdout.write( @@ -146,12 +146,11 @@ cannot start or end with or contain consecutive dashes and having 4 to 42 charac return botId; } - /** - * + * * Update Manifest in Azure: "signInAudience": "AzureADandPersonalMicrosoftAccount" and "accessTokenAcceptedVersion": 2. */ - private static retrieveAppId() { + private static retrieveAppId () { let appId = GBConfigService.get('MARKETPLACE_ID'); if (appId === undefined) { process.stdout.write( @@ -167,7 +166,7 @@ generate manually an App ID and App Secret.\n` return appId; } - private static retrieveAppPassword() { + private static retrieveAppPassword () { let appPassword = GBConfigService.get('MARKETPLACE_SECRET'); if (appPassword === undefined) { process.stdout.write('Generated Password (MARKETPLACE_SECRET):'); @@ -177,7 +176,7 @@ generate manually an App ID and App Secret.\n` return appPassword; } - private static retrieveSubscriptionId(list) { + private static retrieveSubscriptionId (list) { let subscriptionId = GBConfigService.get('CLOUD_SUBSCRIPTIONID'); const map = {}; let index = 1; @@ -195,7 +194,7 @@ generate manually an App ID and App Secret.\n` return subscriptionId; } - private static retrieveLocation() { + private static retrieveLocation () { let location = GBConfigService.get('CLOUD_LOCATION'); if (location === undefined) { process.stdout.write('CLOUD_LOCATION (eg. westus):'); diff --git a/packages/azuredeployer.gbapp/index.ts b/packages/azuredeployer.gbapp/index.ts index 958d6fa1..ab1dafea 100644 --- a/packages/azuredeployer.gbapp/index.ts +++ b/packages/azuredeployer.gbapp/index.ts @@ -43,27 +43,26 @@ import { Sequelize } from 'sequelize-typescript'; * Package for Azure Deployer. */ export class GBAzureDeployerPackage implements IGBPackage { - public sysPackages: IGBPackage[]; - public async getDialogs(min: GBMinInstance) { + public sysPackages: IGBPackage[]; + public async getDialogs (min: GBMinInstance) { GBLog.verbose(`getDialogs called.`); } - public async loadPackage(core: IGBCoreService, sequelize: Sequelize): Promise { + public async loadPackage (core: IGBCoreService, sequelize: Sequelize): Promise { GBLog.verbose(`loadPackage called.`); } - public async unloadPackage(core: IGBCoreService): Promise { + public async unloadPackage (core: IGBCoreService): Promise { GBLog.verbose(`unloadPackage called.`); } - public async loadBot(min: GBMinInstance): Promise { + public async loadBot (min: GBMinInstance): Promise { GBLog.verbose(`loadBot called.`); } - public async unloadBot(min: GBMinInstance): Promise { + public async unloadBot (min: GBMinInstance): Promise { GBLog.verbose(`unloadBot called.`); } - public async onNewSession(min: GBMinInstance, step: GBDialogStep): Promise { + public async onNewSession (min: GBMinInstance, step: GBDialogStep): Promise { GBLog.verbose(`onNewSession called.`); } - public async onExchangeData(min: GBMinInstance, kind: string, data: any) { + public async onExchangeData (min: GBMinInstance, kind: string, data: any) { GBLog.verbose(`onExchangeData called.`); } - } diff --git a/packages/azuredeployer.gbapp/services/AzureDeployerService.ts b/packages/azuredeployer.gbapp/services/AzureDeployerService.ts index 637f606b..54a324a4 100644 --- a/packages/azuredeployer.gbapp/services/AzureDeployerService.ts +++ b/packages/azuredeployer.gbapp/services/AzureDeployerService.ts @@ -40,7 +40,7 @@ import urlJoin from 'url-join'; import { HttpMethods, ServiceClient, WebResource } from '@azure/ms-rest-js'; import { CognitiveServicesManagementClient } from '@azure/arm-cognitiveservices'; import { ResourceManagementClient } from '@azure/arm-resources'; -import { SubscriptionClient } from '@azure/arm-subscriptions'; +import { SubscriptionClient } from '@azure/arm-subscriptions'; import { SearchManagementClient } from '@azure/arm-search'; import { SqlManagementClient } from '@azure/arm-sql'; import { WebSiteManagementClient } from '@azure/arm-appservice'; @@ -51,11 +51,10 @@ import { GBCorePackage } from '../../../packages/core.gbapp/index.js'; import { GBConfigService } from '../../../packages/core.gbapp/services/GBConfigService.js'; import { GBDeployer } from '../../../packages/core.gbapp/services/GBDeployer.js'; import { Account } from '@azure/arm-cognitiveservices'; -import MicrosoftGraph from "@microsoft/microsoft-graph-client"; +import MicrosoftGraph from '@microsoft/microsoft-graph-client'; import Spinner from 'cli-spinner'; import * as publicIp from 'public-ip'; - const WebSiteResponseTimeout = 900; const iconUrl = 'https://github.com/pragmatismo-io/BotServer/blob/master/docs/images/generalbots-logo-squared.png'; /** @@ -80,17 +79,16 @@ export class AzureDeployerService implements IGBInstallationDeployer { public core: IGBCoreService; private freeTier: boolean; - constructor(deployer: IGBDeployer, freeTier: boolean = true) { + constructor (deployer: IGBDeployer, freeTier: boolean = true) { this.deployer = deployer; this.freeTier = freeTier; } - public async runSearch(instance: IGBInstance) { + public async runSearch (instance: IGBInstance) { await this.deployer.rebuildIndex(instance, this.getKBSearchSchema(instance.searchIndex)); } - public static async createInstance(deployer: GBDeployer): Promise { - + public static async createInstance (deployer: GBDeployer): Promise { const username = GBConfigService.get('CLOUD_USERNAME'); const password = GBConfigService.get('CLOUD_PASSWORD'); const credentials = await GBAdminService.getADALCredentialsFromUsername(username, password); @@ -103,7 +101,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return service; } - private static createRequestObject(url: string, accessToken: string, verb: HttpMethods, body: string) { + private static createRequestObject (url: string, accessToken: string, verb: HttpMethods, body: string) { const req = new WebResource(); req.method = verb; req.url = url; @@ -115,13 +113,13 @@ export class AzureDeployerService implements IGBInstallationDeployer { return req; } - public async getSubscriptions(credentials) { + public async getSubscriptions (credentials) { const subscriptionClient = new SubscriptionClient(credentials); return subscriptionClient.subscriptions.list(); } - public getKBSearchSchema(indexName) { + public getKBSearchSchema (indexName) { return { name: indexName, fields: [ @@ -232,23 +230,20 @@ export class AzureDeployerService implements IGBInstallationDeployer { }; } - public async botExists(botId) { - + public async botExists (botId) { const baseUrl = `https://management.azure.com/`; const username = GBConfigService.get('CLOUD_USERNAME'); const password = GBConfigService.get('CLOUD_PASSWORD'); - const accessToken = await GBAdminService.getADALTokenFromUsername(username, password); const httpClient = new ServiceClient(); - const query = `providers/${this.provider - }/checkNameAvailability/Action?api-version=${this.apiVersion}`; + const query = `providers/${this.provider}/checkNameAvailability/Action?api-version=${this.apiVersion}`; const url = urlJoin(baseUrl, query); const body = { name: botId, - type: "botServices" + type: 'botServices' }; const req = AzureDeployerService.createRequestObject(url, accessToken, 'POST', JSON.stringify(body)); @@ -257,7 +252,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return !res.parsedBody.valid; } - public async updateBotProxy(botId, group, endpoint) { + public async updateBotProxy (botId, group, endpoint) { const baseUrl = `https://management.azure.com/`; const username = GBConfigService.get('CLOUD_USERNAME'); const password = GBConfigService.get('CLOUD_PASSWORD'); @@ -272,8 +267,9 @@ export class AzureDeployerService implements IGBInstallationDeployer { } }; - const query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/${this.provider - }/botServices/${botId}?api-version=${this.apiVersion}`; + const query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/${ + this.provider + }/botServices/${botId}?api-version=${this.apiVersion}`; const url = urlJoin(baseUrl, query); const req = AzureDeployerService.createRequestObject(url, accessToken, 'PATCH', JSON.stringify(parameters)); const res = await httpClient.sendRequest(req); @@ -284,8 +280,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { GBLog.info(`Bot proxy updated at: ${endpoint}.`); } - public async updateBot(botId: string, group: string, name: string, - description: string, endpoint: string) { + public async updateBot (botId: string, group: string, name: string, description: string, endpoint: string) { const baseUrl = `https://management.azure.com/`; const username = GBConfigService.get('CLOUD_USERNAME'); const password = GBConfigService.get('CLOUD_PASSWORD'); @@ -303,8 +298,9 @@ export class AzureDeployerService implements IGBInstallationDeployer { } }; - const query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/${this.provider - }/botServices/${botId}?api-version=${this.apiVersion}`; + const query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/${ + this.provider + }/botServices/${botId}?api-version=${this.apiVersion}`; const url = urlJoin(baseUrl, query); const req = AzureDeployerService.createRequestObject(url, accessToken, 'PATCH', JSON.stringify(parameters)); const res = await httpClient.sendRequest(req); @@ -315,7 +311,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { GBLog.info(`Bot updated at: ${endpoint}.`); } - public async deleteBot(botId: string, group) { + public async deleteBot (botId: string, group) { const baseUrl = `https://management.azure.com/`; const username = GBConfigService.get('CLOUD_USERNAME'); const password = GBConfigService.get('CLOUD_PASSWORD'); @@ -324,19 +320,20 @@ export class AzureDeployerService implements IGBInstallationDeployer { const accessToken = await GBAdminService.getADALTokenFromUsername(username, password); const httpClient = new ServiceClient(); - const query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/${this.provider - }/botServices/${botId}?api-version=${this.apiVersion}`; + const query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/${ + this.provider + }/botServices/${botId}?api-version=${this.apiVersion}`; const url = urlJoin(baseUrl, query); const req = AzureDeployerService.createRequestObject(url, accessToken, 'DELETE', undefined); const res = await httpClient.sendRequest(req); - if (res.bodyAsText !== "") { + if (res.bodyAsText !== '') { throw res.bodyAsText; } GBLog.info(`Bot ${botId} was deleted from the provider.`); } - public async openStorageFirewall(groupName, serverName) { + public async openStorageFirewall (groupName, serverName) { const username = GBConfigService.get('CLOUD_USERNAME'); const password = GBConfigService.get('CLOUD_PASSWORD'); const subscriptionId = GBConfigService.get('CLOUD_SUBSCRIPTIONID'); @@ -350,10 +347,9 @@ export class AzureDeployerService implements IGBInstallationDeployer { endIpAddress: ip }; await storageClient.firewallRules.createOrUpdate(groupName, serverName, 'gb', params); - } - public async deployFarm( + public async deployFarm ( proxyAddress: string, instance: IGBInstance, credentials, @@ -368,11 +364,9 @@ export class AzureDeployerService implements IGBInstallationDeployer { let keys: any; const name = instance.botId; - GBLog.info(`Enabling resource providers...`); await this.enableResourceProviders('Microsoft.BotService'); - GBLog.info(`Deploying Deploy Group (It may take a few minutes)...`); await this.createDeployGroup(name, instance.cloudLocation); @@ -386,8 +380,13 @@ export class AzureDeployerService implements IGBInstallationDeployer { const administratorPassword = GBAdminService.getRndPassword(); const storageServer = `${name.toLowerCase()}-storage-server`; const storageName = `${name}-storage`; - await this.createStorageServer(name, storageServer, administratorLogin, - administratorPassword, storageServer, instance.cloudLocation + await this.createStorageServer( + name, + storageServer, + administratorLogin, + administratorPassword, + storageServer, + instance.cloudLocation ); await this.createStorage(name, storageServer, storageName, instance.cloudLocation); instance.storageUsername = administratorLogin; @@ -429,18 +428,25 @@ export class AzureDeployerService implements IGBInstallationDeployer { setTimeout(resolve, ms); }); }; - GBLog.info(`Deploying Bot...`); instance.botEndpoint = this.defaultEndPoint; instance = await this.internalDeployBot( - instance, this.accessToken, name, name, name, 'General BootBot', - `${proxyAddress}/api/messages/${name}`, 'global', - instance.nlpAppId, instance.nlpKey, instance.marketplaceId, instance.marketplacePassword, + instance, + this.accessToken, + name, + name, + name, + 'General BootBot', + `${proxyAddress}/api/messages/${name}`, + 'global', + instance.nlpAppId, + instance.nlpKey, + instance.marketplaceId, + instance.marketplacePassword, instance.cloudSubscriptionId ); - GBLog.info(`Waiting one minute to finishing NLP service and keys creation...`); await sleep(60000); @@ -456,7 +462,6 @@ export class AzureDeployerService implements IGBInstallationDeployer { const nlpAppId = await this.createNLPService(name, name, instance.cloudLocation, culture, instance.nlpAuthoringKey); instance.nlpAppId = nlpAppId; - GBLog.info('Updating server environment variables...'); await this.updateWebisteConfig(name, serverName, serverFarm.id, instance); @@ -465,7 +470,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return instance; } - public async deployToCloud( + public async deployToCloud ( title: string, username: string, password: string, @@ -496,7 +501,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { /** * @see https://github.com/Azure/azure-rest-api-specs/blob/master/specification/botservice/resource-manager/Microsoft.BotService/preview/2017-12-01/botservice.json */ - public async internalDeployBot( + public async internalDeployBot ( instance, accessToken, botId, @@ -535,14 +540,15 @@ export class AzureDeployerService implements IGBInstallationDeployer { luisKey: nlpKey, msaAppId: appId, msaAppPassword: appPassword, - enabledChannels: ['webchat', "skype"],//, "facebook"], - configuredChannels: ['webchat', "skype"]//, "facebook"] + enabledChannels: ['webchat', 'skype'], //, "facebook"], + configuredChannels: ['webchat', 'skype'] //, "facebook"] } }; const httpClient = new ServiceClient(); - let query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/${this.provider - }/botServices/${botId}?api-version=${this.apiVersion}`; + let query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/${ + this.provider + }/botServices/${botId}?api-version=${this.apiVersion}`; let url = urlJoin(baseUrl, query); let req = AzureDeployerService.createRequestObject(url, accessToken, 'PUT', JSON.stringify(parameters)); const res = await httpClient.sendRequest(req); @@ -552,11 +558,11 @@ export class AzureDeployerService implements IGBInstallationDeployer { return; } - try { //tslint:disable-next-line:max-line-length - query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/Microsoft.BotService/botServices/${botId}/channels/WebChatChannel/listChannelWithKeys?api-version=${this.apiVersion - }`; + query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/Microsoft.BotService/botServices/${botId}/channels/WebChatChannel/listChannelWithKeys?api-version=${ + this.apiVersion + }`; url = urlJoin(baseUrl, query); req = AzureDeployerService.createRequestObject(url, accessToken, 'POST', JSON.stringify(parameters)); const resChannel = await httpClient.sendRequest(req); @@ -567,15 +573,14 @@ export class AzureDeployerService implements IGBInstallationDeployer { } catch (error) { reject(error); } - }); } - public async syncBotServerRepository(group, name) { + public async syncBotServerRepository (group, name) { await this.webSiteClient.webApps.syncRepository(group, name); } - public initServices(credentials: any, subscriptionId: string) { + public initServices (credentials: any, subscriptionId: string) { this.cloud = new ResourceManagementClient(credentials, subscriptionId); this.webSiteClient = new WebSiteManagementClient(credentials, subscriptionId); this.storageClient = new SqlManagementClient(credentials, subscriptionId); @@ -584,7 +589,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { this.accessToken = credentials.tokenCache._entries[0].accessToken; } - private async createStorageServer(group, name, administratorLogin, administratorPassword, serverName, location) { + private async createStorageServer (group, name, administratorLogin, administratorPassword, serverName, location) { const params = { location: location, administratorLogin: administratorLogin, @@ -594,7 +599,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { const database = await this.storageClient.servers.beginCreateOrUpdateAndWait(group, name, params); - // AllowAllWindowsAzureIps must be created that way, so the Azure Search can + // AllowAllWindowsAzureIps must be created that way, so the Azure Search can // access SQL Database to index its contents. const paramsFirewall = { @@ -606,7 +611,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return database; } - public async createApplication(token: string, name: string) { + public async createApplication (token: string, name: string) { return new Promise((resolve, reject) => { let client = MicrosoftGraph.Client.init({ authProvider: done => { @@ -619,16 +624,15 @@ export class AzureDeployerService implements IGBInstallationDeployer { client.api(`/applications`).post(app, (err, res) => { if (err) { - reject(err) - } - else { + reject(err); + } else { resolve(res); } }); }); } - public async createApplicationSecret(token: string, appId: string) { + public async createApplicationSecret (token: string, appId: string) { return new Promise((resolve, reject) => { let client = MicrosoftGraph.Client.init({ authProvider: done => { @@ -637,22 +641,21 @@ export class AzureDeployerService implements IGBInstallationDeployer { }); const body = { passwordCredential: { - displayName: "General Bots Generated" + displayName: 'General Bots Generated' } }; client.api(`/applications/${appId}/addPassword`).post(body, (err, res) => { if (err) { - reject(err) - } - else { + reject(err); + } else { resolve(res.secretText); } }); }); } - private async registerProviders(subscriptionId, baseUrl, accessToken) { + private async registerProviders (subscriptionId, baseUrl, accessToken) { const query = `subscriptions/${subscriptionId}/providers/${this.provider}/register?api-version=2018-02-01`; const requestUrl = urlJoin(baseUrl, query); @@ -665,7 +668,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { (req.headers as any).Authorization = `Bearer ${accessToken}`; } - private async createNLPService( + private async createNLPService ( name: string, description: string, location: string, @@ -683,13 +686,12 @@ export class AzureDeployerService implements IGBInstallationDeployer { let app = null; if (apps.bodyAsText && apps.bodyAsText !== '[]') { - const result = JSON.parse(apps.bodyAsText) + const result = JSON.parse(apps.bodyAsText); if (result.error) { - if (result.error.code !== "401") { + if (result.error.code !== '401') { throw new Error(result.error); } - } - else { + } else { app = result.filter(x => x.name === name)[0]; } } @@ -704,7 +706,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return id.replace(/\'/gi, ''); } - private async makeNlpRequest( + private async makeNlpRequest ( location: string, authoringKey: string, body: string, @@ -723,14 +725,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return await httpClient.sendRequest(req); } - public async refreshEntityList( - location: string, - nlpAppId: string, - clEntityId: string, - nlpKey: string, - data: any, - ) { - + public async refreshEntityList (location: string, nlpAppId: string, clEntityId: string, nlpKey: string, data: any) { const req = new WebResource(); req.method = 'PUT'; req.url = `https://${location}.api.cognitive.microsoft.com/luis/api/v2.0/apps/${nlpAppId}/versions/0.1/closedlists/${clEntityId}`; @@ -743,12 +738,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return await httpClient.sendRequest(req); } - public async trainNLP( - location: string, - nlpAppId: string, - nlpAuthoringKey: string, - ) { - + public async trainNLP (location: string, nlpAppId: string, nlpAuthoringKey: string) { const req = new WebResource(); req.method = 'POST'; req.url = `https://${location}.api.cognitive.microsoft.com/luis/api/v2.0/apps/${nlpAppId}/versions/0.1/train`; @@ -760,16 +750,12 @@ export class AzureDeployerService implements IGBInstallationDeployer { return await httpClient.sendRequest(req); } - public async publishNLP( - location: string, - nlpAppId: string, - nlpAuthoringKey: string, - ) { + public async publishNLP (location: string, nlpAppId: string, nlpAuthoringKey: string) { const body = { - versionId: "0.1", + versionId: '0.1', isStaging: false, directVersionPublish: false - } + }; const req = new WebResource(); req.method = 'POST'; req.url = `https://${location}.api.cognitive.microsoft.com/luis/api/v2.0/apps/${nlpAppId}/publish`; @@ -782,11 +768,10 @@ export class AzureDeployerService implements IGBInstallationDeployer { return await httpClient.sendRequest(req); } - private async createSearch(group, name, location) { + private async createSearch (group, name, location) { const params = { sku: { - name: - this.freeTier ? 'free' : 'standard' + name: this.freeTier ? 'free' : 'standard' }, location: location }; @@ -794,7 +779,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return await this.searchClient.services.beginCreateOrUpdateAndWait(group, name, params as any); } - private async createStorage(group, serverName, name, location) { + private async createStorage (group, serverName, name, location) { const params = { sku: { name: this.freeTier ? 'Free' : 'Basic' }, createMode: 'Default', @@ -804,7 +789,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { return await this.storageClient.databases.beginCreateOrUpdateAndWait(group, serverName, name, params); } - private async createCognitiveServices(group, name, location, kind): Promise { + private async createCognitiveServices (group, name, location, kind): Promise { const params = { sku: { name: name @@ -830,40 +815,40 @@ export class AzureDeployerService implements IGBInstallationDeployer { return await this.cognitiveClient.accounts.beginCreateAndWait(group, name, params); } - private async createSpeech(group, name, location): Promise { + private async createSpeech (group, name, location): Promise { return await this.createCognitiveServices(group, name, location, 'SpeechServices'); } - private async createNLP(group, name, location): Promise { + private async createNLP (group, name, location): Promise { return await this.createCognitiveServices(group, name, location, 'LUIS'); } - private async createNLPAuthoring(group, name, location): Promise { + private async createNLPAuthoring (group, name, location): Promise { return await this.createCognitiveServices(group, name, location, 'LUIS.Authoring'); } - private async createSpellChecker(group, name): Promise { + private async createSpellChecker (group, name): Promise { return await this.createCognitiveServices(group, name, 'westus', 'CognitiveServices'); } - private async createTextAnalytics(group, name, location): Promise { + private async createTextAnalytics (group, name, location): Promise { return await this.createCognitiveServices(group, name, location, 'TextAnalytics'); } - private async createDeployGroup(name, location) { + private async createDeployGroup (name, location) { const params = { location: location }; return await this.cloud.resourceGroups.createOrUpdate(name, params); } - private async enableResourceProviders(name) { + private async enableResourceProviders (name) { const ret = await this.cloud.providers.get(name); - if (ret.registrationState === "NotRegistered") { + if (ret.registrationState === 'NotRegistered') { await this.cloud.providers.register(name); } } - private async createHostingPlan(group, name, location): Promise { + private async createHostingPlan (group, name, location): Promise { const params = { serverFarmWithRichSkuName: name, location: location, @@ -877,11 +862,9 @@ export class AzureDeployerService implements IGBInstallationDeployer { return await this.webSiteClient.appServicePlans.beginCreateOrUpdateAndWait(group, name, params); } - private async createServer(farmId, group, name, location) { - + private async createServer (farmId, group, name, location) { let tryed = false; const create = async () => { - const parameters: Site = { location: location, serverFarmId: farmId, @@ -929,8 +912,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { } } - private async updateWebisteConfig(group, name, serverFarmId, instance: IGBInstance) { - + private async updateWebisteConfig (group, name, serverFarmId, instance: IGBInstance) { const parameters: Site = { location: instance.cloudLocation, serverFarmId: serverFarmId, @@ -953,12 +935,11 @@ export class AzureDeployerService implements IGBInstallationDeployer { { name: 'STORAGE_NAME', value: `${instance.storageName}` }, { name: 'STORAGE_USERNAME', value: `${instance.storageUsername}` }, { name: 'STORAGE_PASSWORD', value: `${instance.storagePassword}` }, - { name: 'STORAGE_SYNC', value: `true` }] - + { name: 'STORAGE_SYNC', value: `true` } + ] } }; return await this.webSiteClient.webApps.beginCreateOrUpdateAndWait(group, name, parameters); } - } diff --git a/packages/azuredeployer.gbapp/strings.ts b/packages/azuredeployer.gbapp/strings.ts index bc43b1e4..61adecc8 100644 --- a/packages/azuredeployer.gbapp/strings.ts +++ b/packages/azuredeployer.gbapp/strings.ts @@ -1,6 +1,6 @@ export const Messages = { 'en-US': { - about_suggestions: 'Suggestions are welcomed and improve my quality...' + about_suggestions: 'Suggestions are welcomed and improve my quality...' }, 'pt-BR': { about_suggestions: 'Sugestões melhoram muito minha qualidade...' diff --git a/packages/basic.gblib/index.ts b/packages/basic.gblib/index.ts index 4aa50419..f56a7e58 100644 --- a/packages/basic.gblib/index.ts +++ b/packages/basic.gblib/index.ts @@ -39,47 +39,46 @@ import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GuaribasSchedule } from '../core.gbapp/models/GBModel.js'; import { Sequelize } from 'sequelize-typescript'; -import { createServerRouter } from "typescript-rest-rpc/lib/server.js" +import { createServerRouter } from 'typescript-rest-rpc/lib/server.js'; import { DialogKeywords } from './services/DialogKeywords.js'; -import * as koaBody from "koa-body" +import * as koaBody from 'koa-body'; import { SystemKeywords } from './services/SystemKeywords.js'; import { WebAutomationKeywords } from './services/WebAutomationKeywords.js'; import { DebuggerService } from './services/DebuggerService.js'; import Koa from 'koa'; -const app = new Koa() +const app = new Koa(); /** * Package for core.gbapp. */ - + export class GBBasicPackage implements IGBPackage { public sysPackages: IGBPackage[]; - public CurrentEngineName = "guaribas-1.0.0"; + public CurrentEngineName = 'guaribas-1.0.0'; - - public async loadPackage(core: IGBCoreService, sequelize: Sequelize): Promise { + public async loadPackage (core: IGBCoreService, sequelize: Sequelize): Promise { core.sequelize.addModels([GuaribasSchedule]); app.use(koaBody.koaBody({ multipart: true })); app.listen(1111); } - public async getDialogs(min: GBMinInstance) { + public async getDialogs (min: GBMinInstance) { GBLog.verbose(`getDialogs called.`); } - public async unloadPackage(core: IGBCoreService): Promise { + public async unloadPackage (core: IGBCoreService): Promise { GBLog.verbose(`unloadPackage called.`); } - public async unloadBot(min: GBMinInstance): Promise { + public async unloadBot (min: GBMinInstance): Promise { GBLog.verbose(`unloadBot called.`); } - public async onNewSession(min: GBMinInstance, step: GBDialogStep): Promise { + public async onNewSession (min: GBMinInstance, step: GBDialogStep): Promise { GBLog.verbose(`onNewSession called.`); } - public async onExchangeData(min: GBMinInstance, kind: string, data: any) { + public async onExchangeData (min: GBMinInstance, kind: string, data: any) { GBLog.verbose(`onExchangeData called.`); } - public async loadBot(min: GBMinInstance): Promise { + public async loadBot (min: GBMinInstance): Promise { const dk = new DialogKeywords(min, null, null); const wa = new WebAutomationKeywords(min, null, dk); const sys = new SystemKeywords(min, null, dk, wa); @@ -87,12 +86,12 @@ export class GBBasicPackage implements IGBPackage { dk.wa = wa; wa.sys = sys; const dialogRouter = createServerRouter(`/api/v2/${min.botId}/dialog`, dk); - const waRouter = createServerRouter(`/api/v2/${min.botId}/webautomation`, wa ); + const waRouter = createServerRouter(`/api/v2/${min.botId}/webautomation`, wa); const sysRouter = createServerRouter(`/api/v2/${min.botId}/system`, sys); const dbgRouter = createServerRouter(`/api/v2/${min.botId}/debugger`, dbg); app.use(dialogRouter.routes()); app.use(sysRouter.routes()); - app.use(waRouter.routes()); - app.use(dbgRouter.routes()); + app.use(waRouter.routes()); + app.use(dbgRouter.routes()); } } diff --git a/packages/basic.gblib/models/Model.ts b/packages/basic.gblib/models/Model.ts index a10a5653..4ae8e3cc 100644 --- a/packages/basic.gblib/models/Model.ts +++ b/packages/basic.gblib/models/Model.ts @@ -54,26 +54,24 @@ import { GuaribasInstance } from '../../core.gbapp/models/GBModel.js'; @Table //tslint:disable-next-line:max-classes-per-file export class GuaribasSchedule extends Model { + @Column(DataType.STRING(255)) + name: string; - @Column (DataType.STRING(255)) - declare name: string; - - @Column (DataType.STRING(255)) - declare schedule: string; + @Column(DataType.STRING(255)) + schedule: string; @ForeignKey(() => GuaribasInstance) @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @BelongsTo(() => GuaribasInstance) - declare instance: GuaribasInstance; + instance: GuaribasInstance; - @Column(DataType.DATE) + @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; - + updatedAt: Date; } diff --git a/packages/basic.gblib/services/ChartServices.ts b/packages/basic.gblib/services/ChartServices.ts index cfbeb372..c2a2280a 100644 --- a/packages/basic.gblib/services/ChartServices.ts +++ b/packages/basic.gblib/services/ChartServices.ts @@ -32,34 +32,32 @@ 'use strict'; - import { createBrowser } from '../../core.gbapp/services/GBSSR.js'; export class ChartServices { + /** + * Generate chart image screenshot + * @param {object} options billboard.js generation option object + * @param {string} path screenshot image full path with file name + */ + public static async screenshot (args, path) { + const browser = await createBrowser(null); + const page = await browser.newPage(); - /** - * Generate chart image screenshot - * @param {object} options billboard.js generation option object - * @param {string} path screenshot image full path with file name - */ - public static async screenshot(args, path) { - const browser = await createBrowser(null); - const page = await browser.newPage(); + // load billboard.js assets from CDN. + await page.addStyleTag({ url: 'https://cdn.jsdelivr.net/npm/billboard.js/dist/theme/datalab.min.css' }); + await page.addScriptTag({ url: 'https://cdn.jsdelivr.net/npm/billboard.js/dist/billboard.pkgd.min.js' }); - // load billboard.js assets from CDN. - await page.addStyleTag({ url: "https://cdn.jsdelivr.net/npm/billboard.js/dist/theme/datalab.min.css" }); - await page.addScriptTag({ url: "https://cdn.jsdelivr.net/npm/billboard.js/dist/billboard.pkgd.min.js" }); + await page.evaluate(`bb.generate(${JSON.stringify(args)});`); - await page.evaluate(`bb.generate(${JSON.stringify(args)});`); + const content = await page.$('.bb'); - const content = await page.$(".bb"); + await content.screenshot({ + path, + omitBackground: true + }); - await content.screenshot({ - path, - omitBackground: true - }); - - await page.close(); - await browser.close(); - } -} \ No newline at end of file + await page.close(); + await browser.close(); + } +} diff --git a/packages/basic.gblib/services/DebuggerService.ts b/packages/basic.gblib/services/DebuggerService.ts index b94ed6ab..3380192e 100644 --- a/packages/basic.gblib/services/DebuggerService.ts +++ b/packages/basic.gblib/services/DebuggerService.ts @@ -75,7 +75,6 @@ export class DebuggerService { debugWeb: boolean; lastDebugWeb: Date; - /** * SYSTEM account maxLines,when used with impersonated contexts (eg. running in SET SCHEDULE). */ @@ -178,7 +177,7 @@ export class DebuggerService { * When creating this keyword facade,a bot instance is * specified among the deployer service. */ - constructor(min: GBMinInstance, user, dk) { + constructor (min: GBMinInstance, user, dk) { this.min = min; this.user = user; this.dk = dk; @@ -190,33 +189,33 @@ export class DebuggerService { GBServer.globals.debuggers[botId] = {}; GBServer.globals.debuggers[botId].state = 0; GBServer.globals.debuggers[botId].breaks = []; - GBServer.globals.debuggers[botId].stateInfo = "Stopped"; + GBServer.globals.debuggers[botId].stateInfo = 'Stopped'; GBServer.globals.debuggers[botId].childProcess = null; } private client; - public async breakpoint({ botId, line }) { + public async breakpoint ({ botId, line }) { GBLog.info(`BASIC: Enabled breakpoint for ${botId} on ${line}.`); GBServer.globals.debuggers[botId].breaks.push(Number.parseInt(line)); } - public async resume({ botId }) { + public async resume ({ botId }) { if (GBServer.globals.debuggers[botId].state === 2) { const client = GBServer.globals.debuggers[botId].client; await client.Debugger.resume(); GBServer.globals.debuggers[botId].state = 1; - GBServer.globals.debuggers[botId].stateInfo = "Running (Debug)"; - return {status: 'OK'}; + GBServer.globals.debuggers[botId].stateInfo = 'Running (Debug)'; + return { status: 'OK' }; } else { const error = 'Invalid call to resume and state not being debug(2).'; - return {error: error}; + return { error: error }; } } - public async stop({ botId }) { + public async stop ({ botId }) { GBServer.globals.debuggers[botId].state = 0; - GBServer.globals.debuggers[botId].stateInfo = "Stopped"; + GBServer.globals.debuggers[botId].stateInfo = 'Stopped'; const kill = ref => { spawn('sh', ['-c', `pkill -9 -f ${ref}`]); @@ -224,22 +223,22 @@ export class DebuggerService { kill(GBServer.globals.debuggers[botId].childProcess); - return {status: 'OK'}; + return { status: 'OK' }; } - public async step({ botId }) { + public async step ({ botId }) { if (GBServer.globals.debuggers[botId].state === 2) { - GBServer.globals.debuggers[botId].stateInfo = "Break"; + GBServer.globals.debuggers[botId].stateInfo = 'Break'; const client = GBServer.globals.debuggers[botId].client; await client.Debugger.stepOver(); - return {status: 'OK'}; + return { status: 'OK' }; } else { const error = 'Invalid call to stepOver and state not being debug(2).'; - return {error: error}; + return { error: error }; } } - public async context({ botId }) { + public async context ({ botId }) { const conversationId = this.conversationsMap[botId]; let messages = []; if (this.client) { @@ -266,35 +265,34 @@ export class DebuggerService { return { status: 'OK', state: GBServer.globals.debuggers[botId].state, - messages:messagesText, + messages: messagesText, scope: GBServer.globals.debuggers[botId].scope, scopeInfo: GBServer.globals.debuggers[botId].stateInfo }; } - public async getRunning({ botId, botApiKey, scriptName }) { + public async getRunning ({ botId, botApiKey, scriptName }) { let error; botId = botId[0]; // TODO: Handle call in POST. - if (!GBServer.globals.debuggers[botId]) - { - GBServer.globals.debuggers[botId]= {}; + if (!GBServer.globals.debuggers[botId]) { + GBServer.globals.debuggers[botId] = {}; } - if (!scriptName){ + if (!scriptName) { scriptName = 'start'; } if (GBServer.globals.debuggers[botId].state === 1) { - error = `Cannot DEBUG an already running process. ${botId}`; - return {error: error}; + error = `Cannot DEBUG an already running process. ${botId}`; + return { error: error }; } else if (GBServer.globals.debuggers[botId].state === 2) { GBLog.info(`BASIC: Releasing execution ${botId} in DEBUG mode.`); - await this.resume({ botId}); - return {status: 'OK'}; + await this.resume({ botId }); + return { status: 'OK' }; } else { GBLog.info(`BASIC: Running ${botId} in DEBUG mode.`); GBServer.globals.debuggers[botId].state = 1; - GBServer.globals.debuggers[botId].stateInfo = "Running (Debug)"; + GBServer.globals.debuggers[botId].stateInfo = 'Running (Debug)'; let min: GBMinInstance = GBServer.globals.minInstances.filter(p => p.instance.botId === botId)[0]; @@ -324,7 +322,7 @@ export class DebuggerService { } }); - return {status: 'OK'}; + return { status: 'OK' }; } } } diff --git a/packages/basic.gblib/services/DialogKeywords.ts b/packages/basic.gblib/services/DialogKeywords.ts index a9715c13..16453233 100644 --- a/packages/basic.gblib/services/DialogKeywords.ts +++ b/packages/basic.gblib/services/DialogKeywords.ts @@ -63,10 +63,9 @@ import qrcode from 'qrcode'; * Base services of conversation to be called by BASIC. */ export class DialogKeywords { - /** - * Reference to minimal bot instance. - */ + * Reference to minimal bot instance. + */ public min: GBMinInstance; /** @@ -99,11 +98,11 @@ export class DialogKeywords { */ maxLines: number = 2000; - public async getDeployer() { + public async getDeployer () { return this.min.deployService; } - public async getMin() { + public async getMin () { return this.min; } @@ -111,46 +110,39 @@ export class DialogKeywords { * When creating this keyword facade,a bot instance is * specified among the deployer service. */ - constructor(min: GBMinInstance, deployer: GBDeployer, user) { + constructor (min: GBMinInstance, deployer: GBDeployer, user) { this.min = min; this.user = user; this.internalSys = new SystemKeywords(min, deployer, this, null); - this.debugWeb = this.min.core.getParam( - this.min.instance, - 'Debug Web Automation', - false - ); - + this.debugWeb = this.min.core.getParam(this.min.instance, 'Debug Web Automation', false); } /** * Base reference of system keyword facade,called directly * by the script. */ - public sys(): SystemKeywords { + public sys (): SystemKeywords { return this.internalSys; } /** - * - * - * Data = [10,20,30] - * Legends = "Steve;Yui;Carlos" - * img = CHART "pie",data,legends - * + * + * + * Data = [10,20,30] + * Legends = "Steve;Yui;Carlos" + * img = CHART "pie",data,legends + * * https://c3js.org/examples.html - * - * @param data - * @param legends + * + * @param data + * @param legends * @see https://www.npmjs.com/package/plot */ - public async chart({type, data, legends, transpose}) { - + public async chart ({ type, data, legends, transpose }) { let table = [[]]; if (legends) { - const legends_ = legends.split(';'); // Columns and data are merged like: @@ -163,26 +155,22 @@ export class DialogKeywords { table[i] = [legends_[i]]; table[i] = table[i].concat(data); } - } - else { + } else { table = SystemKeywords.JSONAsGBTable(data, false); table.shift(); } if (transpose) { - const transpose = (array) => { - return array.reduce((prev, next) => next.map((item, i) => - (prev[i] || []).concat(next[i]) - ), []); - } + const transpose = array => { + return array.reduce((prev, next) => next.map((item, i) => (prev[i] || []).concat(next[i])), []); + }; table = transpose(table); } - let definition = { size: { - "height": 420, - "width": 680 + height: 420, + width: 680 }, data: { columns: table, @@ -201,7 +189,7 @@ export class DialogKeywords { tick: { format: '%Y-%m-%d' } - } + }; } const gbaiName = `${this.min.botId}.gbai`; @@ -209,12 +197,7 @@ export class DialogKeywords { await ChartServices.screenshot(definition, localName); - const url = urlJoin( - GBServer.globals.publicAddress, - this.min.botId, - 'cache', - Path.basename(localName) - ); + const url = urlJoin(GBServer.globals.publicAddress, this.min.botId, 'cache', Path.basename(localName)); GBLog.info(`BASIC: Visualization: Chart generated at ${url}.`); @@ -225,15 +208,14 @@ export class DialogKeywords { * Returns the OCR of image file. * */ - public async getOCR({localFile}) { + public async getOCR ({ localFile }) { GBLog.info(`BASIC: OCR processing on ${localFile}.`); - const config = { - lang: "eng", + lang: 'eng', oem: 1, - psm: 3, - } + psm: 3 + }; return await tesseract.recognize(localFile, config); } @@ -243,14 +225,18 @@ export class DialogKeywords { * * @example x = TODAY */ - public async getToday({}) { + public async getToday ({}) { let d = new Date(), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear(); - if (month.length < 2) { month = '0' + month; } - if (day.length < 2) { day = '0' + day; } + if (month.length < 2) { + month = '0' + month; + } + if (day.length < 2) { + day = '0' + day; + } const contentLocale = this.min.core.getParam( this.min.instance, @@ -275,36 +261,30 @@ export class DialogKeywords { * * @example EXIT */ - public async exit({}) { - - } + public async exit ({}) {} /** * Get active tasks. * * @example list = ACTIVE TASKS */ - public async getActiveTasks({}) { - } + public async getActiveTasks ({}) {} /** * Creates a new deal. * * @example CREATE DEAL dealname,contato,empresa,amount */ - public async createDeal({dealName, contact, company, amount}) { - } + public async createDeal ({ dealName, contact, company, amount }) {} /** * Finds contacts in XRM. * * @example list = FIND CONTACT "Sandra" */ - public async fndContact({name}) { - } + public async fndContact ({ name }) {} - - public getContentLocaleWithCulture(contentLocale) { + public getContentLocaleWithCulture (contentLocale) { switch (contentLocale) { case 'pt': return 'pt-BR'; @@ -315,28 +295,25 @@ export class DialogKeywords { default: return 'en-us'; } - } - public async getCoded({value}) { - + public async getCoded ({ value }) { // Checks if it is a GB FILE object. if (value.data && value.filename) { value = value.data; } - return Buffer.from(value).toString("base64"); + return Buffer.from(value).toString('base64'); } /** * Returns specified date week day in format 'Mon'. * - * @example day = WEEKDAY (date) + * @example day = WEEKDAY (date) * */ - public getWeekFromDate(date) { - + public getWeekFromDate (date) { const contentLocale = this.min.core.getParam( this.min.instance, 'Default Content Language', @@ -365,7 +342,7 @@ export class DialogKeywords { * @example days = DATEDIFF date1,date2,mode * */ - public dateDiff(date1, date2, mode) { + public dateDiff (date1, date2, mode) { let dt1 = date1; let dt2 = date2; if (!(dt1 instanceof Date)) { @@ -376,62 +353,93 @@ export class DialogKeywords { } const diff = new DateDiff(date1, date2); switch (mode) { - case 'year': return diff.years(); - case 'month': return diff.months(); - case 'week': return diff.weeks(); - case 'day': return diff.days(); - case 'hour': return diff.hours(); - case 'minute': return diff.minutes(); + case 'year': + return diff.years(); + case 'month': + return diff.months(); + case 'week': + return diff.weeks(); + case 'day': + return diff.days(); + case 'hour': + return diff.hours(); + case 'minute': + return diff.minutes(); } } /** * Returns specified date week day in format 'Mon'. * - * @example DATEADD date,"minute",60 - * + * @example DATEADD date,"minute",60 + * * https://stackoverflow.com/a/1214753/18511 */ - public dateAdd(date, mode, units) { + public dateAdd (date, mode, units) { let dateCopy = date; if (!(dateCopy instanceof Date)) { dateCopy = new Date(dateCopy); } var ret = new Date(dateCopy); //don't change original date - var checkRollover = function () { if (ret.getDate() != date.getDate()) ret.setDate(0); }; + var checkRollover = function () { + if (ret.getDate() != date.getDate()) ret.setDate(0); + }; switch (String(mode).toLowerCase()) { - case 'year': ret.setFullYear(ret.getFullYear() + units); checkRollover(); break; - case 'quarter': ret.setMonth(ret.getMonth() + 3 * units); checkRollover(); break; - case 'month': ret.setMonth(ret.getMonth() + units); checkRollover(); break; - case 'week': ret.setDate(ret.getDate() + 7 * units); break; - case 'day': ret.setDate(ret.getDate() + units); break; - case 'hour': ret.setTime(ret.getTime() + units * 3600000); break; - case 'minute': ret.setTime(ret.getTime() + units * 60000); break; - case 'second': ret.setTime(ret.getTime() + units * 1000); break; - default: ret = undefined; break; + case 'year': + ret.setFullYear(ret.getFullYear() + units); + checkRollover(); + break; + case 'quarter': + ret.setMonth(ret.getMonth() + 3 * units); + checkRollover(); + break; + case 'month': + ret.setMonth(ret.getMonth() + units); + checkRollover(); + break; + case 'week': + ret.setDate(ret.getDate() + 7 * units); + break; + case 'day': + ret.setDate(ret.getDate() + units); + break; + case 'hour': + ret.setTime(ret.getTime() + units * 3600000); + break; + case 'minute': + ret.setTime(ret.getTime() + units * 60000); + break; + case 'second': + ret.setTime(ret.getTime() + units * 1000); + break; + default: + ret = undefined; + break; } return ret; } - - /** * Returns specified list member separated by comma. * - * @example TALK TOLIST (array,member) + * @example TALK TOLIST (array,member) * */ - public getToLst(array, member) { + public getToLst (array, member) { if (!array) { - return "" + return ''; } if (array[0] && array[0]['gbarray']) { array = array.slice(1); } - array = array.filter((v, i, a) => a.findIndex(t => (t[member] === v[member])) === i); - array = array.filter(function (item, pos) { return item != undefined; }); - array = array.map((item) => { return item[member]; }) - array = array.join(","); + array = array.filter((v, i, a) => a.findIndex(t => t[member] === v[member]) === i); + array = array.filter(function (item, pos) { + return item != undefined; + }); + array = array.map(item => { + return item[member]; + }); + array = array.join(','); return array; } @@ -442,10 +450,10 @@ export class DialogKeywords { * @example hour = HOUR (date) * */ - public getHourFromDate(date) { - function addZero(i) { + public getHourFromDate (date) { + function addZero (i) { if (i < 10) { - i = "0" + i; + i = '0' + i; } return i; } @@ -473,7 +481,7 @@ export class DialogKeywords { * @example SAVE "contacts.xlsx", name, email, NOW * */ - public async getNow({}) { + public async getNow ({}) { const contentLocale = this.min.core.getParam( this.min.instance, 'Default Content Language', @@ -481,27 +489,24 @@ export class DialogKeywords { ); const nowUTC = new Date(); - const now = typeof nowUTC === 'string' ? - new Date(nowUTC) : - nowUTC; + const now = typeof nowUTC === 'string' ? new Date(nowUTC) : nowUTC; - const nowText = now.toLocaleString(this.getContentLocaleWithCulture(contentLocale), - { timeZone: process.env.DEFAULT_TIMEZONE }); + const nowText = now.toLocaleString(this.getContentLocaleWithCulture(contentLocale), { + timeZone: process.env.DEFAULT_TIMEZONE + }); return /\b([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]/.exec(nowText)[0]; } - /** * Sends an e-mail. - * - * @example - * + * + * @example + * * SEND MAIL "email@domain.com","Subject", "Message text." - * + * */ - public async sendEmail({to, subject, body}) { - + public async sendEmail ({ to, subject, body }) { // tslint:disable-next-line:no-console GBLog.info(`[E-mail]: to:${to},subject: ${subject},body: ${body}.`); @@ -509,7 +514,7 @@ export class DialogKeywords { // Inline word document used as e-mail body. - if (typeof (body) === "object") { + if (typeof body === 'object') { const result = await mammoth.convertToHtml({ buffer: body }); body = result.value; } @@ -525,9 +530,8 @@ export class DialogKeywords { }; sgMail.send(msg, false, (err, res) => { if (err) { - reject(err) - } - else { + reject(err); + } else { resolve(res); } }); @@ -540,9 +544,9 @@ export class DialogKeywords { * @example SEND FILE TO "+199988887777","image.jpg",caption * */ - public async sendFileTo({mobile, filename, caption}) { + public async sendFileTo ({ mobile, filename, caption }) { GBLog.info(`BASIC: SEND FILE TO '${mobile}',filename '${filename}'.`); - return await this.internalSendFile({mobile, filename, caption}); + return await this.internalSendFile({ mobile, filename, caption }); } /** @@ -551,10 +555,10 @@ export class DialogKeywords { * @example SEND FILE "image.jpg" * */ - public async sendFile({filename, caption}) { + public async sendFile ({ filename, caption }) { const mobile = await this.userMobile(); GBLog.info(`BASIC: SEND FILE (current: ${mobile},filename '${filename}'.`); - return await this.internalSendFile({mobile, filename, caption}); + return await this.internalSendFile({ mobile, filename, caption }); } /** @@ -563,7 +567,7 @@ export class DialogKeywords { * @example SET LANGUAGE "pt" * */ - public async setLanguage({language}) { + public async setLanguage ({ language }) { const sec = new SecService(); await sec.updateUserLocale(this.user.userId, language); } @@ -571,10 +575,10 @@ export class DialogKeywords { /** * Defines the id generation policy. * - * @example SET ID NUMBER + * @example SET ID NUMBER * */ - public async setIdGeneration({mode}) { + public async setIdGeneration ({ mode }) { this['idGeneration'] = mode; this['id'] = await this.sys().getRandomId(); } @@ -585,45 +589,41 @@ export class DialogKeywords { * @example SET MAX LINES 5000 * */ - public async setMaxLines({count}) { + public async setMaxLines ({ count }) { if (this.user) { // TODO: PARAM user.basicOptions.maxLines = count; - } - else { + } else { this.maxLines = count; } } - /** - * Defines the maximum lines to scan in spreedsheets. - * - * @example SET MAX COLUMNS 5000 - * - */ - public async setMaxColumns({count}) { + * Defines the maximum lines to scan in spreedsheets. + * + * @example SET MAX COLUMNS 5000 + * + */ + public async setMaxColumns ({ count }) { // TODO: user.basicOptions.maxColumns = count; - } - /** * Defines the FIND behaviour to consider whole words while searching. * * @example SET WHOLE WORD ON * */ - public async setWholeWord({on}) { + public async setWholeWord ({ on }) { // TODO: user.basicOptions.wholeWord = (on.trim() === "on"); } /** - * Defines the theme for assets generation. - * - * @example SET THEME "themename" - * - */ - public async setTheme({theme}) { + * Defines the theme for assets generation. + * + * @example SET THEME "themename" + * + */ + public async setTheme ({ theme }) { // TODO: user.basicOptions.theme = theme.trim(); } @@ -633,16 +633,14 @@ export class DialogKeywords { * @example SET TRANSLATOR ON | OFF * */ - public async setTranslatorOn({on}) { - + public async setTranslatorOn ({ on }) { // TODO: user.basicOptions.translatorOn = (on.trim() === "on"); } - /** * Returns the name of the user acquired by WhatsApp API. */ - public async userName() { + public async userName () { // TODO: WhatsappDirectLine.usernames[await this.userMobile()] : 'N/A'; return this.sys().getRandomId(); } @@ -650,7 +648,7 @@ export class DialogKeywords { /** * Returns current mobile number from user in conversation. */ - public async userMobile() { + public async userMobile () { // TODO: return GBMinService.userMobile(); return this.sys().getRandomId(); } @@ -661,18 +659,15 @@ export class DialogKeywords { * @example MENU * */ - public async showMenu({}) { + public async showMenu ({}) { // TODO: return await beginDialog('/menu'); } - private static async downloadAttachmentAndWrite(attachment) { - - + private static async downloadAttachmentAndWrite (attachment) { const url = attachment.contentUrl; const localFolder = Path.join('work'); // TODO: ,'${botId}','uploads'); const localFileName = Path.join(localFolder, attachment.name); try { - let response; if (url.startsWith('data:')) { var regex = /^data:.+\/(.+);base64,(.*)$/; @@ -680,18 +675,17 @@ export class DialogKeywords { var ext = matches[1]; var data = matches[2]; response = Buffer.from(data, 'base64'); - } - else { + } else { // arraybuffer is necessary for images const options = { url: url, method: 'GET', - encoding: 'binary', + encoding: 'binary' }; response = await request.get(options); } - Fs.writeFile(localFileName, response, (fsError) => { + Fs.writeFile(localFileName, response, fsError => { if (fsError) { throw fsError; } @@ -714,7 +708,7 @@ export class DialogKeywords { * @example TRANSFER * */ - public async transferTo({to}) { + public async transferTo ({ to }) { // TODO: return await beginDialog('/t',{ to: to }); } @@ -724,8 +718,7 @@ export class DialogKeywords { * @example HEAR name * */ - public async getHear({kind, arg}) { - + public async getHear ({ kind, arg }) { // Handles first arg as an array of args. let args = []; @@ -733,19 +726,16 @@ export class DialogKeywords { args = arg; } - try { - let user; const isIntentYes = (locale, utterance) => { return utterance.toLowerCase().match(Messages[locale].affirmative_sentences); - } + }; if (this.hrOn) { const sec = new SecService(); - user = await sec.getUserFromAgentSystemId(this.hrOn) - } - else { + user = await sec.getUserFromAgentSystemId(this.hrOn); + } else { user = this.user.systemUser; } const userId = user.userId; @@ -755,7 +745,6 @@ export class DialogKeywords { // TODO: https://github.com/GeneralBots/BotServer/issues/266 if (args && args.length > 1) { - let choices = []; let i = 0; await CollectionUtil.asyncForEach(args, async arg => { @@ -768,9 +757,7 @@ export class DialogKeywords { // TODO: await this.talk(button); GBLog.info(`BASIC: HEAR with [${args.toString()}] (Asking for input).`); - } - else { - + } else { GBLog.info('BASIC: HEAR (Asking for input).'); } @@ -781,7 +768,7 @@ export class DialogKeywords { setTimeout(resolve, ms); }); }; - this.min.cbMap[userId] = {} + this.min.cbMap[userId] = {}; this.min.cbMap[userId]['promise'] = '!GBHEAR'; while (this.min.cbMap[userId].promise === '!GBHEAR') { @@ -790,14 +777,12 @@ export class DialogKeywords { const text = this.min.cbMap[userId].promise; - if (kind === "file") { + if (kind === 'file') { // await prompt('attachmentPrompt',{}); - // // Prepare Promises to download each attachment and then execute each Promise. // const promises = step.context.activity.attachments.map( // DialogKeywords.downloadAttachmentAndWrite); // const successfulSaves = await Promise.all(promises); - // async function replyForReceivedAttachments(localAttachmentData) { // if (localAttachmentData) { // // Because the TurnContext was bound to this function,the bot can call @@ -807,43 +792,34 @@ export class DialogKeywords { // await this.sendActivity('Error uploading file. Please,start again.'); // } // } - // // Prepare Promises to reply to the user with information about saved attachments. // // The current TurnContext is bound so `replyForReceivedAttachments` can also send replies. // const replyPromises = successfulSaves.map(replyForReceivedAttachments.bind(step.context)); // await Promise.all(replyPromises); - // result = { // data: Fs.readFileSync(successfulSaves[0]['localPath']), // filename: successfulSaves[0]['fileName'] // }; - - } - else if (kind === "boolean") { + } else if (kind === 'boolean') { if (isIntentYes('pt-BR', text)) { result = true; - } - else { + } else { result = false; } - } - else if (kind === "email") { - - const extractEntity = (text) => { + } else if (kind === 'email') { + const extractEntity = text => { return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi); - } + }; const value = extractEntity(text); if (value === null) { - await this.talk({text: "Por favor,digite um e-mail válido."}); - return await this.getHear({kind, arg}); + await this.talk({ text: 'Por favor,digite um e-mail válido.' }); + return await this.getHear({ kind, arg }); } result = value; - - } - else if (kind === "name") { + } else if (kind === 'name') { const extractEntity = text => { return text.match(/[_a-zA-Z][_a-zA-Z0-9]{0,16}/gi); }; @@ -851,14 +827,12 @@ export class DialogKeywords { const value = extractEntity(text); if (value === null || value.length != 1) { - await this.talk({text:"Por favor,digite um nome válido."}); - return await this.getHear({kind, arg}); + await this.talk({ text: 'Por favor,digite um nome válido.' }); + return await this.getHear({ kind, arg }); } result = value; - - } - else if (kind === "integer") { + } else if (kind === 'integer') { const extractEntity = text => { return text.match(/\d+/gi); }; @@ -866,28 +840,27 @@ export class DialogKeywords { const value = extractEntity(text); if (value === null || value.length != 1) { - await this.talk({text:"Por favor,digite um número válido."}); - return await this.getHear({kind, arg}); + await this.talk({ text: 'Por favor,digite um número válido.' }); + return await this.getHear({ kind, arg }); } result = value; - } - else if (kind === "date") { + } else if (kind === 'date') { const extractEntity = text => { - return text.match(/(^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)/gi); + return text.match( + /(^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)/gi + ); }; const value = extractEntity(text); if (value === null || value.length != 1) { - await this.talk({text:"Por favor,digite uma data no formato 12/12/2020."}); - return await this.getHear({kind, arg}); + await this.talk({ text: 'Por favor,digite uma data no formato 12/12/2020.' }); + return await this.getHear({ kind, arg }); } result = value; - } - else if (kind === "hour") { - + } else if (kind === 'hour') { const extractEntity = text => { return text.match(/^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/gi); }; @@ -895,15 +868,13 @@ export class DialogKeywords { const value = extractEntity(text); if (value === null || value.length != 1) { - await this.talk({text:"Por favor,digite um horário no formato hh:ss."}); - return await this.getHear({kind, arg}); + await this.talk({ text: 'Por favor,digite um horário no formato hh:ss.' }); + return await this.getHear({ kind, arg }); } result = value; - } - else if (kind === "money") { + } else if (kind === 'money') { const extractEntity = text => { - // if (user.locale === 'en') { // TODO: Change to user. // return text.match(/(?:\d{1,3},)*\d{1,3}(?:\.\d+)?/gi); // } @@ -916,57 +887,48 @@ export class DialogKeywords { const value = extractEntity(text); if (value === null || value.length != 1) { - await this.talk({text:"Por favor,digite um valor monetário."}); - return await this.getHear({kind, arg}); + await this.talk({ text: 'Por favor,digite um valor monetário.' }); + return await this.getHear({ kind, arg }); } result = value; - } - else if (kind === "mobile") { - + } else if (kind === 'mobile') { let phoneNumber; try { - phoneNumber = phone(text, {country:'BRA'})[0]; // TODO: Use accordingly to the person. + phoneNumber = phone(text, { country: 'BRA' })[0]; // TODO: Use accordingly to the person. phoneNumber = phoneUtil.parse(phoneNumber); } catch (error) { await this.talk(Messages[locale].validation_enter_valid_mobile); - return await this.getHear({kind, arg}); + return await this.getHear({ kind, arg }); } if (!phoneUtil.isPossibleNumber(phoneNumber)) { - await this.talk({text:"Por favor,digite um número de telefone válido."}); - return await this.getHear({kind, arg}); + await this.talk({ text: 'Por favor,digite um número de telefone válido.' }); + return await this.getHear({ kind, arg }); } result = phoneNumber; - - } - else if (kind === "zipcode") { + } else if (kind === 'zipcode') { const extractEntity = text => { - text = text.replace(/\-/gi, ''); - if (user.locale === 'en') { // TODO: Change to user. + if (user.locale === 'en') { + // TODO: Change to user. return text.match(/\d{8}/gi); - } - else { + } else { return text.match(/(?:\d{1,3}.)*\d{1,3}(?:\,\d+)?/gi); - } }; const value = extractEntity(text); if (value === null || value.length != 1) { - await this.talk({text:"Por favor, digite um CEP válido."}); - return await this.getHear({kind, arg}); + await this.talk({ text: 'Por favor, digite um CEP válido.' }); + return await this.getHear({ kind, arg }); } result = value[0]; - - } - else if (kind === "menu") { - + } else if (kind === 'menu') { const list = args; result = null; await CollectionUtil.asyncForEach(list, async item => { @@ -976,12 +938,10 @@ export class DialogKeywords { }); if (result === null) { - await this.talk({text:`Escolha por favor um dos itens sugeridos.`}); - return await this.getHear({kind, arg}); + await this.talk({ text: `Escolha por favor um dos itens sugeridos.` }); + return await this.getHear({ kind, arg }); } - } - else if (kind === "language") { - + } else if (kind === 'language') { result = null; const list = [ @@ -1000,17 +960,18 @@ export class DialogKeywords { { name: 'alemão', code: 'de' } ]; - await CollectionUtil.asyncForEach(list, async item => { - if (GBConversationalService.kmpSearch(text.toLowerCase(), item.name.toLowerCase()) != -1 || - GBConversationalService.kmpSearch(text.toLowerCase(), item.code.toLowerCase()) != -1) { + if ( + GBConversationalService.kmpSearch(text.toLowerCase(), item.name.toLowerCase()) != -1 || + GBConversationalService.kmpSearch(text.toLowerCase(), item.code.toLowerCase()) != -1 + ) { result = item.code; } }); if (result === null) { - await this.talk({text:`Escolha por favor um dos itens sugeridos.`}); - return await this.getHear({kind, arg}); + await this.talk({ text: `Escolha por favor um dos itens sugeridos.` }); + return await this.getHear({ kind, arg }); } } return result; @@ -1022,7 +983,7 @@ export class DialogKeywords { /** * Prepares the next dialog to be shown to the specified user. */ - public async gotoDialog({fromOrDialogName, dialogName}) { + public async gotoDialog ({ fromOrDialogName, dialogName }) { if (dialogName) { if (dialogName.charAt(0) === '/') { // TODO: await step.beginDialog(fromOrDialogName); @@ -1030,18 +991,24 @@ export class DialogKeywords { let sec = new SecService(); let user = await sec.getUserFromSystemId(fromOrDialogName); if (!user) { - user = await sec.ensureUser(this.min.instance.instanceId, fromOrDialogName, - fromOrDialogName, null, 'whatsapp', 'from', null); + user = await sec.ensureUser( + this.min.instance.instanceId, + fromOrDialogName, + fromOrDialogName, + null, + 'whatsapp', + 'from', + null + ); } await sec.updateUserHearOnDialog(user.userId, dialogName); } - } - else { + } else { // TODO: await step.beginDialog(fromOrDialogName); } } - public async getSingleton({}) { + public async getSingleton ({}) { return { id: this.sys().getRandomId(), username: this.userName(), @@ -1051,57 +1018,48 @@ export class DialogKeywords { headers: {}, data: {}, list: [], - httpUsername: "", - httpPs: "" - } - }; + httpUsername: '', + httpPs: '' + }; + } /** * Talks to the user by using the specified text. */ - public async talk({text}) { + public async talk ({ text }) { GBLog.info(`BASIC: TALK '${text}'.`); if (this.user) { const translate = this.user ? this.user.basicOptions.translatorOn : false; - await this.min.conversationalService['sendOnConversation'](this.min, - this.user.systemUser, text); + await this.min.conversationalService['sendOnConversation'](this.min, this.user.systemUser, text); } } - private static getChannel(): string { + private static getChannel (): string { return 'whatsapp'; - // TODO: + // TODO: } - /** * Processes the sending of the file. */ - private async internalSendFile({mobile, filename, caption}) { - + private async internalSendFile ({ mobile, filename, caption }) { // Handles SEND FILE TO mobile,element in Web Automation. - const element = filename._page ? filename._page : (filename.screenshot ? filename : null); + const element = filename._page ? filename._page : filename.screenshot ? filename : null; if (element) { const gbaiName = `${this.min.botId}.gbai`; const localName = Path.join('work', gbaiName, 'cache', `img${GBAdminService.getRndReadableIdentifier()}.jpg`); await element.screenshot({ path: localName, fullPage: true }); - const url = urlJoin( - GBServer.globals.publicAddress, - this.min.botId, - 'cache', - Path.basename(localName) - ); + const url = urlJoin(GBServer.globals.publicAddress, this.min.botId, 'cache', Path.basename(localName)); GBLog.info(`BASIC: WebAutomation: Sending the file ${url} to mobile ${mobile}.`); await this.min.conversationalService.sendFile(this.min, null, mobile, url, caption); } // Handles Markdown. - else if (filename.indexOf('.md') > -1) { GBLog.info(`BASIC: Sending the contents of ${filename} markdown to mobile ${mobile}.`); const md = await this.min.kbService.getAnswerTextByMediaName(this.min.instance.instanceId, filename); @@ -1109,13 +1067,11 @@ export class DialogKeywords { GBLog.info(`BASIC: Markdown file ${filename} not found on database for ${this.min.instance.botId}.`); } - await this.min.conversationalService['playMarkdown'](this.min, md, - DialogKeywords.getChannel(), mobile); - + await this.min.conversationalService['playMarkdown'](this.min, md, DialogKeywords.getChannel(), mobile); } else { GBLog.info(`BASIC: Sending the file ${filename} to mobile ${mobile}.`); let url; - if (!filename.startsWith("https://")) { + if (!filename.startsWith('https://')) { url = urlJoin( GBServer.globals.publicAddress, 'kb', @@ -1124,8 +1080,7 @@ export class DialogKeywords { 'assets', filename ); - } - else { + } else { url = filename; } @@ -1133,10 +1088,10 @@ export class DialogKeywords { } } - public async getQRCode({text}) { + public async getQRCode ({ text }) { const img = await qrcode.toDataURL(text); - const data = img.replace(/^data:image\/\w+;base64,/, ""); - const buf = Buffer.from(data, "base64"); + const data = img.replace(/^data:image\/\w+;base64,/, ''); + const buf = Buffer.from(data, 'base64'); return buf; } -} \ No newline at end of file +} diff --git a/packages/basic.gblib/services/GBVMService.ts b/packages/basic.gblib/services/GBVMService.ts index 6dc8490e..85d2fd92 100644 --- a/packages/basic.gblib/services/GBVMService.ts +++ b/packages/basic.gblib/services/GBVMService.ts @@ -42,14 +42,14 @@ import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js'; import urlJoin from 'url-join'; import { NodeVM, VMScript } from 'vm2'; import { createVm2Pool } from './vm2-process/index.js'; -import * as vb2ts from './vbscript-to-typescript.js'; +import * as vb2ts from './vbscript-to-typescript.js'; import textract from 'textract'; import walkPromise from 'walk-promise'; import child_process from 'child_process'; import Path from 'path'; import indent from 'indent.js'; /** - * @fileoverview Decision was to priorize security(isolation) and debugging, + * @fileoverview Decision was to priorize security(isolation) and debugging, * over a beautiful BASIC transpiler (to be done). */ @@ -57,7 +57,7 @@ import indent from 'indent.js'; * Basic services for BASIC manipulation. */ export class GBVMService extends GBService { - public async loadDialogPackage(folder: string, min: GBMinInstance, core: IGBCoreService, deployer: GBDeployer) { + public async loadDialogPackage (folder: string, min: GBMinInstance, core: IGBCoreService, deployer: GBDeployer) { const files = await walkPromise(folder); await CollectionUtil.asyncForEach(files, async file => { @@ -91,8 +91,7 @@ export class GBVMService extends GBService { const s = new ScheduleServices(); if (schedule) { await s.createOrUpdateSchedule(min, schedule, mainName); - } - else { + } else { await s.deleteScheduleIfAny(min, mainName); } text = text.replace(/^\s*SET SCHEDULE (.*)/gim, ''); @@ -154,19 +153,17 @@ export class GBVMService extends GBService { }); } - public async translateBASIC(filename: any, min: GBMinInstance, deployer: GBDeployer, mainName: string) { - + public async translateBASIC (filename: any, min: GBMinInstance, deployer: GBDeployer, mainName: string) { // Converts General Bots BASIC into regular VBS let basicCode: string = Fs.readFileSync(filename, 'utf8'); // Processes END keyword, removing extracode, useful - // for development in .gbdialog. + // for development in .gbdialog. if (process.env.GBDIALOG_NOEND === 'true') { basicCode = basicCode.replace(/^\s*END(\W|\n)/gim, ''); - } - else { + } else { let end = /^\s*END(\W|\n)/gi.exec(basicCode); if (end) { basicCode = basicCode.substring(0, end.index); @@ -183,22 +180,22 @@ export class GBVMService extends GBService { let include = null; do { - include = /^include\b(.*)$/gmi.exec(basicCode); + include = /^include\b(.*)$/gim.exec(basicCode); if (include) { let includeName = include[1].trim(); includeName = Path.join(Path.dirname(filename), includeName); - includeName = includeName.substr(0, includeName.lastIndexOf(".")) + ".vbs"; + includeName = includeName.substr(0, includeName.lastIndexOf('.')) + '.vbs'; // To use include, two /publish will be necessary (for now) // because of alphabet order may raise not found errors. let includeCode: string = Fs.readFileSync(includeName, 'utf8'); - basicCode = basicCode.replace(/^include\b.*$/gmi, includeCode); + basicCode = basicCode.replace(/^include\b.*$/gim, includeCode); } } while (include); - const {code, jsonMap} = await this.convertGBASICToVBS(min, basicCode); + const { code, jsonMap } = await this.convertGBASICToVBS(min, basicCode); const vbsFile = `${filename}.compiled`; const mapFile = `${filename}.map`; @@ -272,27 +269,26 @@ export class GBVMService extends GBService { })(); `; - code = indent.js(code, {tabString: '\t'}); + code = indent.js(code, { tabString: '\t' }); Fs.writeFileSync(jsfile, code); min.sandBoxMap[mainName.toLowerCase().trim()] = code; GBLog.info(`[GBVMService] Finished loading of ${filename}, JavaScript from Word: \n ${code}`); } } - public static getMethodNameFromVBSFilename(filename: string) { + public static getMethodNameFromVBSFilename (filename: string) { let mainName = filename.replace(/\s|\-/gim, '').split('.')[0]; return mainName.toLowerCase(); } - public static getSetScheduleKeywordArgs(code: string) { - if (!code) - return null; + public static getSetScheduleKeywordArgs (code: string) { + if (!code) return null; const keyword = /^\s*SET SCHEDULE (.*)/gim; const result = keyword.exec(code); return result ? result[1] : null; } - private async getTextFromWord(folder: string, filename: string) { + private async getTextFromWord (folder: string, filename: string) { return new Promise(async (resolve, reject) => { textract.fromFileWithPath(urlJoin(folder, filename), { preserveLineBreaks: true }, (error, text) => { if (error) { @@ -310,21 +306,23 @@ export class GBVMService extends GBService { } private getParams = (text, names) => { - let ret = {}; - const splitParamsButIgnoreCommasInDoublequotes = (str) => { - return str.split(',').reduce((accum, curr) => { - if (accum.isConcatting) { - accum.soFar[accum.soFar.length - 1] += ',' + curr - } else { - accum.soFar.push(curr) - } - if (curr.split('"').length % 2 == 0) { - accum.isConcatting = !accum.isConcatting - } - return accum; - }, { soFar: [], isConcatting: false }).soFar - } + const splitParamsButIgnoreCommasInDoublequotes = str => { + return str.split(',').reduce( + (accum, curr) => { + if (accum.isConcatting) { + accum.soFar[accum.soFar.length - 1] += ',' + curr; + } else { + accum.soFar.push(curr); + } + if (curr.split('"').length % 2 == 0) { + accum.isConcatting = !accum.isConcatting; + } + return accum; + }, + { soFar: [], isConcatting: false } + ).soFar; + }; const items = splitParamsButIgnoreCommasInDoublequotes(text); @@ -335,20 +333,18 @@ export class GBVMService extends GBService { i++; json = `${json} "${name}": ${value} ${names.length == i ? '' : ','}`; }); - json = `${json}}` + json = `${json}}`; return json; }; - /** * Converts General Bots BASIC * * * @param code General Bots BASIC */ - public async convertGBASICToVBS(min: GBMinInstance, code: string) { - + public async convertGBASICToVBS (min: GBMinInstance, code: string) { // Start and End of VB2TS tags of processing. code = `<%\n @@ -359,7 +355,7 @@ export class GBVMService extends GBService { `; - var allLines = code.split("\n"); + var allLines = code.split('\n'); const keywords = this.getKeywords(); const offset = 34; const jsonMap = {}; @@ -371,406 +367,631 @@ export class GBVMService extends GBService { // Add additional lines returned from replacement. let add = allLines[i].split(/\r\n|\r|\n/).length; - jsonMap[i] = (offset + i) + (add ? add : 0); + jsonMap[i] = offset + i + (add ? add : 0); } } code = `${allLines.join('\n')}\n%>`; - return {code, jsonMap}; + return { code, jsonMap }; } - private getKeywords() { - + private getKeywords () { // Keywords from General Bots BASIC. let keywords = []; let i = 0; - keywords[i++] = [/^\s*(\w+)\s*\=\s*SELECT\s*(.*)/gim, ($0, $1, $2) => { - let tableName = /\sFROM\s(\w+)/.exec($2)[1]; - let sql = `SELECT ${$2}`.replace(tableName, '?'); - return `${$1} = await sys.executeSQL({data:${$1}, sql:"${sql}", tableName:"${tableName}"})\n`; - }]; - - keywords[i++] = [/^\s*open\s*(.*)/gim, ($0, $1, $2) => { - - if (!$1.startsWith("\"") && !$1.startsWith("\'")) { - $1 = `"${$1}"`; + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*SELECT\s*(.*)/gim, + ($0, $1, $2) => { + let tableName = /\sFROM\s(\w+)/.exec($2)[1]; + let sql = `SELECT ${$2}`.replace(tableName, '?'); + return `${$1} = await sys.executeSQL({data:${$1}, sql:"${sql}", tableName:"${tableName}"})\n`; } - const params = this.getParams($1, ['url', 'username', 'password']); + ]; - return `page = await wa.getPage(${params})\n`; - }]; + keywords[i++] = [ + /^\s*open\s*(.*)/gim, + ($0, $1, $2) => { + if (!$1.startsWith('"') && !$1.startsWith("'")) { + $1 = `"${$1}"`; + } + const params = this.getParams($1, ['url', 'username', 'password']); - keywords[i++] = [/^\s*(set hear on)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - return `hrOn = ${$3}\n`; - }]; + return `page = await wa.getPage(${params})\n`; + } + ]; - keywords[i++] = [/^\shear (\w+) as login/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"login"})`; - }]; + keywords[i++] = [ + /^\s*(set hear on)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + return `hrOn = ${$3}\n`; + } + ]; - keywords[i++] = [/^\shear (\w+) as email/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"email"})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as login/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"login"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as integer/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"integer"})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as email/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"email"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as file/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"file"})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as integer/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"integer"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as boolean/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"boolean"})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as file/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"file"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as name/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"name"})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as boolean/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"boolean"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as date/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"date"})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as name/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"name"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as hour/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"hour"})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as date/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"date"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as phone/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"phone"})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as hour/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"hour"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as money/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"money")}`; - }]; + keywords[i++] = [ + /^\shear (\w+) as phone/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"phone"})`; + } + ]; - keywords[i++] = [/^\shear (\w+) as language/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"language")}`; - }]; + keywords[i++] = [ + /^\shear (\w+) as money/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"money")}`; + } + ]; - keywords[i++] = [/^\shear (\w+) as zipcode/gim, ($0, $1) => { - return `${$1} = await dk.getHear({kind:"zipcode")}`; - }]; + keywords[i++] = [ + /^\shear (\w+) as language/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"language")}`; + } + ]; - keywords[i++] = [/^\shear (\w+) as (.*)/gim, ($0, $1, $2) => { - return `${$1} = await dk.getHear({kind:"menu", args: [${$2}])}`; - }]; + keywords[i++] = [ + /^\shear (\w+) as zipcode/gim, + ($0, $1) => { + return `${$1} = await dk.getHear({kind:"zipcode")}`; + } + ]; - keywords[i++] = [/^\s*(hear)\s*(\w+)/gim, ($0, $1, $2) => { - return `${$2} = await dk.getHear({})`; - }]; + keywords[i++] = [ + /^\shear (\w+) as (.*)/gim, + ($0, $1, $2) => { + return `${$1} = await dk.getHear({kind:"menu", args: [${$2}])}`; + } + ]; - keywords[i++] = [/^\s*(\w+)\s*\=\s*find contact\s*(.*)/gim, ($0, $1, $2, $3) => { - return `${$1} = await dk.fndContact({${$2})\n`; - }]; + keywords[i++] = [ + /^\s*(hear)\s*(\w+)/gim, + ($0, $1, $2) => { + return `${$2} = await dk.getHear({})`; + } + ]; - keywords[i++] = [/^\s*(\w+)\s*=\s*find\s*(.*)\s*or talk\s*(.*)/gim, ($0, $1, $2, $3) => { - return `${$1} = await sys.find({args:[${$2}])\n + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*find contact\s*(.*)/gim, + ($0, $1, $2, $3) => { + return `${$1} = await dk.fndContact({${$2})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*=\s*find\s*(.*)\s*or talk\s*(.*)/gim, + ($0, $1, $2, $3) => { + return `${$1} = await sys.find({args:[${$2}])\n if (!${$1}) { await dk.talk ({${$3}})\n; return -1; } `; - }]; + } + ]; - keywords[i++] = [/^\sCALL\s*(.*)/gim, ($0, $1) => { - return `await ${$1}\n`; - }]; + keywords[i++] = [ + /^\sCALL\s*(.*)/gim, + ($0, $1) => { + return `await ${$1}\n`; + } + ]; - keywords[i++] = [/^\s*(\w+)\s*\=\s*find\s*(.*)/gim, ($0, $1, $2, $3) => { - return ` + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*find\s*(.*)/gim, + ($0, $1, $2, $3) => { + return ` ${$1} = await sys.find({args: [${$2}]})\n`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*create deal(\s)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['dealName', 'contact', 'company', 'amount']); - - return `${$1} = await dk.createDeal(${params})\n`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*active tasks/gim, ($0, $1) => { - return `${$1} = await dk.getActiveTasks({})\n`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*append\s*(.*)/gim, ($0, $1, $2, $3) => { - return `${$1} = await sys.append({args:[${$2}]})\n`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*sort\s*(\w+)\s*by(.*)/gim, ($0, $1, $2, $3) => { - return `${$1} = await sys.sortBy({array: ${$2}, memberName: "${$3}"})\n`; - }]; - - keywords[i++] = [/^\ssee\s*text\s*of\s*(\w+)\s*as\s*(\w+)\s*/gim, ($0, $1, $2, $3) => { - return `${$2} = await sys.seeText({url: ${$1})\n`; - }]; - - keywords[i++] = [/^\ssee\s*caption\s*of\s*(\w+)\s*as(.*)/gim, ($0, $1, $2, $3) => { - return `${$2} = await sys.seeCaption({url: ${$1})\n`; - }]; - - keywords[i++] = [/^\s*(wait)\s*(\d+)/gim, ($0, $1, $2) => { - return `await sys.wait({seconds:${$2}})`; - }]; - - keywords[i++] = [/^\s*(get stock for )(.*)/gim, ($0, $1, $2) => { - return `stock = await sys.getStock({symbol: ${$2})`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*get\s(.*)/gim, ($0, $1, $2, $3) => { - - const count = ($2.match(/\,/g) || []).length; - const values = $2.split(','); - - // Handles GET "selector". - - if (count == 1) { - - return `${$1} = await wa.getBySelector({handle:page, selector: ${values[0]}})`; } + ]; - // Handles GET "frameSelector", "selector" + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*create deal(\s)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['dealName', 'contact', 'company', 'amount']); - else if (count == 2) { - - return `${$1} = await wa.getByFrame({handle: page, ${values[0]}, frameOrSelector: ${values[1]}, selector: ${values[2]}})`; + return `${$1} = await dk.createDeal(${params})\n`; } + ]; - // Handles the GET http version. - - else { - return `${$1} = await sys.get ({file: ${$2}, addressOrHeaders: headers, httpUsername, httpPs})`; + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*active tasks/gim, + ($0, $1) => { + return `${$1} = await dk.getActiveTasks({})\n`; } + ]; - }]; - - keywords[i++] = [/\= NEW OBJECT/gi, ($0, $1, $2, $3) => { - return ` = {}`; - }]; - - keywords[i++] = [/\= NEW ARRAY/gi, ($0, $1, $2, $3) => { - return ` = []`; - }]; - - - keywords[i++] = [/^\s*(go to)(\s)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['fromOrDialogName', 'dialogName']); - return `await dk.gotoDialog(${params})\n`; - }]; - - keywords[i++] = [/^\s*(set language)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - return `await dk.setLanguage ({${$3}})\n`; - }]; - - keywords[i++] = [/^\s*set header\s*(.*)\sas\s(.*)/gim, ($0, $1, $2) => { - return `headers[${$1}]=${$2})`; - }]; - - keywords[i++] = [/^\s*set http username\s*\=\s*(.*)/gim, ($0, $1) => { - return `httpUsername = ${$1}`; - }]; - - keywords[i++] = [/^\sset http password\s*\=\s*(.*)/gim, ($0, $1) => { - return `httpPs = ${$1}`; - }]; - - keywords[i++] = [/^\s*(datediff)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['date1', 'date2', 'mode']); - return `await dk.dateDiff (${params}})\n`; - }]; - - keywords[i++] = [/^\s*(dateadd)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['date', 'mode', 'units']); - return `await dk.dateAdd (${$3})\n`; - }]; - - keywords[i++] = [/^\s*(set max lines)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - return `await dk.setMaxLines ({count: ${$3}})\n`; - }]; - - keywords[i++] = [/^\s*(set max columns)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - return `await dk.setMaxColumns ({count: ${$3}})\n`; - }]; - - keywords[i++] = [/^\s*(set translator)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - return `await dk.setTranslatorOn ({on: "${$3.toLowerCase()}"})\n`; - }]; - - keywords[i++] = [/^\s*(set theme)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - return `await dk.setTheme ({theme: "${$3.toLowerCase()}"})\n`; - }]; - - keywords[i++] = [/^\s*(set whole word)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - return `await dk.setWholeWord ({on: "${$3.toLowerCase()}"})\n`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*post\s*(.*),\s*(.*)/gim, ($0, $1, $2, $3) => { - return `${$1} = await sys.postByHttp ({url:${$2}, data:${$3}, headers})`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*put\s*(.*),\s*(.*)/gim, ($0, $1, $2, $3) => { - return `${$1} = await sys.putByHttp ({url:${$2}, data:${$3}, headers})`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*download\s*(.*),\s*(.*)/gim, ($0, $1, $2, $3) => { - return `${$1} = await sys.download ({handle:page, selector: ${$2}, folder:${$3}})`; - }]; - - keywords[i++] = [/^\s*(\w+)\s*\=\s*CREATE FOLDER\s*(.*)/gim, ($0, $1, $2) => { - return `${$1} = await sys.createFolder ({name:${$2}})`; - }]; - - keywords[i++] = [/^\sSHARE FOLDER\s*(.*)/gim, ($0, $1) => { - return `await sys.shareFolder ({name: ${$1}})`; - }]; - - keywords[i++] = [/^\s*(create a bot farm using)(\s)(.*)/gim, ($0, $1, $2, $3) => { - return `await sys.createABotFarmUsing ({${$3}})`; - }]; - - keywords[i++] = [/^\s*(transfer to)(\s)(.*)/gim, ($0, $1, $2, $3) => { - return `await dk.transferTo ({to:${$3}})\n`; - }]; - - keywords[i++] = [/^\s*(\btransfer\b)(?=(?:[^"]|"[^"]*")*$)/gim, () => { - return `await dk.transferTo ({})\n`; - }]; - - keywords[i++] = [/^\s*(exit)/gim, () => { - return ``; - }]; - - keywords[i++] = [/^\s*(show menu)/gim, () => { - return `await dk.showMenu ({})\n`; - }]; - - keywords[i++] = [/^\s*(talk to)(\s)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['mobile', 'message']); - return `await sys.talkTo(${params})\n`; - }]; - - keywords[i++] = [/^\s*(talk)(\s)(.*)/gim, ($0, $1, $2, $3) => { - if ($3.substr(0, 1) !== "\"") { - $3 = `"${$3}"`; + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*append\s*(.*)/gim, + ($0, $1, $2, $3) => { + return `${$1} = await sys.append({args:[${$2}]})\n`; } - return `await dk.talk ({text: ${$3}})\n`; - }]; + ]; - keywords[i++] = [/^\s*(send sms to)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['mobile', 'message']); - return `await sys.sendSmsTo(${params})\n`; - }]; + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*sort\s*(\w+)\s*by(.*)/gim, + ($0, $1, $2, $3) => { + return `${$1} = await sys.sortBy({array: ${$2}, memberName: "${$3}"})\n`; + } + ]; - keywords[i++] = [/^\s*(send email)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['to', 'subject', 'body']); - return `await dk.sendEmail(${params})\n`; - }]; + keywords[i++] = [ + /^\ssee\s*text\s*of\s*(\w+)\s*as\s*(\w+)\s*/gim, + ($0, $1, $2, $3) => { + return `${$2} = await sys.seeText({url: ${$1})\n`; + } + ]; - keywords[i++] = [/^\s*(send mail)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['to', 'subject', 'body']); - return `await dk.sendEmail(${params})\n`; - }]; + keywords[i++] = [ + /^\ssee\s*caption\s*of\s*(\w+)\s*as(.*)/gim, + ($0, $1, $2, $3) => { + return `${$2} = await sys.seeCaption({url: ${$1})\n`; + } + ]; - keywords[i++] = [/^\s*(send file to)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['mobile', 'filename', 'caption']); - return `await dk.sendFileTo(${params})\n`; - }]; + keywords[i++] = [ + /^\s*(wait)\s*(\d+)/gim, + ($0, $1, $2) => { + return `await sys.wait({seconds:${$2}})`; + } + ]; - keywords[i++] = [/^\s*(hover)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['handle', 'selector']); - return `await wa.hover (${params})\n`; - }]; + keywords[i++] = [ + /^\s*(get stock for )(.*)/gim, + ($0, $1, $2) => { + return `stock = await sys.getStock({symbol: ${$2})`; + } + ]; - keywords[i++] = [/^\s*(click link text)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams('page,' + $3, ['handle', 'text', 'index']); - return `await wa.linkByText (${params})\n`; - }]; + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*get\s(.*)/gim, + ($0, $1, $2, $3) => { + const count = ($2.match(/\,/g) || []).length; + const values = $2.split(','); - keywords[i++] = [/^\s*(click)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - // TODO: page is not string. - const params = this.getParams('page,' + $3, ['handle', 'frameOrSelector', 'selector']); - return `await wa.click (${params})\n`; - }]; + // Handles GET "selector". - keywords[i++] = [/^\s*(send file)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['filename', 'caption']); - return `await dk.sendFile(${params})\n`; - }]; + if (count == 1) { + return `${$1} = await wa.getBySelector({handle:page, selector: ${values[0]}})`; + } - keywords[i++] = [/^\s*(copy)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['src', 'dst']); - return `await sys.copyFile (${params})\n`; - }]; + // Handles GET "frameSelector", "selector" + else if (count == 2) { + return `${$1} = await wa.getByFrame({handle: page, ${values[0]}, frameOrSelector: ${values[1]}, selector: ${ + values[2] + }})`; + } - keywords[i++] = [/^\s*(convert)(\s*)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['src', 'dst']); - return `await sys.convert (${params})\n`; - }]; + // Handles the GET http version. + else { + return `${$1} = await sys.get ({file: ${$2}, addressOrHeaders: headers, httpUsername, httpPs})`; + } + } + ]; - keywords[i++] = [/^\s*(\w+)\s*\=\s*(.*)\s*as chart/gim, ($0, $1, $2) => { - return `await dk.chart ({type:'bar', data: ${2}, legends:null, transpose: false})\n`; - }]; + keywords[i++] = [ + /\= NEW OBJECT/gi, + ($0, $1, $2, $3) => { + return ` = {}`; + } + ]; - keywords[i++] = [/^\s*(chart)(\s)(.*)/gim, ($0, $1, $2, $3) => { - const params = this.getParams($3, ['type', 'data', 'legends', 'transpose']); - return `await dk.chart (${params})\n`; - }]; + keywords[i++] = [ + /\= NEW ARRAY/gi, + ($0, $1, $2, $3) => { + return ` = []`; + } + ]; - keywords[i++] = [/^\sMERGE\s(.*)\sWITH\s(.*)BY\s(.*)/gim, ($0, $1, $2, $3) => { - return `await sys.merge({file: ${$1}, data: ${$2}, key1: ${$3}})\n`; - }]; + keywords[i++] = [ + /^\s*(go to)(\s)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['fromOrDialogName', 'dialogName']); + return `await dk.gotoDialog(${params})\n`; + } + ]; - keywords[i++] = [/^\sPRESS\s(.*)/gim, ($0, $1, $2) => { - return `await wa.pressKey({handle: page, char: ${$1})\n`; - }]; + keywords[i++] = [ + /^\s*(set language)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + return `await dk.setLanguage ({${$3}})\n`; + } + ]; - keywords[i++] = [/^\sSCREENSHOT\s(.*)/gim, ($0, $1, $2) => { - return `await wa.screenshot({handle: page, selector: ${$1}})\n`; - }]; + keywords[i++] = [ + /^\s*set header\s*(.*)\sas\s(.*)/gim, + ($0, $1, $2) => { + return `headers[${$1}]=${$2})`; + } + ]; - keywords[i++] = [/^\sTWEET\s(.*)/gim, ($0, $1, $2) => { - return `await sys.tweet({text: ${$1})\n`; - }]; + keywords[i++] = [ + /^\s*set http username\s*\=\s*(.*)/gim, + ($0, $1) => { + return `httpUsername = ${$1}`; + } + ]; - keywords[i++] = [/^\s*(\w+)\s*\=\s*(.*)\s*as image/gim, ($0, $1, $2) => { - return `${$1} = await sys.asImage({data: ${$2}})\n`; - }]; + keywords[i++] = [ + /^\sset http password\s*\=\s*(.*)/gim, + ($0, $1) => { + return `httpPs = ${$1}`; + } + ]; - keywords[i++] = [/^\s*(\w+)\s*\=\s*(.*)\s*as pdf/gim, ($0, $1, $2) => { - return `${$1} = await sys.asPdf({data: ${$2})\n`; - }]; + keywords[i++] = [ + /^\s*(datediff)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['date1', 'date2', 'mode']); + return `await dk.dateDiff (${params}})\n`; + } + ]; - keywords[i++] = [/^\s*(\w+)\s*\=\s*FILL\s(.*)\sWITH\s(.*)/gim, ($0, $1, $2, $3) => { - return `${$1} = await sys.fill({templateName: ${$2}, data: ${$3}})\n`; - }]; + keywords[i++] = [ + /^\s*(dateadd)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['date', 'mode', 'units']); + return `await dk.dateAdd (${$3})\n`; + } + ]; - keywords[i++] = [/^\ssave\s(.*)\sas\s(.*)/gim, ($0, $1, $2, $3) => { - return `await sys.saveFile({file: ${$2}, data: ${$1})\n`; - }]; - keywords[i++] = [/^\s*(save)(\s)(.*)/gim, ($0, $1, $2, $3) => { - return `await sys.save({args: [${$3}]})\n`; - }]; + keywords[i++] = [ + /^\s*(set max lines)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + return `await dk.setMaxLines ({count: ${$3}})\n`; + } + ]; - keywords[i++] = [/^\sset\s(.*)/gim, ($0, $1, $2) => { - const params = this.getParams($1, ['file', 'address', 'value']); - return `await sys.set (${params})`; - }]; + keywords[i++] = [ + /^\s*(set max columns)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + return `await dk.setMaxColumns ({count: ${$3}})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(set translator)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + return `await dk.setTranslatorOn ({on: "${$3.toLowerCase()}"})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(set theme)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + return `await dk.setTheme ({theme: "${$3.toLowerCase()}"})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(set whole word)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + return `await dk.setWholeWord ({on: "${$3.toLowerCase()}"})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*post\s*(.*),\s*(.*)/gim, + ($0, $1, $2, $3) => { + return `${$1} = await sys.postByHttp ({url:${$2}, data:${$3}, headers})`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*put\s*(.*),\s*(.*)/gim, + ($0, $1, $2, $3) => { + return `${$1} = await sys.putByHttp ({url:${$2}, data:${$3}, headers})`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*download\s*(.*),\s*(.*)/gim, + ($0, $1, $2, $3) => { + return `${$1} = await sys.download ({handle:page, selector: ${$2}, folder:${$3}})`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*CREATE FOLDER\s*(.*)/gim, + ($0, $1, $2) => { + return `${$1} = await sys.createFolder ({name:${$2}})`; + } + ]; + + keywords[i++] = [ + /^\sSHARE FOLDER\s*(.*)/gim, + ($0, $1) => { + return `await sys.shareFolder ({name: ${$1}})`; + } + ]; + + keywords[i++] = [ + /^\s*(create a bot farm using)(\s)(.*)/gim, + ($0, $1, $2, $3) => { + return `await sys.createABotFarmUsing ({${$3}})`; + } + ]; + + keywords[i++] = [ + /^\s*(transfer to)(\s)(.*)/gim, + ($0, $1, $2, $3) => { + return `await dk.transferTo ({to:${$3}})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(\btransfer\b)(?=(?:[^"]|"[^"]*")*$)/gim, + () => { + return `await dk.transferTo ({})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(exit)/gim, + () => { + return ``; + } + ]; + + keywords[i++] = [ + /^\s*(show menu)/gim, + () => { + return `await dk.showMenu ({})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(talk to)(\s)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['mobile', 'message']); + return `await sys.talkTo(${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(talk)(\s)(.*)/gim, + ($0, $1, $2, $3) => { + if ($3.substr(0, 1) !== '"') { + $3 = `"${$3}"`; + } + return `await dk.talk ({text: ${$3}})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(send sms to)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['mobile', 'message']); + return `await sys.sendSmsTo(${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(send email)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['to', 'subject', 'body']); + return `await dk.sendEmail(${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(send mail)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['to', 'subject', 'body']); + return `await dk.sendEmail(${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(send file to)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['mobile', 'filename', 'caption']); + return `await dk.sendFileTo(${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(hover)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['handle', 'selector']); + return `await wa.hover (${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(click link text)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams('page,' + $3, ['handle', 'text', 'index']); + return `await wa.linkByText (${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(click)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + // TODO: page is not string. + const params = this.getParams('page,' + $3, ['handle', 'frameOrSelector', 'selector']); + return `await wa.click (${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(send file)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['filename', 'caption']); + return `await dk.sendFile(${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(copy)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['src', 'dst']); + return `await sys.copyFile (${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(convert)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['src', 'dst']); + return `await sys.convert (${params})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*(.*)\s*as chart/gim, + ($0, $1, $2) => { + return `await dk.chart ({type:'bar', data: ${2}, legends:null, transpose: false})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(chart)(\s)(.*)/gim, + ($0, $1, $2, $3) => { + const params = this.getParams($3, ['type', 'data', 'legends', 'transpose']); + return `await dk.chart (${params})\n`; + } + ]; + + keywords[i++] = [ + /^\sMERGE\s(.*)\sWITH\s(.*)BY\s(.*)/gim, + ($0, $1, $2, $3) => { + return `await sys.merge({file: ${$1}, data: ${$2}, key1: ${$3}})\n`; + } + ]; + + keywords[i++] = [ + /^\sPRESS\s(.*)/gim, + ($0, $1, $2) => { + return `await wa.pressKey({handle: page, char: ${$1})\n`; + } + ]; + + keywords[i++] = [ + /^\sSCREENSHOT\s(.*)/gim, + ($0, $1, $2) => { + return `await wa.screenshot({handle: page, selector: ${$1}})\n`; + } + ]; + + keywords[i++] = [ + /^\sTWEET\s(.*)/gim, + ($0, $1, $2) => { + return `await sys.tweet({text: ${$1})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*(.*)\s*as image/gim, + ($0, $1, $2) => { + return `${$1} = await sys.asImage({data: ${$2}})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*(.*)\s*as pdf/gim, + ($0, $1, $2) => { + return `${$1} = await sys.asPdf({data: ${$2})\n`; + } + ]; + + keywords[i++] = [ + /^\s*(\w+)\s*\=\s*FILL\s(.*)\sWITH\s(.*)/gim, + ($0, $1, $2, $3) => { + return `${$1} = await sys.fill({templateName: ${$2}, data: ${$3}})\n`; + } + ]; + + keywords[i++] = [ + /^\ssave\s(.*)\sas\s(.*)/gim, + ($0, $1, $2, $3) => { + return `await sys.saveFile({file: ${$2}, data: ${$1})\n`; + } + ]; + keywords[i++] = [ + /^\s*(save)(\s)(.*)/gim, + ($0, $1, $2, $3) => { + return `await sys.save({args: [${$3}]})\n`; + } + ]; + + keywords[i++] = [ + /^\sset\s(.*)/gim, + ($0, $1, $2) => { + const params = this.getParams($1, ['file', 'address', 'value']); + return `await sys.set (${params})`; + } + ]; return keywords; } - /** * Executes the converted JavaScript from BASIC code inside execution context. */ - public static async callVM(text: string, min: GBMinInstance, step, GBDialogdeployer: GBDeployer, debug: boolean) { - + public static async callVM (text: string, min: GBMinInstance, step, GBDialogdeployer: GBDeployer, debug: boolean) { const debuggerPort = 9222; // Creates a class DialogKeywords which is the *this* pointer // in BASIC. - const user = step ? await min.userProfile.get(step.context, {}) : null; + const user = step ? await min.userProfile.get(step.context, {}) : null; const sandbox = { user: user.systemUser }; @@ -783,9 +1004,7 @@ export class GBVMService extends GBService { // Auto-NLP generates BASIC variables related to entities. if (step && step.context.activity['originalText']) { - const entities = await min["nerEngine"].findEntities( - step.context.activity['originalText'], - contentLocale); + const entities = await min['nerEngine'].findEntities(step.context.activity['originalText'], contentLocale); for (let i = 0; i < entities.length; i++) { const v = entities[i]; @@ -802,7 +1021,6 @@ export class GBVMService extends GBService { if (GBConfigService.get('VM3') === 'true') { try { - const vm1 = new NodeVM({ allowAsync: true, sandbox: {}, @@ -813,7 +1031,7 @@ export class GBVMService extends GBService { root: ['./'], external: true, context: 'sandbox' - }, + } }); const s = new VMScript(code, { filename: scriptPath }); let x = vm1.run(s); @@ -821,9 +1039,16 @@ export class GBVMService extends GBService { } catch (error) { throw new Error(`BASIC RUNTIME ERR: ${error.message ? error.message : error}\n Stack:${error.stack}`); } - } else { - const runnerPath = urlJoin(process.cwd(), 'dist', 'packages', 'basic.gblib', 'services', 'vm2-process', 'vm2ProcessRunner.js'); + const runnerPath = urlJoin( + process.cwd(), + 'dist', + 'packages', + 'basic.gblib', + 'services', + 'vm2-process', + 'vm2ProcessRunner.js' + ); try { const { run } = createVm2Pool({ @@ -840,7 +1065,7 @@ export class GBVMService extends GBService { }); const result = await run(code, { filename: scriptPath, sandbox: sandbox }); - + return result; } catch (error) { throw new Error(`BASIC RUNTIME ERR: ${error.message ? error.message : error}\n Stack:${error.stack}`); diff --git a/packages/basic.gblib/services/ScheduleServices.ts b/packages/basic.gblib/services/ScheduleServices.ts index 4d645f53..fc1ec471 100644 --- a/packages/basic.gblib/services/ScheduleServices.ts +++ b/packages/basic.gblib/services/ScheduleServices.ts @@ -48,14 +48,12 @@ import cron from 'node-cron'; * Basic services for BASIC manipulation. */ export class ScheduleServices extends GBService { - - public async deleteScheduleIfAny(min: GBMinInstance, name: string) { - - const task = min["scheduleMap"] ? min["scheduleMap"][name] : null; + public async deleteScheduleIfAny (min: GBMinInstance, name: string) { + const task = min['scheduleMap'] ? min['scheduleMap'][name] : null; if (task) { task.destroy(); - delete min["scheduleMap"][name]; + delete min['scheduleMap'][name]; } const count = await GuaribasSchedule.destroy({ @@ -73,11 +71,7 @@ export class ScheduleServices extends GBService { /** * Finds and update user agent information to a next available person. */ - public async createOrUpdateSchedule( - min: GBMinInstance, - schedule: string, - name: string - ): Promise { + public async createOrUpdateSchedule (min: GBMinInstance, schedule: string, name: string): Promise { let record = await GuaribasSchedule.findOne({ where: { instanceId: min.instance.instanceId, @@ -101,12 +95,10 @@ export class ScheduleServices extends GBService { return record; } - /** - * Load all cached schedule from BASIC SET SCHEDULE keyword. - */ - public async scheduleAll() { - + * Load all cached schedule from BASIC SET SCHEDULE keyword. + */ + public async scheduleAll () { let schedules; try { schedules = await GuaribasSchedule.findAll(); @@ -115,7 +107,7 @@ export class ScheduleServices extends GBService { p => p.instance.instanceId === item.instanceId )[0]; - if (min){ + if (min) { this.ScheduleItem(item, min); } }); @@ -125,7 +117,7 @@ export class ScheduleServices extends GBService { return schedules; } - private ScheduleItem(item: GuaribasSchedule, min: GBMinInstance) { + private ScheduleItem (item: GuaribasSchedule, min: GBMinInstance) { GBLog.info(`Scheduling ${item.name} on ${min.botId}...`); try { const options = { @@ -133,13 +125,13 @@ export class ScheduleServices extends GBService { timezone: 'America/Sao_Paulo' }; - const task = min["scheduleMap"][item.name]; + const task = min['scheduleMap'][item.name]; if (task) { task.stop(); - min["scheduleMap"][item.name] = null; + min['scheduleMap'][item.name] = null; } - min["scheduleMap"][item.name] = cron.schedule( + min['scheduleMap'][item.name] = cron.schedule( item.schedule, function () { const finalData = async () => { @@ -152,9 +144,10 @@ export class ScheduleServices extends GBService { (async () => { await finalData(); })(); - }, options + }, + options ); GBLog.info(`Running .gbdialog word ${item.name} on:${item.schedule}...`); - } catch (error) { } + } catch (error) {} } } diff --git a/packages/basic.gblib/services/SystemKeywords.ts b/packages/basic.gblib/services/SystemKeywords.ts index bb9e012c..8f444fdf 100644 --- a/packages/basic.gblib/services/SystemKeywords.ts +++ b/packages/basic.gblib/services/SystemKeywords.ts @@ -59,12 +59,11 @@ import _ from 'lodash'; */ /** -* BASIC system class for extra manipulation of bot behaviour. -*/ + * BASIC system class for extra manipulation of bot behaviour. + */ export class SystemKeywords { - - /** - * Reference to minimal bot instance. + /** + * Reference to minimal bot instance. */ public min: GBMinInstance; @@ -80,17 +79,15 @@ export class SystemKeywords { * When creating this keyword facade, a bot instance is * specified among the deployer service. */ - constructor(min: GBMinInstance, deployer: GBDeployer, dk: DialogKeywords, wa) { + constructor (min: GBMinInstance, deployer: GBDeployer, dk: DialogKeywords, wa) { this.min = min; this.wa = wa; this.deployer = deployer; this.dk = dk; } - - public async callVM({text}) { - - // TODO: + public async callVM ({ text }) { + // TODO: const min = null; const step = null; const deployer = null; @@ -98,21 +95,23 @@ export class SystemKeywords { return await GBVMService.callVM(text, min, step, deployer, false); } - public async append({args}) { + public async append ({ args }) { let array = [].concat(...args); - return array.filter(function (item, pos) { return item; }); + return array.filter(function (item, pos) { + return item; + }); } - /** - * + * * @example SEE CAPTION OF url AS variable - * + * */ - public async seeCaption({url}) { + public async seeCaption ({ url }) { const computerVisionClient = new ComputerVisionClient.ComputerVisionClient( new ApiKeyCredentials.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': process.env.VISION_KEY } }), - process.env.VISION_ENDPOINT); + process.env.VISION_ENDPOINT + ); let caption = (await computerVisionClient.describeImage(url)).captions[0]; @@ -123,24 +122,21 @@ export class SystemKeywords { ); GBLog.info(`GBVision (caption): '${caption.text}' (Confidence: ${caption.confidence.toFixed(2)})`); - return await this.min.conversationalService.translate( - this.min, - caption.text, - contentLocale - ); + return await this.min.conversationalService.translate(this.min, caption.text, contentLocale); } /** - * + * * @example SEE TEXT OF url AS variable - * + * */ - public async seeText({url}) { + public async seeText ({ url }) { const computerVisionClient = new ComputerVisionClient.ComputerVisionClient( new ApiKeyCredentials.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': process.env.VISION_KEY } }), - process.env.VISION_ENDPOINT); + process.env.VISION_ENDPOINT + ); - const result = (await computerVisionClient.recognizePrintedText(true, url)); + const result = await computerVisionClient.recognizePrintedText(true, url); const text = result.regions[0].lines[0].words[0].text; let final = ''; @@ -160,7 +156,7 @@ export class SystemKeywords { return final; } - public async sortBy({array, memberName}) { + public async sortBy ({ array, memberName }) { memberName = memberName.trim(); const contentLocale = this.min.core.getParam( this.min.instance, @@ -173,26 +169,29 @@ export class SystemKeywords { let dt = array[0] ? array[0][memberName] : null; let date = SystemKeywords.getDateFromLocaleString(dt, contentLocale); if (date) { - return array ? array.sort((a, b) => { - const c = new Date(a[memberName]); - const d = new Date(b[memberName]); - return c.getTime() - d.getTime(); - }) : null; - } - else { - return array ? array.sort((a, b) => { - if (a[memberName] < b[memberName]) { - return -1; - } - if (a[memberName] > b[memberName]) { - return 1; - } - return 0; - }) : array; + return array + ? array.sort((a, b) => { + const c = new Date(a[memberName]); + const d = new Date(b[memberName]); + return c.getTime() - d.getTime(); + }) + : null; + } else { + return array + ? array.sort((a, b) => { + if (a[memberName] < b[memberName]) { + return -1; + } + if (a[memberName] > b[memberName]) { + return 1; + } + return 0; + }) + : array; } } - public static JSONAsGBTable(data, headers) { + public static JSONAsGBTable (data, headers) { try { let output = []; let isObject = false; @@ -202,21 +201,17 @@ export class SystemKeywords { } if (isObject || JSON.parse(data) !== null) { - let keys = Object.keys(data[1]); - if (headers) { output[0] = []; // Copies headers as the first element. for (let i = 0; i < keys.length; i++) { - output[0][i] = keys[i]; } - } - else { - output.push({ 'gbarray': '0' });; + } else { + output.push({ gbarray: '0' }); } // Copies data from JSON format into simple array. @@ -237,16 +232,15 @@ export class SystemKeywords { } /** - * - * @param data - * @param renderPDF - * @param renderImage - * @returns - * + * + * @param data + * @param renderPDF + * @param renderImage + * @returns + * * @see http://tabulator.info/examples/5.2 */ - private async renderTable(data, renderPDF, renderImage) { - + private async renderTable (data, renderPDF, renderImage) { if (!data[1]) { return null; } @@ -256,7 +250,6 @@ export class SystemKeywords { // Detects if it is a collection with repeated // headers. - const gbaiName = `${this.min.botId}.gbai`; const browser = await createBrowser(null); const page = await browser.newPage(); @@ -265,14 +258,14 @@ export class SystemKeywords { const theme = this.dk.user.basicOptions.theme; switch (theme) { - case "white": - await page.addStyleTag({ path: 'node_modules/tabulator-tables/dist/css/tabulator_simple.min.css' }) + case 'white': + await page.addStyleTag({ path: 'node_modules/tabulator-tables/dist/css/tabulator_simple.min.css' }); break; - case "dark": - await page.addStyleTag({ path: 'node_modules/tabulator-tables/dist/css/tabulator_midnight.min.css' }) + case 'dark': + await page.addStyleTag({ path: 'node_modules/tabulator-tables/dist/css/tabulator_midnight.min.css' }); break; - case "blue": - await page.addStyleTag({ path: 'node_modules/tabulator-tables/dist/css/tabulator_modern.min.css' }) + case 'blue': + await page.addStyleTag({ path: 'node_modules/tabulator-tables/dist/css/tabulator_modern.min.css' }); break; default: break; @@ -295,8 +288,8 @@ export class SystemKeywords { // Adds DIV for Tabulator. await page.evaluate(() => { - const el = document.createElement("div"); - el.setAttribute("id", "table"); + const el = document.createElement('div'); + el.setAttribute('id', 'table'); document.body.appendChild(el); }); @@ -318,12 +311,7 @@ export class SystemKeywords { if (renderImage) { localName = Path.join('work', gbaiName, 'cache', `img${GBAdminService.getRndReadableIdentifier()}.png`); await page.screenshot({ path: localName, fullPage: true }); - url = urlJoin( - GBServer.globals.publicAddress, - this.min.botId, - 'cache', - Path.basename(localName) - ); + url = urlJoin(GBServer.globals.publicAddress, this.min.botId, 'cache', Path.basename(localName)); GBLog.info(`BASIC: Table image generated at ${url} .`); } @@ -331,12 +319,7 @@ export class SystemKeywords { if (renderPDF) { localName = Path.join('work', gbaiName, 'cache', `img${GBAdminService.getRndReadableIdentifier()}.pdf`); - url = urlJoin( - GBServer.globals.publicAddress, - this.min.botId, - 'cache', - Path.basename(localName) - ); + url = urlJoin(GBServer.globals.publicAddress, this.min.botId, 'cache', Path.basename(localName)); let pdf = await page.pdf({ format: 'A4' }); GBLog.info(`BASIC: Table PDF generated at ${url} .`); } @@ -345,19 +328,17 @@ export class SystemKeywords { return [url, localName]; } - public async asPDF({data, filename}) { + public async asPDF ({ data, filename }) { let file = await this.renderTable(data, true, false); return file[0]; } - public async asImage({data, filename}) { + public async asImage ({ data, filename }) { let file = await this.renderTable(data, false, true); return file[0]; - } - public async executeSQL({data, sql, tableName}) { - + public async executeSQL ({ data, sql, tableName }) { let objectMode = false; if (Object.keys(data[0])) { objectMode = true; @@ -377,7 +358,7 @@ export class SystemKeywords { /** * Retrives the content of a given URL. */ - public async getFileContents({url, headers}) { + public async getFileContents ({ url, headers }) { const options = { url: url, method: 'GET', @@ -390,22 +371,19 @@ export class SystemKeywords { /** * Retrives a random id with a length of five, every time it is called. */ - public async getRandomId() { - + public async getRandomId () { const idGeneration = this.dk['idGeneration']; if (idGeneration && idGeneration.trim().toLowerCase() === 'number') { return GBAdminService.getNumberIdentifier(); - } - else { + } else { return GBAdminService.getRndReadableIdentifier().substr(5); } - } /** * Retrives stock inforation for a given symbol. */ - public async getStock({symbol}) { + public async getStock ({ symbol }) { var options = { uri: `http://live-nse.herokuapp.com/?symbol=${symbol}` }; @@ -414,14 +392,13 @@ export class SystemKeywords { return data; } - /** * Holds script execution for the number of seconds specified. - * + * * @example WAIT 5 ' This will wait five seconds. - * + * */ - public async wait({seconds}) { + public async wait ({ seconds }) { // tslint:disable-next-line no-string-based-set-timeout GBLog.info(`BASIC: WAIT for ${seconds} second(s).`); const timeout = async (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); @@ -430,22 +407,22 @@ export class SystemKeywords { /** * Sends a text message to the mobile number specified. - * + * * @example TALK TO "+199988887777", "Message text here" - * + * */ - public async talkTo({mobile, message}) { + public async talkTo ({ mobile, message }) { GBLog.info(`BASIC: Talking '${message}' to a specific user (${mobile}) (TALK TO). `); await this.min.conversationalService.sendMarkdownToMobile(this.min, null, mobile, message); } /** * Sends a SMS message to the mobile number specified. - * + * * @example SEND SMS TO "+199988887777", "Message text here" - * + * */ - public async sendSmsTo({mobile, message}) { + public async sendSmsTo ({ mobile, message }) { GBLog.info(`BASIC: SEND SMS TO '${mobile}', message '${message}'.`); await this.min.conversationalService.sendSms(this.min, mobile, message); } @@ -453,21 +430,20 @@ export class SystemKeywords { /** * 1. Defines a cell value in the tabular file. * 2. Defines an element text on HTML page. - * + * * @example SET "file.xlsx", "A2", 4500 - * + * * @example SET page, "elementHTMLSelector", "text" - * + * */ - public async set({file, address, value}): Promise { - + public async set ({ file, address, value }): Promise { // Handles calls for HTML stuff if (file._javascriptEnabled) { const page = file; GBLog.info(`BASIC: Web automation setting ${page}' to '${value}' (SET). `); - await this.wa.setElementText({page, selector: address, text: value}); - + await this.wa.setElementText({ page, selector: address, text: value }); + return; } @@ -475,34 +451,34 @@ export class SystemKeywords { GBLog.info(`BASIC: Defining '${address}' in '${file}' to '${value}' (SET). `); - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const botId = this.min.instance.botId; const path = `/${botId}.gbai/${botId}.gbdata`; - address = address.indexOf(':') !== -1 ? address : address + ":" + address; + address = address.indexOf(':') !== -1 ? address : address + ':' + address; let document = await this.internalGetDocument(client, baseUrl, path, file); let body = { values: [[]] }; body.values[0][0] = value; - let sheets = await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`) - .get(); + let sheets = await client.api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`).get(); await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets('${sheets.value[0].name}')/range(address='${address}')`) + .api( + `${baseUrl}/drive/items/${document.id}/workbook/worksheets('${ + sheets.value[0].name + }')/range(address='${address}')` + ) .patch(body); } /** * Retrives a document from the drive, given a path and filename. */ - private async internalGetDocument(client: any, baseUrl: any, path: string, file: string) { - let res = await client - .api(`${baseUrl}/drive/root:${path}:/children`) - .get(); + private async internalGetDocument (client: any, baseUrl: any, path: string, file: string) { + let res = await client.api(`${baseUrl}/drive/root:${path}:/children`).get(); let documents = res.value.filter(m => { return m.name.toLowerCase() === file.toLowerCase(); @@ -517,14 +493,13 @@ export class SystemKeywords { /** * Saves the content of variable into the file in .gbdata default folder. - * + * * @exaple SAVE variable as "my.txt" - * + * */ - public async saveFile({file, data}): Promise { - + public async saveFile ({ file, data }): Promise { GBLog.info(`BASIC: Saving '${file}' (SAVE file).`); - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const botId = this.min.instance.botId; const path = `/${botId}.gbai/${botId}.gbdata`; @@ -535,15 +510,11 @@ export class SystemKeywords { } try { - await client - .api(`${baseUrl}/drive/root:/${path}/${file}:/content`) - .put(data); - + await client.api(`${baseUrl}/drive/root:/${path}/${file}:/content`).put(data); } catch (error) { - - if (error.code === "itemNotFound") { + if (error.code === 'itemNotFound') { GBLog.info(`BASIC: CONVERT source file not found: ${file}.`); - } else if (error.code === "nameAlreadyExists") { + } else if (error.code === 'nameAlreadyExists') { GBLog.info(`BASIC: CONVERT destination file already exists: ${file}.`); } throw error; @@ -552,25 +523,27 @@ export class SystemKeywords { /** * Saves the content of several variables to a new row in a tabular file. - * + * * @exaple SAVE "customers.xlsx", name, email, phone, address, city, state, country - * + * */ - public async save({args}): Promise { + public async save ({ args }): Promise { const file = args[0]; args.shift(); GBLog.info(`BASIC: Saving '${file}' (SAVE). Args: ${args.join(',')}.`); - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const botId = this.min.instance.botId; const path = `/${botId}.gbai/${botId}.gbdata`; let document = await this.internalGetDocument(client, baseUrl, path, file); - let sheets = await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`) - .get(); + let sheets = await client.api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`).get(); await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets('${sheets.value[0].name}')/range(address='A2:DX2')/insert`) + .api( + `${baseUrl}/drive/items/${document.id}/workbook/worksheets('${ + sheets.value[0].name + }')/range(address='A2:DX2')/insert` + ) .post({}); if (args.length > 128) { @@ -589,26 +562,33 @@ export class SystemKeywords { } await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets('${sheets.value[0].name}')/range(address='${address}')`) + .api( + `${baseUrl}/drive/items/${document.id}/workbook/worksheets('${ + sheets.value[0].name + }')/range(address='${address}')` + ) .patch(body); } /** * Retrives the content of a cell in a tabular file. - * + * * @example value = GET "file.xlsx", "A2" - * + * */ - public async get({file, addressOrHeaders, httpUsername, httpPs, qs, streaming}): Promise { - + public async get ({ file, addressOrHeaders, httpUsername, httpPs, qs, streaming }): Promise { if (file.startsWith('http')) { - - return await this.getByHttp({url:file, headers: addressOrHeaders, username: httpUsername, - ps: httpPs, qs, streaming}); - } - else { + return await this.getByHttp({ + url: file, + headers: addressOrHeaders, + username: httpUsername, + ps: httpPs, + qs, + streaming + }); + } else { GBLog.info(`BASIC: GET '${addressOrHeaders}' in '${file}'.`); - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const botId = this.min.instance.botId; const path = `/${botId}.gbai/${botId}.gbdata`; @@ -616,12 +596,14 @@ export class SystemKeywords { // Creates workbook session that will be discarded. - let sheets = await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`) - .get(); + let sheets = await client.api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`).get(); let results = await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets('${sheets.value[0].name}')/range(address='${addressOrHeaders}')`) + .api( + `${baseUrl}/drive/items/${document.id}/workbook/worksheets('${ + sheets.value[0].name + }')/range(address='${addressOrHeaders}')` + ) .get(); let val = results.text[0][0]; @@ -630,7 +612,7 @@ export class SystemKeywords { } } - public isValidDate({dt}) { + public isValidDate ({ dt }) { const contentLocale = this.min.core.getParam( this.min.instance, 'Default Content Language', @@ -649,21 +631,22 @@ export class SystemKeywords { return !isNaN(date.valueOf()); } - public isValidNumber({number}) { - if (number === '') { return false } + public isValidNumber ({ number }) { + if (number === '') { + return false; + } return !isNaN(number); } - public isValidHour({value}) { + public isValidHour ({ value }) { return /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/.test(value); } - /** * Finds a value or multi-value results in a tabular file. - * - * @example - * + * + * @example + * * rows = FIND "file.xlsx", "A2=active", "A2 < 12/06/2010 15:00" * i = 1 * do while i < ubound(row) @@ -671,10 +654,10 @@ export class SystemKeywords { * send sms to "+" + row.mobile, "Hello " + row.name + "! " * loop * @see NPM package data-forge - * + * * // TODO: https://www.npmjs.com/package/parse-markdown-table */ - public async find({args}): Promise { + public async find ({ args }): Promise { const file = args[0]; args.shift(); GBLog.info(`BASIC: FIND running on ${file} and args: ${JSON.stringify(args)}...`); @@ -686,11 +669,10 @@ export class SystemKeywords { let maxLines; if (this.dk.user && this.dk.user.basicOptions && this.dk.user.basicOptions.maxLines) { - if (this.dk.user.basicOptions.maxLines.toString().toLowerCase() !== "default") { + if (this.dk.user.basicOptions.maxLines.toString().toLowerCase() !== 'default') { maxLines = Number.parseInt(this.dk.user.basicOptions.maxLines).valueOf(); } - } - else { + } else { maxLines = this.dk.maxLines; } @@ -705,7 +687,7 @@ export class SystemKeywords { // Transforms table - const resultH = await container.evaluate((originalSelector) => { + const resultH = await container.evaluate(originalSelector => { const rows = document.querySelectorAll(`${originalSelector} tr`); return Array.from(rows, row => { const columns = row.querySelectorAll('th'); @@ -713,7 +695,7 @@ export class SystemKeywords { }); }, originalSelector); - const result = await container.evaluate((originalSelector) => { + const result = await container.evaluate(originalSelector => { const rows = document.querySelectorAll(`${originalSelector} tr`); return Array.from(rows, row => { const columns = row.querySelectorAll('td'); @@ -731,10 +713,7 @@ export class SystemKeywords { for (let i = 1; i < result.length; i++) { rows[i] = result[i]; } - - } else if (file['cTag']) { - const gbaiName = `${this.min.botId}.gbai`; const localName = Path.join('work', gbaiName, 'cache', `csv${GBAdminService.getRndReadableIdentifier()}.csv`); const url = file['@microsoft.graph.downloadUrl']; @@ -747,53 +726,57 @@ export class SystemKeywords { rows = []; for (let i = 0; i < worksheet.rowCount; i++) { - const r = worksheet.getRow(i+1); + const r = worksheet.getRow(i + 1); let outRow = []; for (let j = 0; j < r.cellCount; j++) { - outRow.push(r.getCell(j+1).text); + outRow.push(r.getCell(j + 1).text); } if (i == 0) { header = outRow; - } - else { + } else { rows.push(outRow); } } - } else { + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); - - let document + let document; document = await this.internalGetDocument(client, baseUrl, path, file); // Creates workbook session that will be discarded. - let sheets = await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`) - .get(); + let sheets = await client.api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`).get(); results = await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets('${sheets.value[0].name}')/range(address='A1:CZ${maxLines}')`) + .api( + `${baseUrl}/drive/items/${document.id}/workbook/worksheets('${ + sheets.value[0].name + }')/range(address='A1:CZ${maxLines}')` + ) .get(); header = results.text[0]; rows = results.text; } - let getFilter = async (text) => { + let getFilter = async text => { let filter; const operators = [/\<\=/, /\>\=/, /\/, /\bnot in\b/, /\bin\b/, /\=/]; let done = false; await CollectionUtil.asyncForEach(operators, async op => { - var re = new RegExp(op, "gi"); + var re = new RegExp(op, 'gi'); const parts = text.split(re); if (parts.length === 2 && !done) { filter = { columnName: parts[0].trim(), - operator: op.toString().replace(/\\b/g, '').replace(/\//g, '').replace(/\\/g, '').replace(/\b/g, ''), + operator: op + .toString() + .replace(/\\b/g, '') + .replace(/\//g, '') + .replace(/\\/g, '') + .replace(/\b/g, ''), value: parts[1].trim() }; @@ -851,11 +834,11 @@ export class SystemKeywords { filters.push(filter); }); - // As BASIC uses arrays starting with 1 (one) as index, + // As BASIC uses arrays starting with 1 (one) as index, // a ghost element is added at 0 (zero) position. let table = []; - table.push({ 'gbarray': '0' }); + table.push({ gbarray: '0' }); let foundIndex = 1; // Fills the row variable. @@ -864,7 +847,6 @@ export class SystemKeywords { for (; foundIndex < rows.length; foundIndex++) { let filterAcceptCount = 0; await CollectionUtil.asyncForEach(filters, async filter => { - let result = rows[foundIndex][filter.columnIndex]; let wholeWord = true; if (this.dk.user && this.dk.user.basicOptions && this.dk.user.basicOptions.wholeWord) { @@ -879,9 +861,14 @@ export class SystemKeywords { if (result && result.toLowerCase().trim() === filter.value.toLowerCase().trim()) { filterAcceptCount++; } - } - else { - if (result && result.toLowerCase().trim().indexOf(filter.value.toLowerCase().trim()) > -1) { + } else { + if ( + result && + result + .toLowerCase() + .trim() + .indexOf(filter.value.toLowerCase().trim()) > -1 + ) { filterAcceptCount++; } } @@ -891,9 +878,14 @@ export class SystemKeywords { if (result && result.toLowerCase().trim() !== filter.value.toLowerCase().trim()) { filterAcceptCount++; } - } - else { - if (result && result.toLowerCase().trim().indexOf(filter.value.toLowerCase().trim()) === -1) { + } else { + if ( + result && + result + .toLowerCase() + .trim() + .indexOf(filter.value.toLowerCase().trim()) === -1 + ) { filterAcceptCount++; } } @@ -903,9 +895,14 @@ export class SystemKeywords { if (result && result.toLowerCase().trim() === filter.value.toLowerCase().trim()) { filterAcceptCount++; } - } - else { - if (result && result.toLowerCase().trim().indexOf(filter.value.toLowerCase().trim()) > -1) { + } else { + if ( + result && + result + .toLowerCase() + .trim() + .indexOf(filter.value.toLowerCase().trim()) > -1 + ) { filterAcceptCount++; } } @@ -956,25 +953,19 @@ export class SystemKeywords { if (resultDate) { switch (filter.operator) { case '=': - - if (resultDate.getTime() == filter.value.getTime()) - filterAcceptCount++; + if (resultDate.getTime() == filter.value.getTime()) filterAcceptCount++; break; case '<': - if (resultDate.getTime() < filter.value.getTime()) - filterAcceptCount++; + if (resultDate.getTime() < filter.value.getTime()) filterAcceptCount++; break; case '>': - if (resultDate.getTime() > filter.value.getTime()) - filterAcceptCount++; + if (resultDate.getTime() > filter.value.getTime()) filterAcceptCount++; break; case '<=': - if (resultDate.getTime() <= filter.value.getTime()) - filterAcceptCount++; + if (resultDate.getTime() <= filter.value.getTime()) filterAcceptCount++; break; case '>=': - if (resultDate.getTime() >= filter.value.getTime()) - filterAcceptCount++; + if (resultDate.getTime() >= filter.value.getTime()) filterAcceptCount++; break; } break; @@ -1000,7 +991,6 @@ export class SystemKeywords { row['line'] = foundIndex + 1; table.push(row); } - } if (table.length === 1) { @@ -1015,19 +1005,32 @@ export class SystemKeywords { } } - public static getDateFromLocaleString(date: any, contentLocale: any) { + public static getDateFromLocaleString (date: any, contentLocale: any) { let ret = null; let parts = /^([0-3]?[0-9]).([0-3]?[0-9]).((?:[0-9]{2})?[0-9]{2})\s*(10|11|12|0?[1-9]):([0-5][0-9])/gi.exec(date); if (parts && parts[5]) { - switch (contentLocale) { case 'pt': - ret = new Date(Number.parseInt(parts[3]), Number.parseInt(parts[2]) - 1, Number.parseInt(parts[1]), - Number.parseInt(parts[4]), Number.parseInt(parts[5]), 0, 0); + ret = new Date( + Number.parseInt(parts[3]), + Number.parseInt(parts[2]) - 1, + Number.parseInt(parts[1]), + Number.parseInt(parts[4]), + Number.parseInt(parts[5]), + 0, + 0 + ); break; case 'en': - ret = new Date(Number.parseInt(parts[3]), Number.parseInt(parts[1]) - 1, Number.parseInt(parts[2]), - Number.parseInt(parts[4]), Number.parseInt(parts[5]), 0, 0); + ret = new Date( + Number.parseInt(parts[3]), + Number.parseInt(parts[1]) - 1, + Number.parseInt(parts[2]), + Number.parseInt(parts[4]), + Number.parseInt(parts[5]), + 0, + 0 + ); break; } @@ -1036,13 +1039,28 @@ export class SystemKeywords { parts = /^([0-3]?[0-9]).([0-3]?[0-9]).((?:[0-9]{2})?[0-9]{2})$/gi.exec(date); if (parts && parts[3]) { - switch (contentLocale) { case 'pt': - ret = new Date(Number.parseInt(parts[3]), Number.parseInt(parts[2]) - 1, Number.parseInt(parts[1]), 0, 0, 0, 0); + ret = new Date( + Number.parseInt(parts[3]), + Number.parseInt(parts[2]) - 1, + Number.parseInt(parts[1]), + 0, + 0, + 0, + 0 + ); break; case 'en': - ret = new Date(Number.parseInt(parts[3]), Number.parseInt(parts[1]) - 1, Number.parseInt(parts[2]), 0, 0, 0, 0); + ret = new Date( + Number.parseInt(parts[3]), + Number.parseInt(parts[1]) - 1, + Number.parseInt(parts[2]), + 0, + 0, + 0, + 0 + ); break; } @@ -1057,9 +1075,8 @@ export class SystemKeywords { * @example folder = CREATE FOLDER "notes\01" * */ - public async createFolder({name}) { - - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + public async createFolder ({ name }) { + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const botId = this.min.instance.botId; let path = `/${botId}.gbai/${botId}.gbdrive`; @@ -1073,28 +1090,21 @@ export class SystemKeywords { // Creates each subfolder. await CollectionUtil.asyncForEach(parts, async item => { - // Calls drive API. const body = { - "name": item, - "folder": {}, - "@microsoft.graph.conflictBehavior": "fail" + name: item, + folder: {}, + '@microsoft.graph.conflictBehavior': 'fail' }; try { - lastFolder = await client - .api(`${baseUrl}/drive/root:/${path}:/children`) - .post(body); - + lastFolder = await client.api(`${baseUrl}/drive/root:/${path}:/children`).post(body); } catch (error) { - if (error.code !== "nameAlreadyExists") { + if (error.code !== 'nameAlreadyExists') { throw error; - } - else { - lastFolder = await client - .api(`${baseUrl}/drive/root:/${urlJoin(path, item)}`) - .get(); + } else { + lastFolder = await client.api(`${baseUrl}/drive/root:/${urlJoin(path, item)}`).get(); } } @@ -1107,47 +1117,43 @@ export class SystemKeywords { /** * Shares a folder from the drive to a e-mail recipient. - * + * * @example - * + * * folder = CREATE FOLDER "notes\10" * SHARE FOLDER folder, "nome@domain.com", "E-mail message" * */ - public async shareFolder({folder, email, message}) { - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + public async shareFolder ({ folder, email, message }) { + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const root = urlJoin(`/${this.min.botId}.gbai/${this.min.botId}.gbdrive`, folder); - const src = await client.api( - `${baseUrl}/drive/root:/${root}`) - .get(); + const src = await client.api(`${baseUrl}/drive/root:/${root}`).get(); const driveId = src.parentReference.driveId; const itemId = src.id; const body = { - "recipients": [{ "email": email }], - "message": message, - "requireSignIn": true, - "sendInvitation": true, - "roles": ["write"] + recipients: [{ email: email }], + message: message, + requireSignIn: true, + sendInvitation: true, + roles: ['write'] }; - await client - .api(`https://graph.microsoft.com/v1.0/drives/${driveId}/items/${itemId}/invite`) - .post(body); + await client.api(`https://graph.microsoft.com/v1.0/drives/${driveId}/items/${itemId}/invite`).post(body); } /** * Copies a drive file from a place to another . - * + * * @example - * + * * COPY "template.xlsx", "reports\" + customerName + "\final.xlsx" - * + * */ - public async copyFile({src, dest}) { + public async copyFile ({ src, dest }) { GBLog.info(`BASIC: BEGINING COPY '${src}' to '${dest}'`); - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const botId = this.min.instance.botId; // Normalizes all slashes. @@ -1167,35 +1173,26 @@ export class SystemKeywords { let folder; if (dest.indexOf('/') !== -1) { const pathOnly = Path.dirname(dest); - folder = await this.createFolder({name:pathOnly}); - } - else { - folder = await client.api( - `${baseUrl}/drive/root:/${root}`) - .get(); + folder = await this.createFolder({ name: pathOnly }); + } else { + folder = await client.api(`${baseUrl}/drive/root:/${root}`).get(); } // Performs the copy operation getting a reference // to the source and calling /copy on drive API. try { - const srcFile = await client.api( - `${baseUrl}/drive/root:/${srcPath}`) - .get(); + const srcFile = await client.api(`${baseUrl}/drive/root:/${srcPath}`).get(); const destFile = { - "parentReference": { driveId: folder.parentReference.driveId, id: folder.id }, - "name": `${Path.basename(dest)}` - } - - return await client.api( - `${baseUrl}/drive/items/${srcFile.id}/copy`) - .post(destFile); + parentReference: { driveId: folder.parentReference.driveId, id: folder.id }, + name: `${Path.basename(dest)}` + }; + return await client.api(`${baseUrl}/drive/items/${srcFile.id}/copy`).post(destFile); } catch (error) { - - if (error.code === "itemNotFound") { + if (error.code === 'itemNotFound') { GBLog.info(`BASIC: COPY source file not found: ${srcPath}.`); - } else if (error.code === "nameAlreadyExists") { + } else if (error.code === 'nameAlreadyExists') { GBLog.info(`BASIC: COPY destination file already exists: ${dstPath}.`); } throw error; @@ -1205,18 +1202,18 @@ export class SystemKeywords { /** * Converts a drive file from a place to another . - * - * Supported sources csv, doc, docx, odp, ods, odt, pot, potm, potx, pps, + * + * Supported sources csv, doc, docx, odp, ods, odt, pot, potm, potx, pps, * ppsx, ppsxm, ppt, pptm, pptx, rtf, xls, xlsx - * + * * @example - * + * * CONVERT "customers.xlsx" TO "reports\" + today + ".pdf" - * + * */ - public async convert({src, dest}) { + public async convert ({ src, dest }) { GBLog.info(`BASIC: CONVERT '${src}' to '${dest}'`); - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const botId = this.min.instance.botId; // Normalizes all slashes. @@ -1236,67 +1233,56 @@ export class SystemKeywords { let folder; if (dest.indexOf('/') !== -1) { const pathOnly = Path.dirname(dest); - folder = await this.createFolder({name:pathOnly}); - } - else { - folder = await client.api( - `${baseUrl}/drive/root:/${root}`) - .get(); + folder = await this.createFolder({ name: pathOnly }); + } else { + folder = await client.api(`${baseUrl}/drive/root:/${root}`).get(); } // Performs the conversion operation getting a reference // to the source and calling /content on drive API. try { + const res = await client.api(`${baseUrl}/drive/root:/${srcPath}:/content?format=pdf`).get(); - const res = await client - .api(`${baseUrl}/drive/root:/${srcPath}:/content?format=pdf`) - .get(); - - const streamToString = (stream) => { - const chunks = [] + const streamToString = stream => { + const chunks = []; return new Promise((resolve, reject) => { - stream.on('data', chunk => chunks.push(chunk)) - stream.on('error', reject) - stream.on('end', () => resolve(Buffer.concat(chunks))) - }) - } + stream.on('data', chunk => chunks.push(chunk)); + stream.on('error', reject); + stream.on('end', () => resolve(Buffer.concat(chunks))); + }); + }; const result = await streamToString(res); - await client - .api(`${baseUrl}/drive/root:/${dstPath}:/content`) - .put(result); - + await client.api(`${baseUrl}/drive/root:/${dstPath}:/content`).put(result); } catch (error) { - - if (error.code === "itemNotFound") { + if (error.code === 'itemNotFound') { GBLog.info(`BASIC: CONVERT source file not found: ${srcPath}.`); - } else if (error.code === "nameAlreadyExists") { + } else if (error.code === 'nameAlreadyExists') { GBLog.info(`BASIC: CONVERT destination file already exists: ${dstPath}.`); } throw error; } } - /** + /** * Generate a secure and unique password. - * + * * @example pass = PASSWORD - * + * */ - public generatePassword() { + public generatePassword () { return GBAdminService.getRndPassword(); } - /** * Calls any REST API by using GET HTTP method. - * + * * @example user = get "http://server/users/1" - * + * */ - public async getByHttp({url, headers, username, ps, qs, streaming}) { + public async getByHttp ({ url, headers, username, ps, qs, streaming }) { let options = { url: url }; if (headers) { options['headers'] = headers; @@ -1305,7 +1291,7 @@ export class SystemKeywords { options['auth'] = { user: username, pass: ps - } + }; } if (qs) { options['qs'] = qs; @@ -1317,9 +1303,7 @@ export class SystemKeywords { let result = await request.get(options); try { - return JSON.parse(result); - } catch (error) { GBLog.info(`[GET]: OK.`); @@ -1329,14 +1313,14 @@ export class SystemKeywords { /** * Calls any REST API by using POST HTTP method. - * - * @example - * + * + * @example + * * user = put "http://server/path", "data" * talk "The updated user area is" + user.area - * + * */ - public async putByHttp({url, data, headers}) { + public async putByHttp ({ url, data, headers }) { const options = { uri: url, json: data, @@ -1345,19 +1329,19 @@ export class SystemKeywords { let result = await request.put(options); GBLog.info(`[PUT]: ${url} (${data}): ${result}`); - return typeof (result) === 'object' ? result : JSON.parse(result); + return typeof result === 'object' ? result : JSON.parse(result); } /** * Calls any REST API by using POST HTTP method. - * - * @example - * + * + * @example + * * user = post "http://server/path", "data" * talk "The updated user area is" + user.area - * + * */ - public async postByHttp({url, data, headers}) { + public async postByHttp ({ url, data, headers }) { const options = { uri: url, json: data, @@ -1367,29 +1351,28 @@ export class SystemKeywords { let result = await request.post(options); GBLog.info(`[POST]: ${url} (${data}): ${result}`); - return result ? typeof (result) === 'object' ? result : JSON.parse(result) : true; + return result ? (typeof result === 'object' ? result : JSON.parse(result)) : true; } - public async numberOnly(text: string) { + public async numberOnly (text: string) { return text.replace(/\D/gi, ''); } /** - * - * Fills a .docx or .pptx with template data. - * - * doc = FILL "templates/template.docx", data - * - */ - public async fill({templateName, data}) { - + * + * Fills a .docx or .pptx with template data. + * + * doc = FILL "templates/template.docx", data + * + */ + public async fill ({ templateName, data }) { const botId = this.min.instance.botId; const gbaiName = `${botId}.gbai`; const path = `/${botId}.gbai/${botId}.gbdata`; // Downloads template from .gbdrive. - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); let template = await this.internalGetDocument(client, baseUrl, path, templateName); const url = template['@microsoft.graph.downloadUrl']; const localName = Path.join('work', gbaiName, 'cache', ``); @@ -1398,9 +1381,9 @@ export class SystemKeywords { // Loads the file as binary content. - const content = Fs.readFileSync(localName, "binary"); + const content = Fs.readFileSync(localName, 'binary'); const zip = new PizZip(content); - const doc = new Docxtemplater(zip, { paragraphLoop: true, linebreaks: true, }); + const doc = new Docxtemplater(zip, { paragraphLoop: true, linebreaks: true }); if (localName.endsWith('.pptx')) { doc.attachModule(pptxTemplaterModule); } @@ -1411,14 +1394,13 @@ export class SystemKeywords { // Returns the buffer to be used with SAVE AS for example. - const buf = doc.getZip().generate({ type: "nodebuffer", compression: "DEFLATE", }); + const buf = doc.getZip().generate({ type: 'nodebuffer', compression: 'DEFLATE' }); return buf; } - public screenCapture() { + public screenCapture () { // scrcpy - // function captureImage({ x, y, w, h }) { // const pic = robot.screen.capture(x, y, w, h) // const width = pic.byteWidth / pic.bytesPerPixel // pic.width is sometimes wrong! @@ -1441,38 +1423,35 @@ export class SystemKeywords { // } // let file = 'out.png'; // captureImage({ x: 60, y: 263, w: 250, h: 83 }).write(file) - - // const config = { // lang: "eng", // oem: 1, // psm: 3, // } - // tesseract.recognize(file, config).then(value => { // console.log(value); // }); } - private numberToLetters(num) { - let letters = '' + private numberToLetters (num) { + let letters = ''; while (num >= 0) { - letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[num % 26] + letters - num = Math.floor(num / 26) - 1 + letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[num % 26] + letters; + num = Math.floor(num / 26) - 1; } - return letters + return letters; } /** * Merges a multi-value with a tabular file using BY field as key. - * - * @example - * + * + * @example + * * data = FIND first.xlsx * MERGE "second.xlsx" WITH data BY customer_id * */ - public async merge({file, data, key1, key2}): Promise { + public async merge ({ file, data, key1, key2 }): Promise { GBLog.info(`BASIC: MERGE running on ${file} and key1: ${key1}, key2: ${key2}...`); const botId = this.min.instance.botId; @@ -1482,7 +1461,7 @@ export class SystemKeywords { let maxLines = 1000; if (this.dk.user && this.dk.user.basicOptions && this.dk.user.basicOptions.maxLines) { - if (this.dk.user.basicOptions.maxLines.toString().toLowerCase() !== "default") { + if (this.dk.user.basicOptions.maxLines.toString().toLowerCase() !== 'default') { maxLines = Number.parseInt(this.dk.user.basicOptions.maxLines).valueOf(); } } @@ -1491,29 +1470,31 @@ export class SystemKeywords { let results; let header, rows; - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); - let document + let document; document = await this.internalGetDocument(client, baseUrl, path, file); // Creates workbook session that will be discarded. - let sheets = await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`) - .get(); + let sheets = await client.api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets`).get(); results = await client - .api(`${baseUrl}/drive/items/${document.id}/workbook/worksheets('${sheets.value[0].name}')/range(address='A1:CZ${maxLines}')`) + .api( + `${baseUrl}/drive/items/${document.id}/workbook/worksheets('${ + sheets.value[0].name + }')/range(address='A1:CZ${maxLines}')` + ) .get(); header = results.text[0]; rows = results.text; - // As BASIC uses arrays starting with 1 (one) as index, + // As BASIC uses arrays starting with 1 (one) as index, // a ghost element is added at 0 (zero) position. let table = []; - table.push({ 'gbarray': '0' }); + table.push({ gbarray: '0' }); let foundIndex = 1; // Fills the row variable. @@ -1535,7 +1516,6 @@ export class SystemKeywords { table.push(row); } - let key1Index, key2Index; if (key1) { @@ -1546,12 +1526,12 @@ export class SystemKeywords { key2Index = _.invertBy(table, key2); } - let merges = 0, adds = 0; + let merges = 0, + adds = 0; // Scans all items in incoming data. for (let i = 1; i < data.length; i++) { - // Scans all sheet lines and compare keys. const row = data[i]; @@ -1567,27 +1547,24 @@ export class SystemKeywords { if (found) { let keys = Object.keys(row); for (let j = 0; j < keys.length; j++) { - const columnName = header[j]; const value = row[keys[j]]; const cell = `${this.numberToLetters(j)}${i + 1}`; const address = `${cell}:${cell}`; - if (value !== found[columnName]) { - await this.set({file, address, value}); + await this.set({ file, address, value }); merges++; } } - } - else { + } else { let args = [file]; let keys = Object.keys(row); for (let j = 0; j < keys.length; j++) { args.push(row[keys[j]]); } - await this.save({args}); + await this.save({ args }); adds++; } } @@ -1601,8 +1578,7 @@ export class SystemKeywords { } } - public async tweet({text}) { - + public async tweet ({ text }) { const consumer_key = this.min.core.getParam(this.min.instance, 'Twitter Consumer Key', null); const consumer_secret = this.min.core.getParam(this.min.instance, 'Twitter Consumer Key Secret', null); const access_token_key = this.min.core.getParam(this.min.instance, 'Twitter Access Token', null); diff --git a/packages/basic.gblib/services/TSCompiler.ts b/packages/basic.gblib/services/TSCompiler.ts index 34964260..f365237c 100644 --- a/packages/basic.gblib/services/TSCompiler.ts +++ b/packages/basic.gblib/services/TSCompiler.ts @@ -43,15 +43,15 @@ import * as ts from 'typescript'; * Wrapper for a TypeScript compiler. */ export class TSCompiler { - - private static shouldIgnoreError(diagnostic) { + private static shouldIgnoreError (diagnostic) { const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'); - if (message.indexOf('Cannot find name') >= 0 - || message.indexOf('Cannot find module') >= 0 - || message.indexOf('implicitly has an') >= 0 - || message.indexOf('Cannot invoke an') >= 0 - || message.indexOf('Cannot use imports, exports, or module') >= 0 + if ( + message.indexOf('Cannot find name') >= 0 || + message.indexOf('Cannot find module') >= 0 || + message.indexOf('implicitly has an') >= 0 || + message.indexOf('Cannot invoke an') >= 0 || + message.indexOf('Cannot use imports, exports, or module') >= 0 ) { return true; } @@ -59,7 +59,7 @@ export class TSCompiler { return false; } - public compile( + public compile ( fileNames: string[], options: ts.CompilerOptions = { noStrictGenericChecks: true, @@ -99,5 +99,4 @@ export class TSCompiler { return emitResult; } - } diff --git a/packages/basic.gblib/services/WebAutomationKeywords.ts b/packages/basic.gblib/services/WebAutomationKeywords.ts index 4fff8458..edd7067f 100644 --- a/packages/basic.gblib/services/WebAutomationKeywords.ts +++ b/packages/basic.gblib/services/WebAutomationKeywords.ts @@ -49,10 +49,9 @@ import url from 'url'; * Web Automation services of conversation to be called by BASIC. */ export class WebAutomationKeywords { - /** - * Reference to minimal bot instance. - */ + * Reference to minimal bot instance. + */ public min: GBMinInstance; /** @@ -107,16 +106,12 @@ export class WebAutomationKeywords { * When creating this keyword facade,a bot instance is * specified among the deployer service. */ - constructor(min: GBMinInstance, user, dk) { + constructor (min: GBMinInstance, user, dk) { this.min = min; this.user = user; this.dk = dk; - this.debugWeb = this.min.core.getParam( - this.min.instance, - 'Debug Web Automation', - false - ); + this.debugWeb = this.min.core.getParam(this.min.instance, 'Debug Web Automation', false); } /** @@ -124,14 +119,14 @@ export class WebAutomationKeywords { * * @example x = GET PAGE */ - public async getPage({ url, username, password }) { + public async getPage ({ url, username, password }) { GBLog.info(`BASIC: Web Automation GET PAGE ${url}.`); if (!this.browser) { this.browser = await createBrowser(null); } const page = (await this.browser.pages())[0]; if (username || password) { - await page.authenticate({ 'username': username, 'password': password }); + await page.authenticate({ username: username, password: password }); } await page.goto(url); @@ -142,7 +137,7 @@ export class WebAutomationKeywords { return handle; } - public getPageByHandle(hash) { + public getPageByHandle (hash) { return this.pageMap[hash]; } @@ -151,15 +146,14 @@ export class WebAutomationKeywords { * * @example GET page,"selector" */ - public async getBySelector({ handle, selector }) { + public async getBySelector ({ handle, selector }) { const page = this.getPageByHandle(handle); GBLog.info(`BASIC: Web Automation GET element: ${selector}.`); - await page.waitForSelector(selector) + await page.waitForSelector(selector); let elements = await page.$$(selector); if (elements && elements.length > 1) { return elements; - } - else { + } else { const el = elements[0]; el['originalSelector'] = selector; el['href'] = await page.evaluate(e => e.getAttribute('href'), el); @@ -175,10 +169,10 @@ export class WebAutomationKeywords { * * @example GET page,"frameSelector,"elementSelector" */ - public async getByFrame({ handle, frame, selector }) { + public async getByFrame ({ handle, frame, selector }) { const page = this.getPageByHandle(handle); GBLog.info(`BASIC: Web Automation GET element by frame: ${selector}.`); - await page.waitForSelector(frame) + await page.waitForSelector(frame); let frameHandle = await page.$(frame); const f = await frameHandle.contentFrame(); await f.waitForSelector(selector); @@ -193,9 +187,9 @@ export class WebAutomationKeywords { } /** - * Simulates a mouse hover an web page element. + * Simulates a mouse hover an web page element. */ - public async hover({ handle, selector }) { + public async hover ({ handle, selector }) { const page = this.getPageByHandle(handle); GBLog.info(`BASIC: Web Automation HOVER element: ${selector}.`); await this.getBySelector({ handle, selector: selector }); @@ -208,35 +202,33 @@ export class WebAutomationKeywords { * * @example CLICK page,"#idElement" */ - public async click({ handle, frameOrSelector, selector }) { + public async click ({ handle, frameOrSelector, selector }) { const page = this.getPageByHandle(handle); GBLog.info(`BASIC: Web Automation CLICK element: ${frameOrSelector}.`); if (selector) { - await page.waitForSelector(frameOrSelector) + await page.waitForSelector(frameOrSelector); let frameHandle = await page.$(frameOrSelector); const f = await frameHandle.contentFrame(); await f.waitForSelector(selector); await f.click(selector); - } - else { + } else { await page.waitForSelector(frameOrSelector); await page.click(frameOrSelector); } await this.debugStepWeb(page); } - private async debugStepWeb(page) { - + private async debugStepWeb (page) { let refresh = true; if (this.lastDebugWeb) { - refresh = (new Date().getTime() - this.lastDebugWeb.getTime()) > 5000; + refresh = new Date().getTime() - this.lastDebugWeb.getTime() > 5000; } if (this.debugWeb && refresh) { const mobile = this.min.core.getParam(this.min.instance, 'Bot Admin Number', null); const filename = page; if (mobile) { - await this.dk.sendFileTo({ mobile, filename, caption: "General Bots Debugger" }); + await this.dk.sendFileTo({ mobile, filename, caption: 'General Bots Debugger' }); } this.lastDebugWeb = new Date(); } @@ -247,42 +239,39 @@ export class WebAutomationKeywords { * * @example PRESS ENTER ON page */ - public async pressKey({ handle, char, frame }) { + public async pressKey ({ handle, char, frame }) { const page = this.getPageByHandle(handle); GBLog.info(`BASIC: Web Automation PRESS ${char} ON element: ${frame}.`); - if (char.toLowerCase() === "enter") { + if (char.toLowerCase() === 'enter') { char = '\n'; } if (frame) { - await page.waitForSelector(frame) + await page.waitForSelector(frame); let frameHandle = await page.$(frame); const f = await frameHandle.contentFrame(); await f.keyboard.press(char); - } - else { + } else { await page.keyboard.press(char); } } - public async linkByText({ handle, text, index }) { + public async linkByText ({ handle, text, index }) { const page = this.getPageByHandle(handle); GBLog.info(`BASIC: Web Automation CLICK LINK TEXT: ${text} ${index}.`); if (!index) { - index = 1 + index = 1; } const els = await page.$x(`//a[contains(.,'${text}')]`); await els[index - 1].click(); await this.debugStepWeb(page); } - - /** * Returns the screenshot of page or element * * @example file = SCREENSHOT page */ - public async screenshot({ handle, selector }) { + public async screenshot ({ handle, selector }) { const page = this.getPageByHandle(handle); GBLog.info(`BASIC: Web Automation SCREENSHOT ${selector}.`); @@ -291,24 +280,18 @@ export class WebAutomationKeywords { await page.screenshot({ path: localName }); - const url = urlJoin( - GBServer.globals.publicAddress, - this.min.botId, - 'cache', - Path.basename(localName) - ); + const url = urlJoin(GBServer.globals.publicAddress, this.min.botId, 'cache', Path.basename(localName)); GBLog.info(`BASIC: WebAutomation: Screenshot captured at ${url}.`); return url; } - /** * Types the text into the text field. * * @example SET page,"selector","text" */ - public async setElementText({ handle, selector, text }) { + public async setElementText ({ handle, selector, text }) { const page = this.getPageByHandle(handle); GBLog.info(`BASIC: Web Automation TYPE on ${selector}: ${text}.`); const e = await this.getBySelector({ handle, selector }); @@ -318,13 +301,12 @@ export class WebAutomationKeywords { await this.debugStepWeb(page); } - /** - * Performs the download to the .gbdrive Download folder. - * - * @example file = DOWNLOAD element, folder - */ - public async download({ handle, selector, folder }) { + * Performs the download to the .gbdrive Download folder. + * + * @example file = DOWNLOAD element, folder + */ + public async download ({ handle, selector, folder }) { const page = this.getPageByHandle(handle); const container = page; // TODO: element['_frame'] ? element['_frame'] : element['_page']; const element = await this.getBySelector({ handle, selector }); @@ -333,7 +315,7 @@ export class WebAutomationKeywords { const xRequest = await new Promise(resolve => { page.on('request', interceptedRequest => { - interceptedRequest.abort(); //stop intercepting requests + interceptedRequest.abort(); //stop intercepting requests resolve(interceptedRequest); }); }); @@ -344,7 +326,7 @@ export class WebAutomationKeywords { uri: xRequest['_url'], body: xRequest['_postData'], headers: xRequest['_headers'] - } + }; const cookies = await page.cookies(); options.headers.Cookie = cookies.map(ck => ck.name + '=' + ck.value).join(';'); @@ -355,11 +337,10 @@ export class WebAutomationKeywords { if (options.uri.indexOf('file://') != -1) { local = url.fileURLToPath(options.uri); filename = Path.basename(local); - } - else { - const getBasenameFormUrl = (urlStr) => { - const url = new URL(urlStr) - return Path.basename(url.pathname) + } else { + const getBasenameFormUrl = urlStr => { + const url = new URL(urlStr); + return Path.basename(url.pathname); }; filename = getBasenameFormUrl(options.uri); } @@ -370,7 +351,7 @@ export class WebAutomationKeywords { } else { result = await request.get(options); } - let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min); + let { baseUrl, client } = await GBDeployer.internalGetDriveClient(this.min); const botId = this.min.instance.botId; // Normalizes all slashes. @@ -391,14 +372,9 @@ export class WebAutomationKeywords { // to the source and calling /content on drive API. let file; try { - - file = await client - .api(`${baseUrl}/drive/root:/${dstPath}:/content`) - .put(result); - + file = await client.api(`${baseUrl}/drive/root:/${dstPath}:/content`).put(result); } catch (error) { - - if (error.code === "nameAlreadyExists") { + if (error.code === 'nameAlreadyExists') { GBLog.info(`BASIC: DOWNLOAD destination file already exists: ${dstPath}.`); } throw error; @@ -406,6 +382,4 @@ export class WebAutomationKeywords { return file; } - - -} \ No newline at end of file +} diff --git a/packages/basic.gblib/services/vbscript-to-typescript.ts b/packages/basic.gblib/services/vbscript-to-typescript.ts index 1aa6bdba..724eb36e 100644 --- a/packages/basic.gblib/services/vbscript-to-typescript.ts +++ b/packages/basic.gblib/services/vbscript-to-typescript.ts @@ -1,158 +1,156 @@ // Source: https://github.com/uweg/vbscript-to-typescript -"use strict"; +'use strict'; import fs_1 from 'fs'; import path from 'path'; -export function convertFile(file) { - var extension = path.extname(file); - var withoutExtension = file.substr(0, file.length - extension.length); - var targetFile = withoutExtension + ".ts"; - var baseName = path.basename(file, extension); - var content = fs_1.readFileSync(file, 'utf8'); - var result = convert(content, baseName); - console.log("Writing to \"" + targetFile + "\"..."); - fs_1.writeFileSync(targetFile, result); +export function convertFile (file) { + var extension = path.extname(file); + var withoutExtension = file.substr(0, file.length - extension.length); + var targetFile = withoutExtension + '.ts'; + var baseName = path.basename(file, extension); + var content = fs_1.readFileSync(file, 'utf8'); + var result = convert(content, baseName); + console.log('Writing to "' + targetFile + '"...'); + fs_1.writeFileSync(targetFile, result); } -export function convert(input, name) { - var result = convertImports(input, name); - return result; +export function convert (input, name) { + var result = convertImports(input, name); + return result; } -function convertImports(input, name) { - var items = []; - var result = input.replace(//gi, function (input, group1, group2) { - var path = group1 || './'; - var file = "" + path + group2; - items.push({ name: group2, path: file }); - return "<%\n" + group2 + "();\n%>"; - }); - result = convertCode(result); - result = convertExpressions(result); - result = convertStrings(result); +function convertImports (input, name) { + var items = []; + var result = input.replace(//gi, function (input, group1, group2) { + var path = group1 || './'; + var file = '' + path + group2; + items.push({ name: group2, path: file }); + return '<%\n' + group2 + '();\n%>'; + }); + result = convertCode(result); + result = convertExpressions(result); + result = convertStrings(result); - for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { - var item = items_1[_i]; - result = "import {" + item.name + "} from \"" + item.path + "\"\n" + result; + for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { + var item = items_1[_i]; + result = 'import {' + item.name + '} from "' + item.path + '"\n' + result; + } + return result; +} + +function convertCode (input) { + var result = input.replace(/<%([^=][\s\S]*?)%>/gi, function (input, group1) { + var code = group1; + code = convertComments(code); + code = convertIfStatements(code); + code = convertSwitchStatements(code); + code = convertFunctions(code); + code = convertForStatements(code); + code = convertLoops(code); + code = convertPRec(code); + code = convertPLan(code); + return '<%' + code + '%>'; + }); + return result; +} + +function convertExpressions (input) { + var result = input.replace(/<%=([\s\S]*?)%>/gi, function (input, group1) { + var content = convertPRec(group1); + content = convertPLan(content); + return '${' + content + '}'; + }); + return result; +} + +function convertStrings (input) { + var result = input.replace(/%>([\s\S]+?)<%/gi, '\nResponse.Write(`$1`);\n'); + // Entire document is a string + if (result.indexOf('<%') === -1) { + result = 'Response.Write(`' + result + '`);'; + } + // Start of the document is a string + var firstIndex = result.indexOf('<%'); + if (firstIndex > 0) { + result = 'Response.Write(`' + result.substr(0, firstIndex) + '`);\n' + result.substring(firstIndex + 2); + } + result = result.replace(/%>$/, ''); + // End of the document is a string + var lastIndex = result.lastIndexOf('%>'); + if (lastIndex > -1 && lastIndex < result.length - 2) { + result = result.substr(0, lastIndex) + '\nResponse.Write(`' + result.substr(lastIndex + 3) + '`);'; + } + result = result.replace(/^<%/, ''); + return result; +} + +function convertComments (input) { + var result = ''; + var splitted = input.split(/(".*")/gim); + for (var _i = 0, splitted_1 = splitted; _i < splitted_1.length; _i++) { + var part = splitted_1[_i]; + if (part.indexOf('"') === 0) { + result += part; + } else { + result += part.replace(/'/gi, '//'); } - return result; + } + return result; } -function convertCode(input) { - var result = input.replace(/<%([^=][\s\S]*?)%>/gi, function (input, group1) { - var code = group1; - code = convertComments(code); - code = convertIfStatements(code); - code = convertSwitchStatements(code); - code = convertFunctions(code); - code = convertForStatements(code); - code = convertLoops(code); - code = convertPRec(code); - code = convertPLan(code); - return "<%" + code + "%>"; - }); - return result; +function convertIfStatements (input) { + var result = input.replace(/if +(.*?) +then/gi, function (input, group1) { + var condition = convertConditions(group1); + return '\nif (' + condition + ') {\n'; + }); + result = result.replace(/end if/gi, '\n}\n'); + result = result.replace(/else(?!{)/gi, '\n}\nelse {\n'); + return result; } -function convertExpressions(input) { - var result = input.replace(/<%=([\s\S]*?)%>/gi, function (input, group1) { - var content = convertPRec(group1); - content = convertPLan(content); - return "${" + content + "}"; - }); - return result; +function convertSwitchStatements (input) { + var result = input.replace(/select case +(.*)/gi, '\nswitch ($1) {\n'); + result = result.replace(/end select/gi, '\n}\n'); + return result; } -function convertStrings(input) { - var result = input.replace(/%>([\s\S]+?)<%/gi, "\nResponse.Write(`$1`);\n"); - // Entire document is a string - if (result.indexOf("<%") === -1) { - result = "Response.Write(`" + result + "`);"; - } - // Start of the document is a string - var firstIndex = result.indexOf("<%"); - if (firstIndex > 0) { - result = "Response.Write(`" + result.substr(0, firstIndex) + "`);\n" + result.substring(firstIndex + 2); - } - result = result.replace(/%>$/, ""); - // End of the document is a string - var lastIndex = result.lastIndexOf("%>"); - if (lastIndex > -1 && lastIndex < result.length - 2) { - result = result.substr(0, lastIndex) + "\nResponse.Write(`" + result.substr(lastIndex + 3) + "`);"; - } - result = result.replace(/^<%/, ""); - return result; +function convertFunctions (input) { + var result = input.replace(/function +(.*)\((.*)\)/gi, '\n$1 = ($2) => {\n'); + result = result.replace(/end function/gi, '\n}\n'); + return result; } -function convertComments(input) { - var result = ''; - var splitted = input.split(/(".*")/gim); - for (var _i = 0, splitted_1 = splitted; _i < splitted_1.length; _i++) { - var part = splitted_1[_i]; - if (part.indexOf("\"") === 0) { - result += part; - } - else { - result += part.replace(/'/gi, "//"); - } - } - return result; +function convertForStatements (input) { + var result = input.replace(/for +(.*to.*)/gi, '\nfor ($1) {\n'); + result = result.replace(/^ *next *$/gim, '}\n'); + return result; } -function convertIfStatements(input) { - var result = input.replace(/if +(.*?) +then/gi, function (input, group1) { - var condition = convertConditions(group1); - return "\nif (" + condition + ") {\n"; - }); - result = result.replace(/end if/gi, "\n}\n"); - result = result.replace(/else(?!{)/gi, "\n}\nelse {\n"); - return result; +function convertConditions (input) { + var result = input.replace(/ +and +/gi, ' && '); + result = result.replace(/ +or +/gi, ' || '); + result = result.replace(/ +<> +/gi, ' !== '); + result = result.replace(/ += +/gi, ' === '); + return result; } -function convertSwitchStatements(input) { - var result = input.replace(/select case +(.*)/gi, "\nswitch ($1) {\n"); - result = result.replace(/end select/gi, "\n}\n"); - return result; +function convertLoops (input) { + var result = input.replace(/do while +(.*)/gi, function (input, group1) { + var condition = convertConditions(group1); + return '\nwhile (' + condition + ') {\n'; + }); + + result = result.replace(/^ *loop *$/gim, '}\n'); + return result; } -function convertFunctions(input) { - var result = input.replace(/function +(.*)\((.*)\)/gi, "\n$1 = ($2) => {\n"); - result = result.replace(/end function/gi, "\n}\n"); - return result; +function convertPRec (input) { + var result = input.replace(/(p_rec\("\S+?"\))/gi, '$1.Value'); + return result; } -function convertForStatements(input) { - var result = input.replace(/for +(.*to.*)/gi, "\nfor ($1) {\n"); - result = result.replace(/^ *next *$/gim, "}\n"); - return result; +function convertPLan (input) { + var result = input.replace(/(l_\S+?)\(p_lan\)/gi, '$1[p_lan]'); + return result; } - -function convertConditions(input) { - var result = input.replace(/ +and +/gi, " && "); - result = result.replace(/ +or +/gi, " || "); - result = result.replace(/ +<> +/gi, " !== "); - result = result.replace(/ += +/gi, " === "); - return result; -} - -function convertLoops(input) { - var result = input.replace(/do while +(.*)/gi, function (input, group1) { - var condition = convertConditions(group1); - return "\nwhile (" + condition + ") {\n"; - }); - - result = result.replace(/^ *loop *$/gim, "}\n"); - return result; -} - -function convertPRec(input) { - var result = input.replace(/(p_rec\("\S+?"\))/gi, "$1.Value"); - return result; -} - -function convertPLan(input) { - var result = input.replace(/(l_\S+?)\(p_lan\)/gi, "$1[p_lan]"); - return result; -} - diff --git a/packages/basic.gblib/services/vm2-process/index.ts b/packages/basic.gblib/services/vm2-process/index.ts index 16ff9e85..cb2000be 100644 --- a/packages/basic.gblib/services/vm2-process/index.ts +++ b/packages/basic.gblib/services/vm2-process/index.ts @@ -63,7 +63,6 @@ export const createVm2Pool = ({ min, max, ...limits }) => { { cwd: limits.cwd, shell: false } ); - childProcess.stdout.on('data', data => { childProcess['socket'] = childProcess['socket'] || data.toString().trim(); }); @@ -75,16 +74,16 @@ export const createVm2Pool = ({ min, max, ...limits }) => { kill(process); GBServer.globals.debuggers[limits.botId].state = 0; GBServer.globals.debuggers[limits.botId].stateInfo = stderrCache; - } - else if (stderrCache.includes('FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory')) { + } else if ( + stderrCache.includes('FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory') + ) { limitError = 'code execution exceeed allowed memory'; kill(process); GBServer.globals.debuggers[limits.botId].state = 0; GBServer.globals.debuggers[limits.botId].stateInfo = 'Fail'; - } - else if (stderrCache.includes('Debugger attached.')) { + } else if (stderrCache.includes('Debugger attached.')) { GBLog.info(`BASIC: General Bots Debugger attached to Node .gbdialog process for ${limits.botId}.`); - } + } }); let socket = null; @@ -92,7 +91,6 @@ export const createVm2Pool = ({ min, max, ...limits }) => { GBServer.globals.debuggers[limits.botId].childProcess = ref; - // Only attach if called by debugger/run. if (GBServer.globals.debuggers[limits.botId]) { @@ -154,7 +152,6 @@ export const createVm2Pool = ({ min, max, ...limits }) => { await client.Runtime.runIfWaitingForDebugger(); await client.Debugger.enable(); await client.Runtime.enable(); - resolve(1); } catch (err) { @@ -214,4 +211,3 @@ export const createVm2Pool = ({ min, max, ...limits }) => { run }; }; - diff --git a/packages/basic.gblib/services/vm2-process/vm2ProcessRunner.ts b/packages/basic.gblib/services/vm2-process/vm2ProcessRunner.ts index 1a41cf31..f1cbc3c8 100644 --- a/packages/basic.gblib/services/vm2-process/vm2ProcessRunner.ts +++ b/packages/basic.gblib/services/vm2-process/vm2ProcessRunner.ts @@ -9,20 +9,20 @@ const evaluate = async (script, scope) => { console: 'inherit', wrapper: 'none', require: { - builtin:['stream', 'http' , 'https', 'url', 'buffer', 'zlib', 'isomorphic-fetch', 'punycode', 'encoding'], + builtin: ['stream', 'http', 'https', 'url', 'buffer', 'zlib', 'isomorphic-fetch', 'punycode', 'encoding'], root: ['./'], external: true, context: 'sandbox' - }, + } }); - + const s = new VMScript(script, scope); return await vm.run(script, scope); }; const socketName = crypto1.randomBytes(20).toString('hex'); -const server = net1.createServer((socket) => { +const server = net1.createServer(socket => { const buffer = []; const sync = async () => { @@ -39,7 +39,7 @@ const server = net1.createServer((socket) => { socket.write(JSON.stringify({ result }) + '\n'); socket.end(); } catch (error) { - console.log(`BASIC: RUNTIME: ${error.message}, ${error.stack}`) + console.log(`BASIC: RUNTIME: ${error.message}, ${error.stack}`); socket.write(JSON.stringify({ error: error.message }) + '\n'); socket.end(); } diff --git a/packages/basic.gblib/strings.ts b/packages/basic.gblib/strings.ts index 1d775902..d1c10f80 100644 --- a/packages/basic.gblib/strings.ts +++ b/packages/basic.gblib/strings.ts @@ -1,4 +1,3 @@ - export const Messages = { 'en-US': { affirmative_sentences: /^(\bsim\b|\bs\b|\bpositivo\b|\bafirmativo\b|\bclaro\b|\bevidente\b|\bsem dúvida\b|\bconfirmo\b|\bconfirmar\b|\bconfirmado\b|\buhum\b|\bsi\b|\by\b|\byes\b|\bsure\b)/i, diff --git a/packages/console.gblib/index.ts b/packages/console.gblib/index.ts index 9a2daf8a..8d6e50c0 100644 --- a/packages/console.gblib/index.ts +++ b/packages/console.gblib/index.ts @@ -46,25 +46,25 @@ import { ConsoleDirectLine } from './services/ConsoleDirectLine.js'; export class GBConsolePackage implements IGBPackage { public sysPackages: IGBPackage[]; public channel: ConsoleDirectLine; - public async getDialogs(min: GBMinInstance) { + public async getDialogs (min: GBMinInstance) { GBLog.verbose(`getDialogs called.`); } - public async loadPackage(core: IGBCoreService, sequelize: Sequelize): Promise { + public async loadPackage (core: IGBCoreService, sequelize: Sequelize): Promise { GBLog.verbose(`loadPackage called.`); } - public async unloadPackage(core: IGBCoreService): Promise { + public async unloadPackage (core: IGBCoreService): Promise { GBLog.verbose(`unloadPackage called.`); } - public async unloadBot(min: GBMinInstance): Promise { + public async unloadBot (min: GBMinInstance): Promise { GBLog.verbose(`unloadBot called.`); } - public async onNewSession(min: GBMinInstance, step: GBDialogStep): Promise { + public async onNewSession (min: GBMinInstance, step: GBDialogStep): Promise { GBLog.verbose(`onNewSession called.`); } - public async onExchangeData(min: GBMinInstance, kind: string, data: any) { + public async onExchangeData (min: GBMinInstance, kind: string, data: any) { GBLog.verbose(`onExchangeData called.`); } - public async loadBot(min: GBMinInstance): Promise { + public async loadBot (min: GBMinInstance): Promise { this.channel = new ConsoleDirectLine(min.instance.webchatKey); } } diff --git a/packages/console.gblib/services/ConsoleDirectLine.ts b/packages/console.gblib/services/ConsoleDirectLine.ts index fb57991a..f4cbbb28 100644 --- a/packages/console.gblib/services/ConsoleDirectLine.ts +++ b/packages/console.gblib/services/ConsoleDirectLine.ts @@ -11,7 +11,7 @@ export class ConsoleDirectLine extends GBService { public directLineClientName: string = 'DirectLineClient'; public directLineSpecUrl: string = 'https://docs.botframework.com/en-us/restapi/directline3/swagger.json'; - constructor(directLineSecret: string) { + constructor (directLineSecret: string) { super(); this.directLineSecret = directLineSecret; @@ -57,7 +57,7 @@ export class ConsoleDirectLine extends GBService { }); } - public sendMessagesFromConsole(client, conversationId) { + public sendMessagesFromConsole (client, conversationId) { const _this_ = this; process.stdin.resume(); const stdin = process.stdin; @@ -92,7 +92,7 @@ export class ConsoleDirectLine extends GBService { }); } - public pollMessages(client, conversationId) { + public pollMessages (client, conversationId) { const _this_ = this; GBLog.info(`Starting polling message for conversationId: ${conversationId}`); let watermark; @@ -112,7 +112,7 @@ export class ConsoleDirectLine extends GBService { } // tslint:disable:no-unsafe-any - public printMessages(activities, directLineClientName) { + public printMessages (activities, directLineClientName) { if (activities && activities.length) { // ignore own messages activities = activities.filter(m => { @@ -133,7 +133,7 @@ export class ConsoleDirectLine extends GBService { // tslint:enable:no-unsafe-any // tslint:disable:no-unsafe-any - public printMessage(activity) { + public printMessage (activity) { if (activity.text) { GBLog.info(activity.text); } @@ -160,7 +160,7 @@ export class ConsoleDirectLine extends GBService { // tslint:enable:no-unsafe-any // tslint:disable:no-unsafe-any - public renderHeroCard(attachment) { + public renderHeroCard (attachment) { const width = 70; const contentLine = content => { return `${' '.repeat((width - content.length) / 2)}content${' '.repeat((width - content.length) / 2)}`; diff --git a/packages/core.gbapp/dialogs/BroadcastDialog.ts b/packages/core.gbapp/dialogs/BroadcastDialog.ts index e1feb4b3..600af299 100644 --- a/packages/core.gbapp/dialogs/BroadcastDialog.ts +++ b/packages/core.gbapp/dialogs/BroadcastDialog.ts @@ -53,14 +53,13 @@ export class BroadcastDialog extends IGBDialog { * @param bot The bot adapter. * @param min The minimal bot instance data. */ - public static setup(bot: BotAdapter, min: GBMinInstance) { + public static setup (bot: BotAdapter, min: GBMinInstance) { min.dialogs.add( new WaterfallDialog('/gb-broadcast', [ async step => { if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { return await step.beginDialog('/auth'); - } - else{ + } else { return await step.next(step.options); } }, diff --git a/packages/core.gbapp/dialogs/LanguageDialog.ts b/packages/core.gbapp/dialogs/LanguageDialog.ts index 74192921..84fbd8f1 100644 --- a/packages/core.gbapp/dialogs/LanguageDialog.ts +++ b/packages/core.gbapp/dialogs/LanguageDialog.ts @@ -54,63 +54,63 @@ export class LanguageDialog extends IGBDialog { * @param bot The bot adapter. * @param min The minimal bot instance data. */ - public static setup(bot: BotAdapter, min: GBMinInstance) { - min.dialogs.add(new WaterfallDialog('/language', [ - async step => { - if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { - return await step.beginDialog('/auth'); - } - else{ - return await step.next(step.options); - } - }, - - async step => { - const locale = step.context.activity.locale; - - return await min.conversationalService.prompt(min, step, - Messages[locale].which_language); - }, - async step => { - - const locale = step.context.activity.locale; - const user = await min.userProfile.get(step.context, {}); - - const list = [ - { name: 'english', code: 'en' }, - { name: 'inglês', code: 'en' }, - { name: 'portuguese', code: 'pt' }, - { name: 'português', code: 'pt' }, - { name: 'français', code: 'fr' }, - { name: 'francês', code: 'fr' }, - { name: 'french', code: 'fr' }, - { name: 'português', code: 'pt' }, - { name: 'spanish', code: 'es' }, - { name: 'espanõl', code: 'es' }, - { name: 'espanhol', code: 'es' }, - { name: 'german', code: 'de' }, - { name: 'deutsch', code: 'de' }, - { name: 'alemão', code: 'de' } - ]; - let translatorLocale = null; - const text = step.context.activity['originalText']; - - await CollectionUtil.asyncForEach(list, async item => { - if (GBConversationalService.kmpSearch(text.toLowerCase(), item.name.toLowerCase()) != -1 || - GBConversationalService.kmpSearch(text.toLowerCase(), item.code.toLowerCase()) != -1) { - translatorLocale = item.code; + public static setup (bot: BotAdapter, min: GBMinInstance) { + min.dialogs.add( + new WaterfallDialog('/language', [ + async step => { + if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { + return await step.beginDialog('/auth'); + } else { + return await step.next(step.options); } - }); + }, - let sec = new SecService(); - user.systemUser = await sec.updateUserLocale(user.systemUser.userId, translatorLocale); + async step => { + const locale = step.context.activity.locale; - await min.userProfile.set(step.context, user); - await min.conversationalService.sendText(min, step, - Messages[locale].language_chosen); + return await min.conversationalService.prompt(min, step, Messages[locale].which_language); + }, + async step => { + const locale = step.context.activity.locale; + const user = await min.userProfile.get(step.context, {}); - await step.replaceDialog('/ask', { firstTime: true }); - } - ])); + const list = [ + { name: 'english', code: 'en' }, + { name: 'inglês', code: 'en' }, + { name: 'portuguese', code: 'pt' }, + { name: 'português', code: 'pt' }, + { name: 'français', code: 'fr' }, + { name: 'francês', code: 'fr' }, + { name: 'french', code: 'fr' }, + { name: 'português', code: 'pt' }, + { name: 'spanish', code: 'es' }, + { name: 'espanõl', code: 'es' }, + { name: 'espanhol', code: 'es' }, + { name: 'german', code: 'de' }, + { name: 'deutsch', code: 'de' }, + { name: 'alemão', code: 'de' } + ]; + let translatorLocale = null; + const text = step.context.activity['originalText']; + + await CollectionUtil.asyncForEach(list, async item => { + if ( + GBConversationalService.kmpSearch(text.toLowerCase(), item.name.toLowerCase()) != -1 || + GBConversationalService.kmpSearch(text.toLowerCase(), item.code.toLowerCase()) != -1 + ) { + translatorLocale = item.code; + } + }); + + let sec = new SecService(); + user.systemUser = await sec.updateUserLocale(user.systemUser.userId, translatorLocale); + + await min.userProfile.set(step.context, user); + await min.conversationalService.sendText(min, step, Messages[locale].language_chosen); + + await step.replaceDialog('/ask', { firstTime: true }); + } + ]) + ); } } diff --git a/packages/core.gbapp/dialogs/SwitchBot.ts b/packages/core.gbapp/dialogs/SwitchBot.ts index b4cf29c6..d783dd32 100644 --- a/packages/core.gbapp/dialogs/SwitchBot.ts +++ b/packages/core.gbapp/dialogs/SwitchBot.ts @@ -53,32 +53,33 @@ export class SwitchBotDialog extends IGBDialog { * @param bot The bot adapter. * @param min The minimal bot instance data. */ - public static setup(bot: BotAdapter, min: GBMinInstance) { - min.dialogs.add(new WaterfallDialog('/bot', [ - async step => { - if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { - return await step.beginDialog('/auth'); + public static setup (bot: BotAdapter, min: GBMinInstance) { + min.dialogs.add( + new WaterfallDialog('/bot', [ + async step => { + if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { + return await step.beginDialog('/auth'); + } else { + return await step.next(step.options); + } + }, + + async step => { + const locale = step.context.activity.locale; + + return await min.conversationalService.prompt(min, step, 'Qual seria o código de ativação?'); + }, + async step => { + const sec = new SecService(); + const from = step.context.activity.from.id; + const botId = step.result; + const instance = await min.core.loadInstanceByBotId(botId); + await sec.updateUserInstance(from, instance.instanceId); + await min.conversationalService.sendText(min, step, `Opa, vamos lá!`); + + return await step.next(); } - else{ - return await step.next(step.options); - } - }, - - async step => { - const locale = step.context.activity.locale; - - return await min.conversationalService.prompt (min, step, 'Qual seria o código de ativação?'); - }, - async step => { - const sec = new SecService(); - const from = step.context.activity.from.id; - const botId = step.result; - const instance = await min.core.loadInstanceByBotId(botId); - await sec.updateUserInstance(from, instance.instanceId); - await min.conversationalService.sendText(min, step, `Opa, vamos lá!`); - - return await step.next(); - } - ])); + ]) + ); } } diff --git a/packages/core.gbapp/dialogs/WelcomeDialog.ts b/packages/core.gbapp/dialogs/WelcomeDialog.ts index ee5080df..6f07b2ba 100644 --- a/packages/core.gbapp/dialogs/WelcomeDialog.ts +++ b/packages/core.gbapp/dialogs/WelcomeDialog.ts @@ -53,57 +53,61 @@ export class WelcomeDialog extends IGBDialog { * @param bot The bot adapter. * @param min The minimal bot instance data. */ - public static setup(bot: BotAdapter, min: GBMinInstance) { + public static setup (bot: BotAdapter, min: GBMinInstance) { + min.dialogs.add( + new WaterfallDialog('/', [ + async step => { + if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { + return await step.beginDialog('/auth'); + } else { + return await step.next(step.options); + } + }, + async step => { + if ( + GBServer.globals.entryPointDialog !== null && + min.instance.botId === process.env.BOT_ID && + step.context.activity.channelId === 'webchat' + ) { + return step.replaceDialog(GBServer.globals.entryPointDialog); + } - min.dialogs.add(new WaterfallDialog('/', [ - async step => { - if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { - return await step.beginDialog('/auth'); - } - else{ - return await step.next(step.options); - } - }, - async step => { + const user = await min.userProfile.get(step.context, {}); + const locale = step.context.activity.locale; - if (GBServer.globals.entryPointDialog !== null && - min.instance.botId === process.env.BOT_ID && - step.context.activity.channelId === 'webchat') { - return step.replaceDialog(GBServer.globals.entryPointDialog); - } - - const user = await min.userProfile.get(step.context, {}); - const locale = step.context.activity.locale; - - if (!user.once && step.context.activity.channelId === 'webchat' - && min.core.getParam(min.instance, 'HelloGoodX', true) === "true") { - user.once = true; - await min.userProfile.set(step.context, user); - const a = new Date(); - const date = a.getHours(); - const msg = - date < 12 - ? Messages[locale].good_morning - : date < 18 + if ( + !user.once && + step.context.activity.channelId === 'webchat' && + min.core.getParam(min.instance, 'HelloGoodX', true) === 'true' + ) { + user.once = true; + await min.userProfile.set(step.context, user); + const a = new Date(); + const date = a.getHours(); + const msg = + date < 12 + ? Messages[locale].good_morning + : date < 18 ? Messages[locale].good_evening : Messages[locale].good_night; - await min.conversationalService.sendText(min, step, Messages[locale].hi(msg)); + await min.conversationalService.sendText(min, step, Messages[locale].hi(msg)); - await step.replaceDialog('/ask', { firstTime: true }); + await step.replaceDialog('/ask', { firstTime: true }); - if ( - step.context.activity !== undefined && - step.context.activity.type === 'message' && - step.context.activity.text !== '' - ) { - GBLog.info(`/answer being called from WelcomeDialog.`); - await step.replaceDialog('/answer', { query: step.context.activity.text }); + if ( + step.context.activity !== undefined && + step.context.activity.type === 'message' && + step.context.activity.text !== '' + ) { + GBLog.info(`/answer being called from WelcomeDialog.`); + await step.replaceDialog('/answer', { query: step.context.activity.text }); + } } - } - return await step.next(); - } - ])); + return await step.next(); + } + ]) + ); } } diff --git a/packages/core.gbapp/dialogs/WhoAmIDialog.ts b/packages/core.gbapp/dialogs/WhoAmIDialog.ts index cd214d77..4348170a 100644 --- a/packages/core.gbapp/dialogs/WhoAmIDialog.ts +++ b/packages/core.gbapp/dialogs/WhoAmIDialog.ts @@ -51,33 +51,34 @@ export class WhoAmIDialog extends IGBDialog { * @param bot The bot adapter. * @param min The minimal bot instance data. */ - public static setup(bot: BotAdapter, min: GBMinInstance) { - min.dialogs.add(new WaterfallDialog('/whoAmI', [ - async step => { - if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { - return await step.beginDialog('/auth'); + public static setup (bot: BotAdapter, min: GBMinInstance) { + min.dialogs.add( + new WaterfallDialog('/whoAmI', [ + async step => { + if (step.context.activity.channelId !== 'msteams' && process.env.ENABLE_AUTH) { + return await step.beginDialog('/auth'); + } else { + return await step.next(step.options); + } + }, + + async step => { + const locale = step.context.activity.locale; + await min.conversationalService.sendText(min, step, `${min.instance.description}`); + + if (min.instance.whoAmIVideo !== undefined) { + await min.conversationalService.sendText(min, step, Messages[locale].show_video); + await min.conversationalService.sendEvent(min, step, 'play', { + playerType: 'video', + data: min.instance.whoAmIVideo.trim() + }); + } + + await step.replaceDialog('/ask', { isReturning: true }); + + return await step.next(); } - else{ - return await step.next(step.options); - } - }, - - async step => { - const locale = step.context.activity.locale; - await min.conversationalService.sendText(min, step, `${min.instance.description}`); - - if (min.instance.whoAmIVideo !== undefined) { - await min.conversationalService.sendText(min, step, Messages[locale].show_video); - await min.conversationalService.sendEvent(min, step, 'play', { - playerType: 'video', - data: min.instance.whoAmIVideo.trim() - }); - } - - await step.replaceDialog('/ask', { isReturning: true }); - - return await step.next(); - } - ])); + ]) + ); } } diff --git a/packages/core.gbapp/index.ts b/packages/core.gbapp/index.ts index 7eba4790..f1a0a007 100644 --- a/packages/core.gbapp/index.ts +++ b/packages/core.gbapp/index.ts @@ -52,27 +52,27 @@ export class GBCorePackage implements IGBPackage { public sysPackages: IGBPackage[]; public CurrentEngineName = 'guaribas-1.0.0'; - public async loadPackage(core: IGBCoreService, sequelize: Sequelize): Promise { + public async loadPackage (core: IGBCoreService, sequelize: Sequelize): Promise { core.sequelize.addModels([GuaribasInstance, GuaribasPackage, GuaribasChannel, GuaribasException]); } - public async getDialogs(min: GBMinInstance) { + public async getDialogs (min: GBMinInstance) { GBLog.verbose(`getDialogs called.`); } - public async unloadPackage(core: IGBCoreService): Promise { + public async unloadPackage (core: IGBCoreService): Promise { GBLog.verbose(`unloadPackage called.`); } - public async unloadBot(min: GBMinInstance): Promise { + public async unloadBot (min: GBMinInstance): Promise { GBLog.verbose(`unloadBot called.`); } - public async onNewSession(min: GBMinInstance, step: GBDialogStep): Promise { + public async onNewSession (min: GBMinInstance, step: GBDialogStep): Promise { GBLog.verbose(`onNewSession called.`); } - public async onExchangeData(min: GBMinInstance, kind: string, data: any) { + public async onExchangeData (min: GBMinInstance, kind: string, data: any) { GBLog.verbose(`onExchangeData called.`); } - public async loadBot(min: GBMinInstance): Promise { + public async loadBot (min: GBMinInstance): Promise { WelcomeDialog.setup(min.bot, min); WhoAmIDialog.setup(min.bot, min); SwitchBotDialog.setup(min.bot, min); diff --git a/packages/core.gbapp/models/GBModel.ts b/packages/core.gbapp/models/GBModel.ts index 539e85bf..6e9db486 100644 --- a/packages/core.gbapp/models/GBModel.ts +++ b/packages/core.gbapp/models/GBModel.ts @@ -55,221 +55,219 @@ import { IGBInstance } from 'botlib'; * Base instance data for a bot. */ @Table -export class GuaribasInstance extends Model - implements IGBInstance { - +export class GuaribasInstance extends Model implements IGBInstance { @PrimaryKey @AutoIncrement @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @Column(DataType.STRING(255)) - declare botEndpoint: string; + botEndpoint: string; @Column(DataType.STRING(255)) - declare whoAmIVideo: string; + whoAmIVideo: string; @Column(DataType.STRING(255)) - declare botId: string; + botId: string; @Column(DataType.STRING(255)) - declare title: string; + title: string; @Column({ type: DataType.STRING(16) }) - declare activationCode: string; + activationCode: string; @Column(DataType.STRING(255)) - declare description: string; + description: string; @Column({ type: DataType.STRING(16) }) - declare state: string; + state: string; - declare version: string; + version: string; @Column(DataType.STRING(64)) - declare botKey: string; + botKey: string; @Column(DataType.STRING(255)) - declare enabledAdmin: boolean; + enabledAdmin: boolean; @Column(DataType.STRING(255)) - declare engineName: string; + engineName: string; @Column(DataType.STRING(255)) - declare marketplaceId: string; + marketplaceId: string; @Column(DataType.STRING(255)) - declare textAnalyticsKey: string; + textAnalyticsKey: string; @Column(DataType.STRING(255)) - declare textAnalyticsEndpoint: string; + textAnalyticsEndpoint: string; @Column({ type: DataType.STRING(64) }) - declare translatorKey: string; + translatorKey: string; @Column({ type: DataType.STRING(128) }) - declare translatorEndpoint: string; + translatorEndpoint: string; @Column(DataType.STRING(255)) - declare marketplacePassword: string; + marketplacePassword: string; @Column(DataType.STRING(255)) - declare webchatKey: string; + webchatKey: string; @Column(DataType.STRING(255)) - declare authenticatorTenant: string; + authenticatorTenant: string; @Column(DataType.STRING(255)) - declare authenticatorAuthorityHostUrl: string; + authenticatorAuthorityHostUrl: string; @Column(DataType.STRING(255)) - declare cloudSubscriptionId: string; + cloudSubscriptionId: string; @Column(DataType.STRING(255)) - declare cloudUsername: string; + cloudUsername: string; @Column(DataType.STRING(255)) - declare cloudPassword: string; + cloudPassword: string; @Column(DataType.STRING(255)) - declare cloudLocation: string; + cloudLocation: string; @Column(DataType.STRING(255)) - declare googleBotKey: string; + googleBotKey: string; @Column(DataType.STRING(255)) - declare googleChatApiKey: string; + googleChatApiKey: string; @Column(DataType.STRING(255)) - declare googleChatSubscriptionName: string; + googleChatSubscriptionName: string; @Column(DataType.STRING(255)) - declare googleClientEmail: string; + googleClientEmail: string; @Column({ type: DataType.STRING(4000) }) - declare googlePrivateKey: string; - + googlePrivateKey: string; + @Column(DataType.STRING(255)) - declare googleProjectId: string; - - @Column({ type: DataType.STRING(255) }) - declare facebookWorkplaceVerifyToken: string; + googleProjectId: string; @Column({ type: DataType.STRING(255) }) - declare facebookWorkplaceAppSecret: string; + facebookWorkplaceVerifyToken: string; + + @Column({ type: DataType.STRING(255) }) + facebookWorkplaceAppSecret: string; @Column({ type: DataType.STRING(512) }) - declare facebookWorkplaceAccessToken: string; - - @Column(DataType.STRING(255)) - declare whatsappBotKey: string; + facebookWorkplaceAccessToken: string; @Column(DataType.STRING(255)) - declare whatsappServiceKey: string; + whatsappBotKey: string; @Column(DataType.STRING(255)) - declare whatsappServiceNumber: string; + whatsappServiceKey: string; @Column(DataType.STRING(255)) - declare whatsappServiceUrl: string; + whatsappServiceNumber: string; @Column(DataType.STRING(255)) - declare smsKey: string; + whatsappServiceUrl: string; @Column(DataType.STRING(255)) - declare smsSecret: string; + smsKey: string; @Column(DataType.STRING(255)) - declare smsServiceNumber: string; + smsSecret: string; @Column(DataType.STRING(255)) - declare speechKey: string; + smsServiceNumber: string; @Column(DataType.STRING(255)) - declare speechEndpoint: string; + speechKey: string; @Column(DataType.STRING(255)) - declare spellcheckerKey: string; + speechEndpoint: string; @Column(DataType.STRING(255)) - declare spellcheckerEndpoint: string; + spellcheckerKey: string; @Column(DataType.STRING(255)) - declare theme: string; + spellcheckerEndpoint: string; @Column(DataType.STRING(255)) - declare ui: string; + theme: string; @Column(DataType.STRING(255)) - declare kb: string; + ui: string; @Column(DataType.STRING(255)) - declare nlpAppId: string; + kb: string; @Column(DataType.STRING(255)) - declare nlpKey: string; + nlpAppId: string; + + @Column(DataType.STRING(255)) + nlpKey: string; @Column({ type: DataType.STRING(512) }) - declare nlpEndpoint: string; + nlpEndpoint: string; @Column(DataType.STRING(255)) - declare nlpAuthoringKey: string; + nlpAuthoringKey: string; @Column(DataType.STRING(255)) - declare deploymentPaths: string; + deploymentPaths: string; @Column(DataType.STRING(255)) - declare searchHost: string; + searchHost: string; @Column(DataType.STRING(255)) - declare searchKey: string; + searchKey: string; @Column(DataType.STRING(255)) - declare searchIndex: string; + searchIndex: string; @Column(DataType.STRING(255)) - declare searchIndexer: string; + searchIndexer: string; @Column(DataType.STRING(255)) - declare storageUsername: string; + storageUsername: string; @Column(DataType.STRING(255)) - declare storagePassword: string; + storagePassword: string; @Column(DataType.STRING(255)) - declare storageName: string; + storageName: string; @Column(DataType.STRING(255)) - declare storageServer: string; + storageServer: string; @Column(DataType.STRING(255)) - declare storageDialect: string; + storageDialect: string; @Column(DataType.STRING(255)) - declare storagePath: string; + storagePath: string; @Column(DataType.STRING(255)) - declare adminPass: string; + adminPass: string; @Column(DataType.FLOAT) - declare nlpVsSearch: number; // TODO: Remove field. + nlpVsSearch: number; // TODO: Remove field. @Column(DataType.FLOAT) - declare searchScore: number; + searchScore: number; @Column(DataType.FLOAT) - declare nlpScore: number; + nlpScore: number; @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; + updatedAt: Date; @Column(DataType.STRING(4000)) - declare params: string; + params: string; } /** @@ -280,28 +278,28 @@ export class GuaribasPackage extends Model { @PrimaryKey @AutoIncrement @Column(DataType.INTEGER) - declare packageId: number; + packageId: number; @Column(DataType.STRING(255)) - declare packageName: string; + packageName: string; @ForeignKey(() => GuaribasInstance) @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @BelongsTo(() => GuaribasInstance) - declare instance: GuaribasInstance; + instance: GuaribasInstance; @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; + updatedAt: Date; @Column({ type: DataType.STRING(512) }) - declare custom: string; + custom: string; } /** @@ -312,18 +310,18 @@ export class GuaribasChannel extends Model { @PrimaryKey @AutoIncrement @Column(DataType.INTEGER) - declare channelId: number; + channelId: number; @Column(DataType.STRING(255)) - declare title: string; + title: string; @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; + updatedAt: Date; } /** @@ -335,72 +333,70 @@ export class GuaribasException extends Model { @PrimaryKey @AutoIncrement @Column(DataType.INTEGER) - declare exceptionId: number; + exceptionId: number; @Column(DataType.STRING(255)) - declare message: string; + message: string; @ForeignKey(() => GuaribasInstance) @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @BelongsTo(() => GuaribasInstance) - declare instance: GuaribasInstance; + instance: GuaribasInstance; @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; + updatedAt: Date; } @Table //tslint:disable-next-line:max-classes-per-file export class GuaribasApplications extends Model { - @Column(DataType.STRING(255)) - declare name: string; + name: string; @ForeignKey(() => GuaribasInstance) @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @BelongsTo(() => GuaribasInstance) - declare instance: GuaribasInstance; + instance: GuaribasInstance; @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; + updatedAt: Date; } @Table //tslint:disable-next-line:max-classes-per-file export class GuaribasSchedule extends Model { + @Column(DataType.STRING(255)) + name: string; @Column(DataType.STRING(255)) - declare name: string; - - @Column(DataType.STRING(255)) - declare schedule: string; + schedule: string; @ForeignKey(() => GuaribasInstance) @Column(DataType.INTEGER) - declare instanceId: number; + instanceId: number; @BelongsTo(() => GuaribasInstance) - declare instance: GuaribasInstance; + instance: GuaribasInstance; @Column(DataType.DATE) @CreatedAt - declare createdAt: Date; + createdAt: Date; @Column(DataType.DATE) @UpdatedAt - declare updatedAt: Date; + updatedAt: Date; } diff --git a/packages/core.gbapp/services/GBConfigService.ts b/packages/core.gbapp/services/GBConfigService.ts index f1c6bb6f..9df157c3 100644 --- a/packages/core.gbapp/services/GBConfigService.ts +++ b/packages/core.gbapp/services/GBConfigService.ts @@ -43,10 +43,10 @@ import * as en from 'dotenv-extended'; * Base configuration for the server like storage. */ export class GBConfigService { - public static getBoolean(value: string): boolean { - return this.get(value) as unknown as boolean; + public static getBoolean (value: string): boolean { + return (this.get(value) as unknown) as boolean; } - public static getServerPort(): string { + public static getServerPort (): string { if (process.env.PORT) { return process.env.PORT; } @@ -57,7 +57,7 @@ export class GBConfigService { return '4242'; } - public static init(): any { + public static init (): any { try { en.load({ encoding: 'utf8', @@ -78,7 +78,7 @@ export class GBConfigService { } } - public static get(key: string): string | undefined { + public static get (key: string): string | undefined { let value = GBConfigService.tryGet(key); if (value === undefined) { @@ -164,13 +164,12 @@ export class GBConfigService { return value; } - public static tryGet(key: string): any { + public static tryGet (key: string): any { let value = process.env[`container:${key}`]; if (value === undefined) { value = process.env[key]; } - return value; } } diff --git a/packages/core.gbapp/services/GBConversationalService.ts b/packages/core.gbapp/services/GBConversationalService.ts index f31e2f77..df179733 100644 --- a/packages/core.gbapp/services/GBConversationalService.ts +++ b/packages/core.gbapp/services/GBConversationalService.ts @@ -62,126 +62,212 @@ import SpeechToTextV1 from 'ibm-watson/speech-to-text/v1.js'; import TextToSpeechV1 from 'ibm-watson/text-to-speech/v1.js'; import { IamAuthenticator } from 'ibm-watson/auth/index.js'; import * as marked from 'marked'; -import Translate from '@google-cloud/translate'; +import Translate from '@google-cloud/translate'; /** * Provides basic services for handling messages and dispatching to back-end * services like NLP or Search. */ export class GBConversationalService { - /** * Reference to the core service. */ public coreService: IGBCoreService; /** - * - * @param coreService + * + * @param coreService */ - constructor(coreService: IGBCoreService) { + constructor (coreService: IGBCoreService) { this.coreService = coreService; } static defaultDiacriticsRemovalMap = [ - { 'base': 'A', 'letters': '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F' }, - { 'base': 'AA', 'letters': '\uA732' }, - { 'base': 'AE', 'letters': '\u00C6\u01FC\u01E2' }, - { 'base': 'AO', 'letters': '\uA734' }, - { 'base': 'AU', 'letters': '\uA736' }, - { 'base': 'AV', 'letters': '\uA738\uA73A' }, - { 'base': 'AY', 'letters': '\uA73C' }, - { 'base': 'B', 'letters': '\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181' }, - { 'base': 'C', 'letters': '\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E' }, - { 'base': 'D', 'letters': '\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0' }, - { 'base': 'DZ', 'letters': '\u01F1\u01C4' }, - { 'base': 'Dz', 'letters': '\u01F2\u01C5' }, - { 'base': 'E', 'letters': '\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E' }, - { 'base': 'F', 'letters': '\u0046\u24BB\uFF26\u1E1E\u0191\uA77B' }, - { 'base': 'G', 'letters': '\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E' }, - { 'base': 'H', 'letters': '\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D' }, - { 'base': 'I', 'letters': '\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197' }, - { 'base': 'J', 'letters': '\u004A\u24BF\uFF2A\u0134\u0248' }, - { 'base': 'K', 'letters': '\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2' }, - { 'base': 'L', 'letters': '\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780' }, - { 'base': 'LJ', 'letters': '\u01C7' }, - { 'base': 'Lj', 'letters': '\u01C8' }, - { 'base': 'M', 'letters': '\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C' }, - { 'base': 'N', 'letters': '\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4' }, - { 'base': 'NJ', 'letters': '\u01CA' }, - { 'base': 'Nj', 'letters': '\u01CB' }, - { 'base': 'O', 'letters': '\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C' }, - { 'base': 'OI', 'letters': '\u01A2' }, - { 'base': 'OO', 'letters': '\uA74E' }, - { 'base': 'OU', 'letters': '\u0222' }, - { 'base': 'OE', 'letters': '\u008C\u0152' }, - { 'base': 'oe', 'letters': '\u009C\u0153' }, - { 'base': 'P', 'letters': '\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754' }, - { 'base': 'Q', 'letters': '\u0051\u24C6\uFF31\uA756\uA758\u024A' }, - { 'base': 'R', 'letters': '\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782' }, - { 'base': 'S', 'letters': '\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784' }, - { 'base': 'T', 'letters': '\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786' }, - { 'base': 'TZ', 'letters': '\uA728' }, - { 'base': 'U', 'letters': '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244' }, - { 'base': 'V', 'letters': '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245' }, - { 'base': 'VY', 'letters': '\uA760' }, - { 'base': 'W', 'letters': '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72' }, - { 'base': 'X', 'letters': '\u0058\u24CD\uFF38\u1E8A\u1E8C' }, - { 'base': 'Y', 'letters': '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE' }, - { 'base': 'Z', 'letters': '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762' }, - { 'base': 'a', 'letters': '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250' }, - { 'base': 'aa', 'letters': '\uA733' }, - { 'base': 'ae', 'letters': '\u00E6\u01FD\u01E3' }, - { 'base': 'ao', 'letters': '\uA735' }, - { 'base': 'au', 'letters': '\uA737' }, - { 'base': 'av', 'letters': '\uA739\uA73B' }, - { 'base': 'ay', 'letters': '\uA73D' }, - { 'base': 'b', 'letters': '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253' }, - { 'base': 'c', 'letters': '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184' }, - { 'base': 'd', 'letters': '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A' }, - { 'base': 'dz', 'letters': '\u01F3\u01C6' }, - { 'base': 'e', 'letters': '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD' }, - { 'base': 'f', 'letters': '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C' }, - { 'base': 'g', 'letters': '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F' }, - { 'base': 'h', 'letters': '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265' }, - { 'base': 'hv', 'letters': '\u0195' }, - { 'base': 'i', 'letters': '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131' }, - { 'base': 'j', 'letters': '\u006A\u24D9\uFF4A\u0135\u01F0\u0249' }, - { 'base': 'k', 'letters': '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3' }, - { 'base': 'l', 'letters': '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747' }, - { 'base': 'lj', 'letters': '\u01C9' }, - { 'base': 'm', 'letters': '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F' }, - { 'base': 'n', 'letters': '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5' }, - { 'base': 'nj', 'letters': '\u01CC' }, - { 'base': 'o', 'letters': '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275' }, - { 'base': 'oi', 'letters': '\u01A3' }, - { 'base': 'ou', 'letters': '\u0223' }, - { 'base': 'oo', 'letters': '\uA74F' }, - { 'base': 'p', 'letters': '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755' }, - { 'base': 'q', 'letters': '\u0071\u24E0\uFF51\u024B\uA757\uA759' }, - { 'base': 'r', 'letters': '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783' }, - { 'base': 's', 'letters': '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B' }, - { 'base': 't', 'letters': '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787' }, - { 'base': 'tz', 'letters': '\uA729' }, - { 'base': 'u', 'letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289' }, - { 'base': 'v', 'letters': '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C' }, - { 'base': 'vy', 'letters': '\uA761' }, - { 'base': 'w', 'letters': '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73' }, - { 'base': 'x', 'letters': '\u0078\u24E7\uFF58\u1E8B\u1E8D' }, - { 'base': 'y', 'letters': '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF' }, - { 'base': 'z', 'letters': '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763' } + { + base: 'A', + letters: + '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F' + }, + { base: 'AA', letters: '\uA732' }, + { base: 'AE', letters: '\u00C6\u01FC\u01E2' }, + { base: 'AO', letters: '\uA734' }, + { base: 'AU', letters: '\uA736' }, + { base: 'AV', letters: '\uA738\uA73A' }, + { base: 'AY', letters: '\uA73C' }, + { base: 'B', letters: '\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181' }, + { base: 'C', letters: '\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E' }, + { + base: 'D', + letters: '\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0' + }, + { base: 'DZ', letters: '\u01F1\u01C4' }, + { base: 'Dz', letters: '\u01F2\u01C5' }, + { + base: 'E', + letters: + '\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E' + }, + { base: 'F', letters: '\u0046\u24BB\uFF26\u1E1E\u0191\uA77B' }, + { + base: 'G', + letters: '\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E' + }, + { base: 'H', letters: '\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D' }, + { + base: 'I', + letters: + '\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197' + }, + { base: 'J', letters: '\u004A\u24BF\uFF2A\u0134\u0248' }, + { base: 'K', letters: '\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2' }, + { + base: 'L', + letters: + '\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780' + }, + { base: 'LJ', letters: '\u01C7' }, + { base: 'Lj', letters: '\u01C8' }, + { base: 'M', letters: '\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C' }, + { + base: 'N', + letters: '\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4' + }, + { base: 'NJ', letters: '\u01CA' }, + { base: 'Nj', letters: '\u01CB' }, + { + base: 'O', + letters: + '\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C' + }, + { base: 'OI', letters: '\u01A2' }, + { base: 'OO', letters: '\uA74E' }, + { base: 'OU', letters: '\u0222' }, + { base: 'OE', letters: '\u008C\u0152' }, + { base: 'oe', letters: '\u009C\u0153' }, + { base: 'P', letters: '\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754' }, + { base: 'Q', letters: '\u0051\u24C6\uFF31\uA756\uA758\u024A' }, + { + base: 'R', + letters: '\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782' + }, + { + base: 'S', + letters: '\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784' + }, + { + base: 'T', + letters: '\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786' + }, + { base: 'TZ', letters: '\uA728' }, + { + base: 'U', + letters: + '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244' + }, + { base: 'V', letters: '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245' }, + { base: 'VY', letters: '\uA760' }, + { base: 'W', letters: '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72' }, + { base: 'X', letters: '\u0058\u24CD\uFF38\u1E8A\u1E8C' }, + { + base: 'Y', + letters: '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE' + }, + { base: 'Z', letters: '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762' }, + { + base: 'a', + letters: + '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250' + }, + { base: 'aa', letters: '\uA733' }, + { base: 'ae', letters: '\u00E6\u01FD\u01E3' }, + { base: 'ao', letters: '\uA735' }, + { base: 'au', letters: '\uA737' }, + { base: 'av', letters: '\uA739\uA73B' }, + { base: 'ay', letters: '\uA73D' }, + { base: 'b', letters: '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253' }, + { base: 'c', letters: '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184' }, + { base: 'd', letters: '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A' }, + { base: 'dz', letters: '\u01F3\u01C6' }, + { + base: 'e', + letters: + '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD' + }, + { base: 'f', letters: '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C' }, + { + base: 'g', + letters: '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F' + }, + { + base: 'h', + letters: '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265' + }, + { base: 'hv', letters: '\u0195' }, + { + base: 'i', + letters: + '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131' + }, + { base: 'j', letters: '\u006A\u24D9\uFF4A\u0135\u01F0\u0249' }, + { base: 'k', letters: '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3' }, + { + base: 'l', + letters: + '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747' + }, + { base: 'lj', letters: '\u01C9' }, + { base: 'm', letters: '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F' }, + { + base: 'n', + letters: '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5' + }, + { base: 'nj', letters: '\u01CC' }, + { + base: 'o', + letters: + '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275' + }, + { base: 'oi', letters: '\u01A3' }, + { base: 'ou', letters: '\u0223' }, + { base: 'oo', letters: '\uA74F' }, + { base: 'p', letters: '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755' }, + { base: 'q', letters: '\u0071\u24E0\uFF51\u024B\uA757\uA759' }, + { + base: 'r', + letters: '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783' + }, + { + base: 's', + letters: + '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B' + }, + { + base: 't', + letters: '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787' + }, + { base: 'tz', letters: '\uA729' }, + { + base: 'u', + letters: + '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289' + }, + { base: 'v', letters: '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C' }, + { base: 'vy', letters: '\uA761' }, + { base: 'w', letters: '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73' }, + { base: 'x', letters: '\u0078\u24E7\uFF58\u1E8B\u1E8D' }, + { + base: 'y', + letters: '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF' + }, + { base: 'z', letters: '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763' } ]; - // "what?" version ... http://jsperf.com/diacritics/12 - public static removeDiacriticsAndPunctuation(str) { - + public static removeDiacriticsAndPunctuation (str) { str = GBConversationalService.removeDiacritics(str); - return str.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, ""); - + return str.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, ''); } - public static removeDiacritics(str) { - + public static removeDiacritics (str) { var diacriticsMap = {}; for (var i = 0; i < GBConversationalService.defaultDiacriticsRemovalMap.length; i++) { var letters = GBConversationalService.defaultDiacriticsRemovalMap[i].letters; @@ -195,9 +281,7 @@ export class GBConversationalService { return str; } - - - public getNewMobileCode() { + public getNewMobileCode () { const passwordGenerator = new PasswordGenerator(); const options = { upperCaseAlpha: false, @@ -211,15 +295,15 @@ export class GBConversationalService { return code; } - public getCurrentLanguage(step: GBDialogStep) { + public getCurrentLanguage (step: GBDialogStep) { return step.context.activity.locale; } - public userMobile(step) { + public userMobile (step) { return GBMinService.userMobile(step); } - public async sendFile( + public async sendFile ( min: GBMinInstance, step: GBDialogStep, mobile: string, @@ -227,7 +311,6 @@ export class GBConversationalService { caption: string ): Promise { if (step !== null) { - mobile = this.userMobile(step); if (mobile) { @@ -247,17 +330,17 @@ export class GBConversationalService { } } - public async sendAudio(min: GBMinInstance, step: GBDialogStep, url: string): Promise { + public async sendAudio (min: GBMinInstance, step: GBDialogStep, url: string): Promise { const mobile = step.context.activity['mobile']; GBLog.info(`Sending audio to ${mobile} in URL: ${url}.`); await min.whatsAppDirectLine.sendAudioToDevice(mobile, url); } - public async sendEvent(min: GBMinInstance, step: GBDialogStep, name: string, value: Object): Promise { - if (!this.userMobile(step) && - step.context.activity.channelId !== 'msteams') { - GBLog.info(`Sending event ${name}:${typeof value === 'object' ? JSON.stringify(value) : - value ? value : ''} to client...`); + public async sendEvent (min: GBMinInstance, step: GBDialogStep, name: string, value: Object): Promise { + if (!this.userMobile(step) && step.context.activity.channelId !== 'msteams') { + GBLog.info( + `Sending event ${name}:${typeof value === 'object' ? JSON.stringify(value) : value ? value : ''} to client...` + ); const msg = MessageFactory.text(''); msg.value = value; msg.type = 'event'; @@ -268,7 +351,7 @@ export class GBConversationalService { } // tslint:disable:no-unsafe-any due to Nexmo. - public async sendSms(min: GBMinInstance, mobile: string, text: string): Promise { + public async sendSms (min: GBMinInstance, mobile: string, text: string): Promise { GBLog.info(`Sending SMS to ${mobile} with text: '${text}'.`); if (!min.instance.smsKey && min.instance.smsSecret) { @@ -276,16 +359,16 @@ export class GBConversationalService { method: 'POST', url: 'http://sms-api.megaconecta.com.br/mt', headers: { - "content-type": "application/json", - "authorization": `Bearer ${min.instance.smsSecret}` + 'content-type': 'application/json', + authorization: `Bearer ${min.instance.smsSecret}` }, body: [ { - "numero": `${mobile}`, - "servico": "short", - "mensagem": text, - "parceiro_id": "", - "codificacao": "0" + numero: `${mobile}`, + servico: 'short', + mensagem: text, + parceiro_id: '', + codificacao: '0' } ], json: true @@ -300,39 +383,38 @@ export class GBConversationalService { return Promise.reject(new Error(msg)); } - } - else { - return new Promise((resolve: any, reject: any): any => { - const nexmo = new Nexmo({ - apiKey: min.instance.smsKey, - apiSecret: min.instance.smsSecret - }); - // tslint:disable-next-line:no-unsafe-any - nexmo.message.sendSms(min.instance.smsServiceNumber, mobile, text,{}, (err, data) => { - const message = data.messages ? data.messages[0] : {}; - if (err || message['error-text']) { - GBLog.error(`BASIC: error sending SMS to ${mobile}: ${message['error-text']}`); - reject(message['error-text']); - } else { - resolve(data); - } - }, ); - }); + } else { + return new Promise( + (resolve: any, reject: any): any => { + const nexmo = new Nexmo({ + apiKey: min.instance.smsKey, + apiSecret: min.instance.smsSecret + }); + // tslint:disable-next-line:no-unsafe-any + nexmo.message.sendSms(min.instance.smsServiceNumber, mobile, text, {}, (err, data) => { + const message = data.messages ? data.messages[0] : {}; + if (err || message['error-text']) { + GBLog.error(`BASIC: error sending SMS to ${mobile}: ${message['error-text']}`); + reject(message['error-text']); + } else { + resolve(data); + } + }); + } + ); } } - public async sendToMobile(min: GBMinInstance, mobile: string, message: string, conversationId) { + public async sendToMobile (min: GBMinInstance, mobile: string, message: string, conversationId) { GBLog.info(`Sending message ${message} to ${mobile}...`); await min.whatsAppDirectLine.sendToDevice(mobile, message, conversationId); } - - public static async getAudioBufferFromText(text): Promise { + public static async getAudioBufferFromText (text): Promise { return new Promise(async (resolve, reject) => { const name = GBAdminService.getRndReadableIdentifier(); try { - const textToSpeech = new TextToSpeechV1({ authenticator: new IamAuthenticator({ apikey: process.env.WATSON_TTS_KEY }), url: process.env.WATSON_TTS_URL @@ -358,22 +440,23 @@ export class GBConversationalService { const transcoder = new prism.FFmpeg({ args: ['-analyzeduration', '0', '-loglevel', '0', '-f', 'opus', '-ar', '16000', '-ac', '1'] }); - Fs.createReadStream(waveFilename).pipe(transcoder).pipe(output); + Fs.createReadStream(waveFilename) + .pipe(transcoder) + .pipe(output); let url = urlJoin(GBServer.globals.publicAddress, 'audios', oggFilenameOnly); resolve(url); - } catch (error) { reject(error); } }); } - public static async getTextFromAudioBuffer(speechKey, cloudRegion, buffer, locale): Promise { + public static async getTextFromAudioBuffer (speechKey, cloudRegion, buffer, locale): Promise { return new Promise(async (resolve, reject) => { try { const oggFile = new Readable(); - oggFile._read = () => { }; // _read is required but you can noop it + oggFile._read = () => {}; // _read is required but you can noop it oggFile.push(buffer); oggFile.push(null); @@ -437,13 +520,7 @@ export class GBConversationalService { }); } - public async playMarkdown( - min: GBMinInstance, - answer: string, - channel: string, - step: GBDialogStep, - mobile: string - ) { + public async playMarkdown (min: GBMinInstance, answer: string, channel: string, step: GBDialogStep, mobile: string) { const user = step ? await min.userProfile.get(step.context, {}) : null; let text = answer; @@ -465,9 +542,16 @@ export class GBConversationalService { var videos = ['webm', 'mp4', 'mov']; var filetype = href.split('.').pop(); if (videos.indexOf(filetype) > -1) { - var out = '' + var out = + ''; return out; } else { return renderer.oldImage(href, title, text); @@ -492,8 +576,7 @@ export class GBConversationalService { text = text.replace('! [', '![').replace('] (', ']('); text = text.replace(`[[embed url=`, process.env.BOT_URL + '/').replace(']]', ''); // TODO: Improve it. - text = text.replace(`](kb`, "](" + process.env.BOT_URL + '/kb'); // TODO: Improve it. - + text = text.replace(`](kb`, '](' + process.env.BOT_URL + '/kb'); // TODO: Improve it. if (mobile) { await this.sendMarkdownToMobile(min, step, mobile, text); @@ -506,12 +589,7 @@ export class GBConversationalService { } } - private async sendMarkdownToWeb( - min, - step: GBDialogStep, - html: string, - answer: string - ) { + private async sendMarkdownToWeb (min, step: GBDialogStep, html: string, answer: string) { const locale = step.context.activity.locale; html = html.replace(/src\=\"kb\//gi, `src=\"../kb/`); @@ -521,15 +599,14 @@ export class GBConversationalService { content: html, answer: answer, prevId: 0, // TODO: answer.prevId, - nextId: 0, // TODO: answer.nextId + nextId: 0 // TODO: answer.nextId } }); } - // tslint:enable:no-unsafe-any - public async sendMarkdownToMobile(min: GBMinInstance, step: GBDialogStep, mobile: string, text: string) { + public async sendMarkdownToMobile (min: GBMinInstance, step: GBDialogStep, mobile: string, text: string) { let sleep = ms => { return new Promise(resolve => { setTimeout(resolve, ms); @@ -699,21 +776,20 @@ export class GBConversationalService { } } - // TODO: Update botlib. - public async routeNLP(step: GBDialogStep, min: GBMinInstance, text: string): Promise { + public async routeNLP (step: GBDialogStep, min: GBMinInstance, text: string): Promise { return false; } - public async routeNLP2(step: GBDialogStep, min: GBMinInstance, text: string) { + public async routeNLP2 (step: GBDialogStep, min: GBMinInstance, text: string) { if (min.instance.nlpAppId === null || min.instance.nlpAppId === undefined) { return false; } text = text.toLowerCase(); text = text.replace('who´s', 'who is'); - text = text.replace('who\'s', 'who is'); + text = text.replace("who's", 'who is'); text = text.replace('what´s', 'what is'); - text = text.replace('what\'s', 'what is'); + text = text.replace("what's", 'what is'); text = text.replace('?', ' '); text = text.replace('¿', ' '); text = text.replace('!', ' '); @@ -732,10 +808,14 @@ export class GBConversationalService { try { const saved = step.context.activity.text; step.context.activity.text = text; - nlp = await model.recognize(step.context, {}, {}, { IncludeAllIntents: false, IncludeInstanceData: false, includeAPIResults: true }); + nlp = await model.recognize( + step.context, + {}, + {}, + { IncludeAllIntents: false, IncludeInstanceData: false, includeAPIResults: true } + ); step.context.activity.text = saved; } catch (error) { - // tslint:disable:no-unsafe-any if (error.statusCode === 404 || error.statusCode === 400) { GBLog.warn('NLP application still not publish and there are no other options for answering.'); @@ -753,8 +833,11 @@ export class GBConversationalService { const minBoot = GBServer.globals.minBoot as any; let nlpActive = false; let score = 0; - const instanceScore = min.core.getParam(min.instance, 'NLP Score', - min.instance.nlpScore ? min.instance.nlpScore : minBoot.instance.nlpScore); + const instanceScore = min.core.getParam( + min.instance, + 'NLP Score', + min.instance.nlpScore ? min.instance.nlpScore : minBoot.instance.nlpScore + ); Object.keys(nlp.intents).forEach(name => { score = nlp.intents[name].score; @@ -773,7 +856,9 @@ export class GBConversationalService { } GBLog.info( - `NLP called: ${intent}, entities: ${nlp.entities.length}, score: ${score} > required (nlpScore): ${instanceScore}` + `NLP called: ${intent}, entities: ${ + nlp.entities.length + }, score: ${score} > required (nlpScore): ${instanceScore}` ); step.activeDialog.state.options.entities = nlp.entities; @@ -782,7 +867,7 @@ export class GBConversationalService { if (nlp.entities) { await CollectionUtil.asyncForEach(Object.keys(nlp.entities), async key => { - if (key !== "$instance") { + if (key !== '$instance') { let entity = nlp.entities[key]; if (Array.isArray(entity[0])) { nlp.entities[key] = entity.slice(1); @@ -794,14 +879,12 @@ export class GBConversationalService { return await step.replaceDialog(`/${intent}`, step.activeDialog.state.options); } - GBLog.info( - `NLP NOT called: score: ${score} > required (nlpScore): ${instanceScore}` - ); + GBLog.info(`NLP NOT called: score: ${score} > required (nlpScore): ${instanceScore}`); return null; } - public async getLanguage(min: GBMinInstance, text: string): Promise { + public async getLanguage (min: GBMinInstance, text: string): Promise { const key = min.core.getParam(min.instance, 'textAnalyticsKey', null); if (!key) { return process.env.DEFAULT_USER_LANGUAGE; @@ -815,9 +898,8 @@ export class GBConversationalService { return language === '(Unknown)' ? 'en' : language; } - public async spellCheck(min: GBMinInstance, text: string): Promise { - const key = - min.core.getParam(min.instance, 'spellcheckerKey', null); + public async spellCheck (min: GBMinInstance, text: string): Promise { + const key = min.core.getParam(min.instance, 'spellcheckerKey', null); if (key) { text = text.charAt(0).toUpperCase() + text.slice(1); @@ -831,7 +913,7 @@ export class GBConversationalService { return text; } - public async translate(min: GBMinInstance, text: string, language: string): Promise { + public async translate (min: GBMinInstance, text: string, language: string): Promise { const translatorEnabled = () => { if (min.instance.params) { const params = JSON.parse(min.instance.params); @@ -842,7 +924,11 @@ export class GBConversationalService { const endPoint = min.core.getParam(min.instance, 'translatorEndpoint', null); const key = min.core.getParam(min.instance, 'translatorKey', null); - if ((endPoint === null && !min.instance.googleProjectId) || !translatorEnabled() || process.env.TRANSLATOR_DISABLED === 'true') { + if ( + (endPoint === null && !min.instance.googleProjectId) || + !translatorEnabled() || + process.env.TRANSLATOR_DISABLED === 'true' + ) { return text; } @@ -859,11 +945,13 @@ export class GBConversationalService { const translate = new Translate.v2.Translate({ projectId: min.instance.googleProjectId, - credentials: { client_email: min.instance.googleClientEmail, private_key: min.instance.googlePrivateKey.replace(/\\n/gm, '\n') } + credentials: { + client_email: min.instance.googleClientEmail, + private_key: min.instance.googlePrivateKey.replace(/\\n/gm, '\n') + } }); try { - const [translation] = await translate.translate(text, language); return translation; @@ -872,10 +960,7 @@ export class GBConversationalService { return Promise.reject(new Error(msg)); } - - } - else { - + } else { let options = { method: 'POST', baseUrl: endPoint, @@ -899,7 +984,6 @@ export class GBConversationalService { }; try { - const results = await request(options); return results[0].translations[0].text; @@ -911,11 +995,11 @@ export class GBConversationalService { } } - public async prompt(min: GBMinInstance, step: GBDialogStep, text: string) { + public async prompt (min: GBMinInstance, step: GBDialogStep, text: string) { const user = await min.userProfile.get(step.context, {}); const systemUser = user.systemUser; - if (text && text !== "") { + if (text && text !== '') { text = await min.conversationalService.translate( min, text, @@ -925,21 +1009,18 @@ export class GBConversationalService { ); GBLog.verbose(`Translated text(prompt): ${text}.`); } - if (step.activeDialog.state.options['kind'] === "file") { + if (step.activeDialog.state.options['kind'] === 'file') { return await step.prompt('attachmentPrompt', {}); - } - else { + } else { return await step.prompt('textPrompt', text ? text : {}); } - - } - public async sendText(min: GBMinInstance, step, text) { + public async sendText (min: GBMinInstance, step, text) { await this['sendTextWithOptions'](min, step, text, true, null); } - public async sendTextWithOptions(min: GBMinInstance, step, text, translate, keepTextList) { + public async sendTextWithOptions (min: GBMinInstance, step, text, translate, keepTextList) { const member = step.context.activity.from; const user = await min.userProfile.get(step.context, {}); const systemUser = user.systemUser; @@ -966,9 +1047,7 @@ export class GBConversationalService { text = await min.conversationalService.translate( min, text, - locale - ? locale - : min.core.getParam(min.instance, 'Locale', GBConfigService.get('LOCALE')) + locale ? locale : min.core.getParam(min.instance, 'Locale', GBConfigService.get('LOCALE')) ); if (keepTextList) { @@ -989,18 +1068,15 @@ export class GBConversationalService { analytics.createMessage(min.instance.instanceId, user.conversation, null, text); if (!isNaN(member.id) && !member.id.startsWith('1000')) { - - const to = step.context.activity.group? step.context.activity.group : member.id; + const to = step.context.activity.group ? step.context.activity.group : member.id; await min.whatsAppDirectLine.sendToDevice(to, text, step.context.activity.conversation.id); } else { await step.context.sendActivity(text); } - - } - public async broadcast(min: GBMinInstance, message: string) { + public async broadcast (min: GBMinInstance, message: string) { GBLog.info(`Sending broadcast notifications...`); let sleep = ms => { @@ -1021,60 +1097,51 @@ export class GBConversationalService { } /** - * + * * Sends a message in a user with an already started conversation (got ConversationReference set) */ - public async sendOnConversation(min: GBMinInstance, user: GuaribasUser, message: string) { - + public async sendOnConversation (min: GBMinInstance, user: GuaribasUser, message: string) { if (user.conversationReference.startsWith('spaces')) { await min['googleDirectLine'].sendToDevice(user.userSystemId, null, user.conversationReference, message); - } - else { + } else { const ref = JSON.parse(user.conversationReference); MicrosoftAppCredentials.trustServiceUrl(ref.serviceUrl); try { - await min.bot['continueConversation'](ref, async (t1) => { + await min.bot['continueConversation'](ref, async t1 => { const ref2 = TurnContext.getConversationReference(t1.activity); - await min.bot.continueConversation(ref2, async (t2) => { + await min.bot.continueConversation(ref2, async t2 => { await t2.sendActivity(message); }); }); - } catch (error) { - console.log(error) ; + console.log(error); } } } - public static kmpSearch(pattern, text) { + public static kmpSearch (pattern, text) { pattern = pattern.toLowerCase(); text = text.toLowerCase(); - if (pattern.length == 0) - return 0; // Immediate match + if (pattern.length == 0) return 0; // Immediate match // Compute longest suffix-prefix table var lsp = [0]; // Base case for (var i = 1; i < pattern.length; i++) { var j = lsp[i - 1]; // Start by assuming we're extending the previous LSP - while (j > 0 && pattern.charAt(i) != pattern.charAt(j)) - j = lsp[j - 1]; - if (pattern.charAt(i) == pattern.charAt(j)) - j++; + while (j > 0 && pattern.charAt(i) != pattern.charAt(j)) j = lsp[j - 1]; + if (pattern.charAt(i) == pattern.charAt(j)) j++; lsp.push(j); } // Walk through text string var j = 0; // Number of chars matched in pattern for (var i = 0; i < text.length; i++) { - while (j > 0 && text.charAt(i) != pattern.charAt(j)) - j = lsp[j - 1]; // Fall back in the pattern + while (j > 0 && text.charAt(i) != pattern.charAt(j)) j = lsp[j - 1]; // Fall back in the pattern if (text.charAt(i) == pattern.charAt(j)) { j++; // Next char matched, increment position - if (j == pattern.length) - return i - (j - 1); + if (j == pattern.length) return i - (j - 1); } } return -1; // Not found } - } diff --git a/packages/core.gbapp/services/GBCoreService.ts b/packages/core.gbapp/services/GBCoreService.ts index 1b575b8e..2e52de62 100644 --- a/packages/core.gbapp/services/GBCoreService.ts +++ b/packages/core.gbapp/services/GBCoreService.ts @@ -100,18 +100,18 @@ export class GBCoreService implements IGBCoreService { private dialect: string; /** - * + * */ - constructor() { + constructor () { this.adminService = new GBAdminService(this); } - public async ensureInstances(instances: IGBInstance[], bootInstance: any, core: IGBCoreService) { } + public async ensureInstances (instances: IGBInstance[], bootInstance: any, core: IGBCoreService) {} /** * Gets database config and connect to storage. Currently two databases * are available: SQL Server and SQLite. */ - public async initStorage(): Promise { + public async initStorage (): Promise { this.dialect = GBConfigService.get('STORAGE_DIALECT'); let host: string | undefined; @@ -134,8 +134,8 @@ export class GBCoreService implements IGBCoreService { const logging: boolean | Function = GBConfigService.get('STORAGE_LOGGING') === 'true' ? (str: string): void => { - GBLog.info(str); - } + GBLog.info(str); + } : false; const encrypt: boolean = GBConfigService.get('STORAGE_ENCRYPT') === 'true'; @@ -177,7 +177,7 @@ export class GBCoreService implements IGBCoreService { * Checks wheather storage is acessible or not and opens firewall * in case of any connection block. */ - public async checkStorage(installationDeployer: IGBInstallationDeployer) { + public async checkStorage (installationDeployer: IGBInstallationDeployer) { try { await this.sequelize.authenticate(); } catch (error) { @@ -192,11 +192,10 @@ export class GBCoreService implements IGBCoreService { } } - -/** - * Syncronizes structure between model and tables in storage. - */ - public async syncDatabaseStructure() { + /** + * Syncronizes structure between model and tables in storage. + */ + public async syncDatabaseStructure () { if (GBConfigService.get('STORAGE_SYNC') === 'true') { const alter = GBConfigService.get('STORAGE_SYNC_ALTER') === 'true'; GBLog.info('Syncing database...'); @@ -214,7 +213,7 @@ export class GBCoreService implements IGBCoreService { /** * Loads all items to start several listeners. */ - public async loadInstances(): Promise { + public async loadInstances (): Promise { if (process.env.LOAD_ONLY !== undefined) { const bots = process.env.LOAD_ONLY.split(`;`); const and = []; @@ -237,7 +236,7 @@ export class GBCoreService implements IGBCoreService { /** * Loads just one Bot instance by its internal Id. */ - public async loadInstanceById(instanceId: number): Promise { + public async loadInstanceById (instanceId: number): Promise { const options = { where: { instanceId: instanceId, state: 'active' } }; return await GuaribasInstance.findOne(options); @@ -245,7 +244,7 @@ export class GBCoreService implements IGBCoreService { /** * Loads just one Bot instance. */ - public async loadInstanceByActivationCode(code: string): Promise { + public async loadInstanceByActivationCode (code: string): Promise { let options = { where: { activationCode: code, state: 'active' } }; return await GuaribasInstance.findOne(options); @@ -253,7 +252,7 @@ export class GBCoreService implements IGBCoreService { /** * Loads just one Bot instance. */ - public async loadInstanceByBotId(botId: string): Promise { + public async loadInstanceByBotId (botId: string): Promise { const options = { where: {} }; options.where = { botId: botId, state: 'active' }; @@ -261,11 +260,11 @@ export class GBCoreService implements IGBCoreService { } /** - * Writes .env required to start the full server. Used during - * first startup, when user is asked some questions to create the + * Writes .env required to start the full server. Used during + * first startup, when user is asked some questions to create the * full base environment. */ - public async writeEnv(instance: IGBInstance) { + public async writeEnv (instance: IGBInstance) { const env = ` ADDITIONAL_DEPLOY_PATH= ADMIN_PASS=${instance.adminPass} @@ -290,17 +289,15 @@ ENDPOINT_UPDATE=true Fs.writeFileSync('.env', env); } - - /** + /** * Certifies that network servers will reach back the development machine * when calling back from web services. This ensures that reverse proxy is * established. */ - public async ensureProxy(port): Promise { + public async ensureProxy (port): Promise { try { if (Fs.existsSync('node_modules/ngrok/bin/ngrok.exe') || Fs.existsSync('node_modules/ngrok/bin/ngrok')) { - - return await ngrok.connect({ port: port}); + return await ngrok.connect({ port: port }); } else { GBLog.warn('ngrok executable not found (only tested on Windows). Check installation or node_modules folder.'); @@ -318,7 +315,7 @@ ENDPOINT_UPDATE=true * Setup generic web hooks so .gbapps can expose application logic * and get called on demand. */ - public installWebHook(isGet: boolean, url: string, callback: any) { + public installWebHook (isGet: boolean, url: string, callback: any) { if (isGet) { GBServer.globals.server.get(url, (req, res) => { callback(req, res); @@ -331,10 +328,10 @@ ENDPOINT_UPDATE=true } /** - * Defines the entry point dialog to be called whenever a user + * Defines the entry point dialog to be called whenever a user * starts talking to the bot. */ - public setEntryPointDialog(dialogName: string) { + public setEntryPointDialog (dialogName: string) { GBServer.globals.entryPointDialog = dialogName; } @@ -342,14 +339,14 @@ ENDPOINT_UPDATE=true * Replaces the default web application root path used to start the GB * with a custom home page. */ - public setWWWRoot(localPath: string) { + public setWWWRoot (localPath: string) { GBServer.globals.wwwroot = localPath; } /** * Removes a bot instance from storage. */ - public async deleteInstance(botId: string) { + public async deleteInstance (botId: string) { const options = { where: {} }; options.where = { botId: botId }; await GuaribasInstance.destroy(options); @@ -359,7 +356,7 @@ ENDPOINT_UPDATE=true * Saves a bot instance object to the storage handling * multi-column JSON based store 'params' field. */ - public async saveInstance(fullInstance: any) { + public async saveInstance (fullInstance: any) { const options = { where: {} }; options.where = { botId: fullInstance.botId }; let instance = await GuaribasInstance.findOne(options); @@ -380,7 +377,7 @@ ENDPOINT_UPDATE=true /** * Loads all bot instances from object storage, if it's formatted. */ - public async loadAllInstances( + public async loadAllInstances ( core: IGBCoreService, installationDeployer: IGBInstallationDeployer, proxyAddress: string @@ -432,9 +429,9 @@ ENDPOINT_UPDATE=true } /** - * Loads all system packages from 'packages' folder. + * Loads all system packages from 'packages' folder. */ - public async loadSysPackages(core: GBCoreService): Promise { + public async loadSysPackages (core: GBCoreService): Promise { // NOTE: if there is any code before this line a semicolon // will be necessary before this line. // Loads all system packages. @@ -469,10 +466,10 @@ ENDPOINT_UPDATE=true } /** - * Verifies that an complex global password has been specified + * Verifies that an complex global password has been specified * before starting the server. */ - public ensureAdminIsSecured() { + public ensureAdminIsSecured () { const password = GBConfigService.get('ADMIN_PASS'); if (!GBAdminService.StrongRegex.test(password)) { throw new Error( @@ -484,10 +481,10 @@ ENDPOINT_UPDATE=true /** * Creates the first bot instance (boot instance) used to "boot" the server. * At least one bot is required to perform conversational administrative tasks. - * So a base main bot is always deployed and will act as root bot for - * configuration tree with three levels: .env > root bot > all other bots. + * So a base main bot is always deployed and will act as root bot for + * configuration tree with three levels: .env > root bot > all other bots. */ - public async createBootInstance( + public async createBootInstance ( core: GBCoreService, installationDeployer: IGBInstallationDeployer, proxyAddress: string @@ -504,7 +501,7 @@ ENDPOINT_UPDATE=true ); await this.writeEnv(changedInstance); GBConfigService.init(); - + GBLog.info(`File .env written. Preparing storage and search for the first time...`); await this.openStorageFrontier(installationDeployer); await this.initStorage(); @@ -522,7 +519,7 @@ ENDPOINT_UPDATE=true /** * Helper to get the web browser onpened in UI interfaces. */ - public openBrowserInDevelopment() { + public openBrowserInDevelopment () { if (process.env.NODE_ENV === 'development') { open('http://localhost:4242'); } @@ -543,29 +540,35 @@ ENDPOINT_UPDATE=true * // ' FOREIGN KEY ([groupId1], [groupId2]) REFERENCES [Group] ([groupId1], [groupId1]) ON DELETE NO ACTION,' + * // ' FOREIGN KEY ([instanceId]) REFERENCES [Instance] ([instanceId]) ON DELETE NO ACTION)' */ - private createTableQueryOverride(tableName, attributes, options): string { + private createTableQueryOverride (tableName, attributes, options): string { let sql: string = this.createTableQuery.apply(this.queryGenerator, [tableName, attributes, options]); const re1 = /CREATE\s+TABLE\s+\[([^\]]*)\]/; const matches = re1.exec(sql); if (matches !== null) { const table = matches[1]; const re2 = /PRIMARY\s+KEY\s+\(\[[^\]]*\](?:,\s*\[[^\]]*\])*\)/; - sql = sql.replace(re2, (match: string, ...args: any[]): string => { - return `CONSTRAINT [${table}_pk] ${match}`; - }); + sql = sql.replace( + re2, + (match: string, ...args: any[]): string => { + return `CONSTRAINT [${table}_pk] ${match}`; + } + ); const re3 = /FOREIGN\s+KEY\s+\((\[[^\]]*\](?:,\s*\[[^\]]*\])*)\)/g; const re4 = /\[([^\]]*)\]/g; - sql = sql.replace(re3, (match: string, ...args: any[]): string => { - const fkcols = args[0]; - let fkname = table; - let matches2 = re4.exec(fkcols); - while (matches2 !== null) { - fkname += `_${matches2[1]}`; - matches2 = re4.exec(fkcols); - } + sql = sql.replace( + re3, + (match: string, ...args: any[]): string => { + const fkcols = args[0]; + let fkname = table; + let matches2 = re4.exec(fkcols); + while (matches2 !== null) { + fkname += `_${matches2[1]}`; + matches2 = re4.exec(fkcols); + } - return `CONSTRAINT [${fkname}_fk] FOREIGN KEY (${fkcols})`; - }); + return `CONSTRAINT [${fkname}_fk] FOREIGN KEY (${fkcols})`; + } + ); } return sql; @@ -579,7 +582,7 @@ ENDPOINT_UPDATE=true * ' CONSTRAINT [invalid2] FOREIGN KEY ([groupId1], [groupId2]) REFERENCES [Group] ([groupId1], [groupId2]) ON DELETE NO ACTION, ' + * ' CONSTRAINT [invalid3] FOREIGN KEY ([instanceId1]) REFERENCES [Instance] ([instanceId1]) ON DELETE NO ACTION' */ - private changeColumnQueryOverride(tableName, attributes): string { + private changeColumnQueryOverride (tableName, attributes): string { let sql: string = this.changeColumnQuery.apply(this.queryGenerator, [tableName, attributes]); const re1 = /ALTER\s+TABLE\s+\[([^\]]*)\]/; const matches = re1.exec(sql); @@ -587,17 +590,20 @@ ENDPOINT_UPDATE=true const table = matches[1]; const re2 = /(ADD\s+)?CONSTRAINT\s+\[([^\]]*)\]\s+FOREIGN\s+KEY\s+\((\[[^\]]*\](?:,\s*\[[^\]]*\])*)\)/g; const re3 = /\[([^\]]*)\]/g; - sql = sql.replace(re2, (match: string, ...args: any[]): string => { - const fkcols = args[2]; - let fkname = table; - let matches2 = re3.exec(fkcols); - while (matches2 !== null) { - fkname += `_${matches2[1]}`; - matches2 = re3.exec(fkcols); - } + sql = sql.replace( + re2, + (match: string, ...args: any[]): string => { + const fkcols = args[2]; + let fkname = table; + let matches2 = re3.exec(fkcols); + while (matches2 !== null) { + fkname += `_${matches2[1]}`; + matches2 = re3.exec(fkcols); + } - return `${args[0] ? args[0] : ''}CONSTRAINT [${fkname}_fk] FOREIGN KEY (${fkcols})`; - }); + return `${args[0] ? args[0] : ''}CONSTRAINT [${fkname}_fk] FOREIGN KEY (${fkcols})`; + } + ); } return sql; @@ -606,7 +612,7 @@ ENDPOINT_UPDATE=true /** * Opens storage firewall used by the server when starting to get root bot instance. */ - private async openStorageFrontier(installationDeployer: IGBInstallationDeployer) { + private async openStorageFrontier (installationDeployer: IGBInstallationDeployer) { const group = GBConfigService.get('CLOUD_GROUP'); const serverName = GBConfigService.get('STORAGE_SERVER').split('.database.windows.net')[0]; await installationDeployer.openStorageFirewall(group, serverName); @@ -619,7 +625,7 @@ ENDPOINT_UPDATE=true * @param name Name of param to get from instance. * @param defaultValue Value returned when no param is defined in Config.xlsx. */ - public getParam(instance: IGBInstance, name: string, defaultValue?: T): any { + public getParam (instance: IGBInstance, name: string, defaultValue?: T): any { let value = null; if (instance.params) { const params = JSON.parse(instance.params); @@ -647,5 +653,4 @@ ENDPOINT_UPDATE=true return value; } - } diff --git a/packages/core.gbapp/services/GBDeployer.ts b/packages/core.gbapp/services/GBDeployer.ts index e7cdc7e3..1772c848 100644 --- a/packages/core.gbapp/services/GBDeployer.ts +++ b/packages/core.gbapp/services/GBDeployer.ts @@ -41,7 +41,7 @@ import express from 'express'; import child_process from 'child_process'; import rimraf from 'rimraf'; import request from 'request-promise-native'; -import vhost from 'vhost' +import vhost from 'vhost'; import urlJoin from 'url-join'; import Fs from 'fs'; import { GBError, GBLog, GBMinInstance, IGBCoreService, IGBDeployer, IGBInstance, IGBPackage } from 'botlib'; @@ -58,12 +58,10 @@ import { GBImporter } from './GBImporterService.js'; import { TeamsService } from '../../teams.gblib/services/TeamsService.js'; import MicrosoftGraph from '@microsoft/microsoft-graph-client'; - /** * Deployer service for bots, themes, ai and more. */ export class GBDeployer implements IGBDeployer { - /** * Where should deployer look into for general packages. */ @@ -87,7 +85,7 @@ export class GBDeployer implements IGBDeployer { /** * Deployer needs core and importer to be created. */ - constructor(core: IGBCoreService, importer: GBImporter) { + constructor (core: IGBCoreService, importer: GBImporter) { this.core = core; this.importer = importer; } @@ -96,14 +94,16 @@ export class GBDeployer implements IGBDeployer { * Builds a connection string text to be used in direct * use to database like the Indexer (Azure Search). */ - public static getConnectionStringFromInstance(instance: IGBInstance) { - return `Server=tcp:${instance.storageServer},1433;Database=${instance.storageName};User ID=${instance.storageUsername};Password=${instance.storagePassword};Trusted_Connection=False;Encrypt=True;Connection Timeout=30;`; + public static getConnectionStringFromInstance (instance: IGBInstance) { + return `Server=tcp:${instance.storageServer},1433;Database=${instance.storageName};User ID=${ + instance.storageUsername + };Password=${instance.storagePassword};Trusted_Connection=False;Encrypt=True;Connection Timeout=30;`; } /** * Retrives token and initialize drive client API. */ - public static async internalGetDriveClient(min: GBMinInstance) { + public static async internalGetDriveClient (min: GBMinInstance) { let token = await min.adminService.acquireElevatedToken(min.instance.instanceId); let siteId = process.env.STORAGE_SITE_ID; let libraryId = process.env.STORAGE_LIBRARY; @@ -114,14 +114,13 @@ export class GBDeployer implements IGBDeployer { } }); const baseUrl = `https://graph.microsoft.com/v1.0/sites/${siteId}/lists/${libraryId}`; - return {baseUrl, client}; + return { baseUrl, client }; } /** * Performs package deployment in all .gbai or default. */ - public async deployPackages(core: IGBCoreService, server: any, appPackages: IGBPackage[]) { - + public async deployPackages (core: IGBCoreService, server: any, appPackages: IGBPackage[]) { // Builds lists of paths to search for packages. let paths = [urlJoin(process.env.PWD, GBDeployer.deployFolder), urlJoin(process.env.PWD, GBDeployer.workFolder)]; @@ -133,8 +132,7 @@ export class GBDeployer implements IGBDeployer { const gbappPackages: string[] = []; const generalPackages: string[] = []; - async function scanPackageDirectory(path) { - + async function scanPackageDirectory (path) { // Gets all directories. const isDirectory = source => Fs.lstatSync(source).isDirectory(); @@ -144,7 +142,6 @@ export class GBDeployer implements IGBDeployer { .filter(isDirectory); const dirs = getDirectories(path); await CollectionUtil.asyncForEach(dirs, async element => { - // For each folder, checks its extensions looking for valid packages. if (element === '.') { @@ -154,8 +151,9 @@ export class GBDeployer implements IGBDeployer { // Skips what does not need to be loaded. - if (process.env.GBAPP_SKIP && (process.env.GBAPP_SKIP.toLowerCase().indexOf(name) !== -1 - || process.env.GBAPP_SKIP === 'true') + if ( + process.env.GBAPP_SKIP && + (process.env.GBAPP_SKIP.toLowerCase().indexOf(name) !== -1 || process.env.GBAPP_SKIP === 'true') ) { return; } @@ -203,8 +201,7 @@ export class GBDeployer implements IGBDeployer { /** * Deploys a new blank bot to the database, cognitive services and other services. */ - public async deployBlankBot(botId: string, mobile: string, email: string) { - + public async deployBlankBot (botId: string, mobile: string, email: string) { // Creates a new row on the GuaribasInstance table. const instance = await this.importer.createBotInstance(botId); @@ -246,7 +243,7 @@ export class GBDeployer implements IGBDeployer { /** * Verifies if bot exists on bot catalog. */ - public async botExists(botId: string): Promise { + public async botExists (botId: string): Promise { const service = new AzureDeployerService(this); return await service.botExists(botId); @@ -255,8 +252,7 @@ export class GBDeployer implements IGBDeployer { /** * Performs all tasks of deploying a new bot on the cloud. */ - public async deployBotFull(instance: IGBInstance, publicAddress: string): Promise { - + public async deployBotFull (instance: IGBInstance, publicAddress: string): Promise { // Reads base configuration from environent file. const service = new AzureDeployerService(this); @@ -326,20 +322,23 @@ export class GBDeployer implements IGBDeployer { /** * Performs the NLP publishing process on remote service. */ - public async publishNLP(instance: IGBInstance): Promise { + public async publishNLP (instance: IGBInstance): Promise { const service = new AzureDeployerService(this); - const res = await service.publishNLP(instance.cloudLocation, instance.nlpAppId, - instance.nlpAuthoringKey); - if (res.status !== 200 && res.status !== 201) { throw res.bodyAsText; } + const res = await service.publishNLP(instance.cloudLocation, instance.nlpAppId, instance.nlpAuthoringKey); + if (res.status !== 200 && res.status !== 201) { + throw res.bodyAsText; + } } /** * Trains NLP on the remote service. */ - public async trainNLP(instance: IGBInstance): Promise { + public async trainNLP (instance: IGBInstance): Promise { const service = new AzureDeployerService(this); const res = await service.trainNLP(instance.cloudLocation, instance.nlpAppId, instance.nlpAuthoringKey); - if (res.status !== 200 && res.status !== 202) { throw res.bodyAsText; } + if (res.status !== 200 && res.status !== 202) { + throw res.bodyAsText; + } const sleep = ms => { return new Promise(resolve => { setTimeout(resolve, ms); @@ -351,10 +350,16 @@ export class GBDeployer implements IGBDeployer { /** * Return a zip file for importing bot in apps, currently MS Teams. */ - public async getBotManifest(instance: IGBInstance): Promise { + public async getBotManifest (instance: IGBInstance): Promise { const s = new TeamsService(); - const manifest = await s.getManifest(instance.marketplaceId, instance.title, instance.description, - GBAdminService.generateUuid(), instance.botId, "General Bots"); + const manifest = await s.getManifest( + instance.marketplaceId, + instance.title, + instance.description, + GBAdminService.generateUuid(), + instance.botId, + 'General Bots' + ); return await s.getAppFile(manifest); } @@ -362,7 +367,7 @@ export class GBDeployer implements IGBDeployer { /** * Refreshes NLP entities on the remote service. */ - public async refreshNLPEntity(instance: IGBInstance, listName, listData): Promise { + public async refreshNLPEntity (instance: IGBInstance, listName, listData): Promise { const service = new AzureDeployerService(this); const res = await service.refreshEntityList( instance.cloudLocation, @@ -371,13 +376,15 @@ export class GBDeployer implements IGBDeployer { instance.nlpAuthoringKey, listData ); - if (res.status !== 200) { throw res.bodyAsText; } + if (res.status !== 200) { + throw res.bodyAsText; + } } /** * Deploys a bot to the storage from a .gbot folder. */ - public async deployBotFromLocalPath(localPath: string, publicAddress: string): Promise { + public async deployBotFromLocalPath (localPath: string, publicAddress: string): Promise { const packageName = Path.basename(localPath); const instance = await this.importer.importIfNotExistsBotPackage(undefined, packageName, localPath); await this.deployBotFull(instance, publicAddress); @@ -386,7 +393,7 @@ export class GBDeployer implements IGBDeployer { /** * Loads all para from tabular file Config.xlsx. */ - public async loadParamsFromTabular(min: GBMinInstance): Promise { + public async loadParamsFromTabular (min: GBMinInstance): Promise { const siteId = process.env.STORAGE_SITE_ID; const libraryId = process.env.STORAGE_LIBRARY; @@ -408,9 +415,7 @@ export class GBDeployer implements IGBDeployer { let url = `https://graph.microsoft.com/v1.0/sites/${siteId}/lists/${libraryId}/drive/root:${path}:/children`; GBLog.info(`Loading .gbot from Excel: ${url}`); - const res = await client - .api(url) - .get(); + const res = await client.api(url).get(); // Finds Config.xlsx. @@ -428,10 +433,13 @@ export class GBDeployer implements IGBDeployer { const results = await client .api( - `https://graph.microsoft.com/v1.0/sites/${siteId}/lists/${libraryId}/drive/items/${document[0].id}/workbook/worksheets('General')/range(address='A7:B100')` + `https://graph.microsoft.com/v1.0/sites/${siteId}/lists/${libraryId}/drive/items/${ + document[0].id + }/workbook/worksheets('General')/range(address='A7:B100')` ) .get(); - let index = 0, obj = {}; + let index = 0, + obj = {}; for (; index < results.text.length; index++) { if (results.text[index][0] === '') { return obj; @@ -445,10 +453,13 @@ export class GBDeployer implements IGBDeployer { /** * Loads all para from tabular file Config.xlsx. */ - public async downloadFolder(min: GBMinInstance, localPath: string, remotePath: string, - baseUrl: string = null, client = null): Promise { - - + public async downloadFolder ( + min: GBMinInstance, + localPath: string, + remotePath: string, + baseUrl: string = null, + client = null + ): Promise { GBLog.info(`downloadFolder: localPath=${localPath}, remotePath=${remotePath}, baseUrl=${baseUrl}`); if (!baseUrl) { @@ -479,9 +490,7 @@ export class GBDeployer implements IGBDeployer { GBLog.info(`Download URL: ${url}`); - const res = await client.client - .api(url) - .get(); + const res = await client.client.api(url).get(); const documents = res.value; if (documents === undefined || documents.length === 0) { GBLog.info(`${remotePath} is an empty folder.`); @@ -491,7 +500,6 @@ export class GBDeployer implements IGBDeployer { // Download files or navigate to directory to recurse. await CollectionUtil.asyncForEach(documents, async item => { - const itemPath = Path.join(localPath, remotePath, item.name); if (item.folder) { @@ -516,10 +524,8 @@ export class GBDeployer implements IGBDeployer { const response = await request({ uri: url, encoding: null }); Fs.writeFileSync(itemPath, response, { encoding: null }); - Fs.utimesSync(itemPath, - new Date(), new Date(item.lastModifiedDateTime)); - } - else { + Fs.utimesSync(itemPath, new Date(), new Date(item.lastModifiedDateTime)); + } else { GBLog.info(`Local is up to date: ${itemPath}...`); } } @@ -529,8 +535,7 @@ export class GBDeployer implements IGBDeployer { /** * UndDeploys a bot to the storage. */ - public async undeployBot(botId: string, packageName: string): Promise { - + public async undeployBot (botId: string, packageName: string): Promise { // Deletes Bot registration on cloud. const service = new AzureDeployerService(this); @@ -551,7 +556,7 @@ export class GBDeployer implements IGBDeployer { /** * Deploys a new package to the database storage (just a group). */ - public async deployPackageToStorage(instanceId: number, packageName: string): Promise { + public async deployPackageToStorage (instanceId: number, packageName: string): Promise { return await GuaribasPackage.create({ packageName: packageName, instanceId: instanceId @@ -561,8 +566,7 @@ export class GBDeployer implements IGBDeployer { /** * Deploys a folder into the bot storage. */ - public async deployPackage(min: GBMinInstance, localPath: string) { - + public async deployPackage (min: GBMinInstance, localPath: string) { const packageType = Path.extname(localPath); let handled = false; let pck = null; @@ -572,7 +576,6 @@ export class GBDeployer implements IGBDeployer { const _this = this; await CollectionUtil.asyncForEach(min.appPackages, async (e: IGBPackage) => { try { - // If it will be handled, create a temporary service layer to be // called by .gbapp and manage the associated package row. @@ -605,7 +608,6 @@ export class GBDeployer implements IGBDeployer { switch (packageType) { case '.gbot': - // Extracts configuration information from .gbot files. if (process.env.ENABLE_PARAMS_ONLINE === 'false') { @@ -624,7 +626,6 @@ export class GBDeployer implements IGBDeployer { break; case '.gbkb': - // Deploys .gbkb into the storage. const service = new KBService(this.core.sequelize); @@ -632,7 +633,6 @@ export class GBDeployer implements IGBDeployer { break; case '.gbdialog': - // Compiles files from .gbdialog into work folder and deploys // it to the VM. @@ -642,7 +642,6 @@ export class GBDeployer implements IGBDeployer { break; case '.gbtheme': - // Updates server listeners to serve theme files in .gbtheme. const packageName = Path.basename(localPath); @@ -652,21 +651,18 @@ export class GBDeployer implements IGBDeployer { break; case '.gbapp': - // Dynamically compiles and loads .gbapp packages (Node.js packages). await this.callGBAppCompiler(localPath, this.core); break; case '.gblib': - // Dynamically compiles and loads .gblib packages (Node.js packages). await this.callGBAppCompiler(localPath, this.core); break; default: - const err = GBError.create(`Unhandled package type: ${packageType}.`); Promise.reject(err); break; @@ -676,8 +672,7 @@ export class GBDeployer implements IGBDeployer { /** * Removes the package from the storage and local work folders. */ - public async undeployPackageFromLocalPath(instance: IGBInstance, localPath: string) { - + public async undeployPackageFromLocalPath (instance: IGBInstance, localPath: string) { // Gets information about the package. const packageType = Path.extname(localPath); @@ -687,7 +682,6 @@ export class GBDeployer implements IGBDeployer { // Removes objects from storage, cloud resources and local files if any. switch (packageType) { - case '.gbot': const packageObject = JSON.parse(Fs.readFileSync(urlJoin(localPath, 'package.json'), 'utf8')); await this.undeployBot(packageObject.botId, packageName); @@ -726,8 +720,7 @@ export class GBDeployer implements IGBDeployer { * Performs automation of the Indexer (Azure Search) and rebuild * its index based on .gbkb structure. */ - public async rebuildIndex(instance: IGBInstance, searchSchema: any) { - + public async rebuildIndex (instance: IGBInstance, searchSchema: any) { // Prepares search. const search = new AzureSearch( @@ -744,11 +737,9 @@ export class GBDeployer implements IGBDeployer { try { await search.deleteDataSource(dsName); } catch (err) { - // If it is a 404 there is nothing to delete as it is the first creation. if (err.code !== 404) { - throw err; } } @@ -758,10 +749,9 @@ export class GBDeployer implements IGBDeployer { try { await search.deleteIndex(); } catch (err) { - // If it is a 404 there is nothing to delete as it is the first creation. - if (err.code !== 404 && err.code !== "OperationNotAllowed") { + if (err.code !== 404 && err.code !== 'OperationNotAllowed') { throw err; } } @@ -780,7 +770,7 @@ export class GBDeployer implements IGBDeployer { /** * Finds a storage package by using package name. */ - public async getStoragePackageByName(instanceId: number, packageName: string): Promise { + public async getStoragePackageByName (instanceId: number, packageName: string): Promise { const where = { packageName: packageName, instanceId: instanceId }; return await GuaribasPackage.findOne({ @@ -792,8 +782,7 @@ export class GBDeployer implements IGBDeployer { * Prepares the React application inside default.gbui folder and * makes this web application available as default web front-end. */ - public setupDefaultGBUI() { - + public setupDefaultGBUI () { // Setups paths. const root = 'packages/default.gbui'; @@ -802,7 +791,6 @@ export class GBDeployer implements IGBDeployer { // Checks if .gbapp compiliation is enabled. if (!Fs.existsSync(`${root}/build`) && process.env.DISABLE_WEB !== 'true') { - // Write a .env required to fix some bungs in create-react-app tool. Fs.writeFileSync(`${root}/.env`, 'SKIP_PREFLIGHT_CHECK=true'); @@ -821,8 +809,7 @@ export class GBDeployer implements IGBDeployer { /** * Servers bot storage assets to be used by web, WhatsApp and other channels. */ - public static mountGBKBAssets(packageName: any, botId: string, filename: string) { - + public static mountGBKBAssets (packageName: any, botId: string, filename: string) { // Servers menu assets. GBServer.globals.server.use( @@ -833,20 +820,27 @@ export class GBDeployer implements IGBDeployer { // Servers all other assets in .gbkb folders. const gbaiName = `${botId}.gbai`; - GBServer.globals.server.use(`/kb/${gbaiName}/${packageName}/assets`, - express.static(urlJoin('work', gbaiName, filename, 'assets'))); - GBServer.globals.server.use(`/kb/${gbaiName}/${packageName}/images`, - express.static(urlJoin('work', gbaiName, filename, 'images'))); - GBServer.globals.server.use(`/kb/${gbaiName}/${packageName}/audios`, - express.static(urlJoin('work', gbaiName, filename, 'audios'))); - GBServer.globals.server.use(`/kb/${gbaiName}/${packageName}/videos`, - express.static(urlJoin('work', gbaiName, filename, 'videos'))); - GBServer.globals.server.use(`/${botId}/cache`, - express.static(urlJoin('work', gbaiName, 'cache'))); - GBServer.globals.server.use(`/${gbaiName}/${botId}.gbdata/public`, - express.static(urlJoin('work', gbaiName, `${botId}.gbdata`, 'public'))); - - + GBServer.globals.server.use( + `/kb/${gbaiName}/${packageName}/assets`, + express.static(urlJoin('work', gbaiName, filename, 'assets')) + ); + GBServer.globals.server.use( + `/kb/${gbaiName}/${packageName}/images`, + express.static(urlJoin('work', gbaiName, filename, 'images')) + ); + GBServer.globals.server.use( + `/kb/${gbaiName}/${packageName}/audios`, + express.static(urlJoin('work', gbaiName, filename, 'audios')) + ); + GBServer.globals.server.use( + `/kb/${gbaiName}/${packageName}/videos`, + express.static(urlJoin('work', gbaiName, filename, 'videos')) + ); + GBServer.globals.server.use(`/${botId}/cache`, express.static(urlJoin('work', gbaiName, 'cache'))); + GBServer.globals.server.use( + `/${gbaiName}/${botId}.gbdata/public`, + express.static(urlJoin('work', gbaiName, `${botId}.gbdata`, 'public')) + ); GBLog.verbose(`KB (.gbkb) assets accessible at: /kb/${botId}.gbai/${packageName}.`); } @@ -854,13 +848,12 @@ export class GBDeployer implements IGBDeployer { /** * Invokes Type Script compiler for a given .gbapp package (Node.js based). */ - public async callGBAppCompiler( + public async callGBAppCompiler ( gbappPath: string, core: IGBCoreService, appPackages: any[] = undefined, appPackagesProcessed: number = 0 ) { - // Runs `npm install` for the package. GBLog.info(`Deploying General Bots Application (.gbapp) or Library (.gblib): ${Path.basename(gbappPath)}...`); @@ -874,7 +867,6 @@ export class GBDeployer implements IGBDeployer { folder = Path.join(gbappPath, 'dist'); try { - // Runs TSC in .gbapp folder. if (process.env.GBAPP_DISABLE_COMPILE !== 'true') { @@ -896,7 +888,6 @@ export class GBDeployer implements IGBDeployer { } GBLog.info(`.gbapp or .gblib deployed: ${gbappPath}.`); appPackagesProcessed++; - } catch (error) { GBLog.error(`Error compiling package, message: ${error.message}\n${error.stack}`); if (error.stdout) { @@ -911,7 +902,7 @@ export class GBDeployer implements IGBDeployer { /** * Determines if a given package is of system kind. */ - private isSystemPackage(name: string): Boolean { + private isSystemPackage (name: string): Boolean { const names = [ 'analytics.gblib', 'console.gblib', @@ -935,8 +926,7 @@ export class GBDeployer implements IGBDeployer { /** * Performs the process of compiling all .gbapp folders. */ - private async deployAppPackages(gbappPackages: string[], core: any, appPackages: any[]) { - + private async deployAppPackages (gbappPackages: string[], core: any, appPackages: any[]) { // Loops through all ready to load .gbapp packages. let appPackagesProcessed = 0; diff --git a/packages/core.gbapp/services/GBImporterService.ts b/packages/core.gbapp/services/GBImporterService.ts index 7368b59a..fafb99d0 100644 --- a/packages/core.gbapp/services/GBImporterService.ts +++ b/packages/core.gbapp/services/GBImporterService.ts @@ -50,12 +50,16 @@ import { GBConfigService } from './GBConfigService.js'; export class GBImporter { public core: IGBCoreService; - constructor(core: IGBCoreService) { + constructor (core: IGBCoreService) { this.core = core; } - public async importIfNotExistsBotPackage(botId: string, - packageName: string, localPath: string, additionalInstance: IGBInstance = null) { + public async importIfNotExistsBotPackage ( + botId: string, + packageName: string, + localPath: string, + additionalInstance: IGBInstance = null + ) { const settingsJson = JSON.parse(Fs.readFileSync(urlJoin(localPath, 'settings.json'), 'utf8')); if (botId === undefined) { botId = settingsJson.botId; @@ -94,14 +98,14 @@ export class GBImporter { return await this.createOrUpdateInstanceInternal(instance, botId, localPath, settingsJson); } - public async createBotInstance(botId: string) { - const fullSettingsJson= { ...GBServer.globals.bootInstance }; + public async createBotInstance (botId: string) { + const fullSettingsJson = { ...GBServer.globals.bootInstance }; fullSettingsJson['botId'] = botId; return await GuaribasInstance.create(fullSettingsJson); } - private async createOrUpdateInstanceInternal( + private async createOrUpdateInstanceInternal ( instance: IGBInstance, botId: string, localPath: string, diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 413c6582..2095a16b 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -93,7 +93,6 @@ import * as nlp from 'node-nlp'; * Minimal service layer for a bot and encapsulation of BOT Framework calls. */ export class GBMinService { - /** * Default General Bots User Interface package. */ @@ -119,13 +118,12 @@ export class GBMinService { */ public deployer: GBDeployer; - bar1; /** * Static initialization of minimal instance. */ - constructor( + constructor ( core: IGBCoreService, conversationalService: IGBConversationalService, adminService: IGBAdminService, @@ -140,17 +138,15 @@ export class GBMinService { /** * Constructs a new minimal instance for each bot. */ - public async buildMin(instances: IGBInstance[]) { - + public async buildMin (instances: IGBInstance[]) { // Servers default UI on root address '/' if web enabled. if (process.env.DISABLE_WEB !== 'true') { - // SSR processing. const defaultOptions = { prerender: [], - exclude: ["/api/", "/instances/", "/webhooks/"], + exclude: ['/api/', '/instances/', '/webhooks/'], useCache: true, cacheRefreshRate: 86400 }; @@ -164,29 +160,31 @@ export class GBMinService { GBServer.globals.server.use('/', express.static(url)); - // Servers the bot information object via HTTP so clients can get // instance information stored on server. - GBServer.globals.server.get('/instances/:botId', this.handleGetInstanceForClient.bind(this)); } // Calls mountBot event to all bots. let i = 1; if (instances.length > 1) { - this.bar1 = new cliProgress.SingleBar({ - format: '[{bar}] ({value}/{total}) Loading {botId} ...', barsize: 40, - forceRedraw: true - }, cliProgress.Presets.rect); - this.bar1.start(instances.length, i, { botId: "Boot" }); + this.bar1 = new cliProgress.SingleBar( + { + format: '[{bar}] ({value}/{total}) Loading {botId} ...', + barsize: 40, + forceRedraw: true + }, + cliProgress.Presets.rect + ); + this.bar1.start(instances.length, i, { botId: 'Boot' }); } - const throttledPromiseAll = async (promises) => { + const throttledPromiseAll = async promises => { const MAX_IN_PROCESS = 20; const results = new Array(promises.length); - async function doBlock(startIndex) { + async function doBlock (startIndex) { // Shallow-copy a block of promises to work on const currBlock = promises.slice(startIndex, startIndex + MAX_IN_PROCESS); // Await the completion. If any fail, it will throw and that's good. @@ -203,19 +201,21 @@ export class GBMinService { return results; }; - await throttledPromiseAll(instances.map((async instance => { - try { - await this['mountBot'](instance); + await throttledPromiseAll( + instances.map( + (async instance => { + try { + await this['mountBot'](instance); - if (this.bar1) { - this.bar1.update(i++, { botId: instance.botId }); - } - - } catch (error) { - GBLog.error(`Error mounting bot ${instance.botId}: ${error.message}\n${error.stack}`); - } - - }).bind(this))); + if (this.bar1) { + this.bar1.update(i++, { botId: instance.botId }); + } + } catch (error) { + GBLog.error(`Error mounting bot ${instance.botId}: ${error.message}\n${error.stack}`); + } + }).bind(this) + ) + ); if (this.bar1) { this.bar1.stop(); } @@ -229,13 +229,11 @@ export class GBMinService { GBLog.info(`All Bot instances loaded.`); } - - /** * Removes bot endpoint from web listeners and remove bot instance * from list of global server bot instances. */ - public async unmountBot(botId: string) { + public async unmountBot (botId: string) { const url = `/api/messages/${botId}`; removeRoute(GBServer.globals.server, url); @@ -243,7 +241,6 @@ export class GBMinService { removeRoute(GBServer.globals.server, uiUrl); GBServer.globals.minInstances = GBServer.globals.minInstances.filter(p => p.instance.botId !== botId); - } /** @@ -251,8 +248,7 @@ export class GBMinService { * serving bot endpoint in several URL like WhatsApp endpoint, .gbkb assets, * installing all BASIC artifacts from .gbdialog and OAuth2. */ - public async mountBot(instance: IGBInstance) { - + public async mountBot (instance: IGBInstance) { // Build bot adapter. const { min, adapter, conversationState } = await this.buildBotAdapter( @@ -329,11 +325,11 @@ export class GBMinService { // Test code. if (process.env.TEST_MESSAGE) { - GBLog.info(`Starting auto test with '${process.env.TEST_MESSAGE}'.`); const client = await new Swagger({ - spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')), usePromise: true + spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')), + usePromise: true }); client.clientAuthorizations.add( 'AuthorizationBotConnector', @@ -351,7 +347,6 @@ export class GBMinService { }; await CollectionUtil.asyncForEach(steps, async step => { - client.Conversations.Conversations_PostActivity({ conversationId: conversationId, activity: { @@ -366,8 +361,6 @@ export class GBMinService { }); await sleep(5000); - - }); } @@ -411,25 +404,23 @@ export class GBMinService { this.createCheckHealthAddress(GBServer.globals.server, min, min.instance); - GBDeployer.mountGBKBAssets(`${instance.botId}.gbkb`, - instance.botId, `${instance.botId}.gbkb`); + GBDeployer.mountGBKBAssets(`${instance.botId}.gbkb`, instance.botId, `${instance.botId}.gbkb`); } - public static isChatAPI(req, res) { + public static isChatAPI (req, res) { if (!res) { - return "GeneralBots"; + return 'GeneralBots'; } - return req.body.phone_id ? "maytapi" : "chatapi"; + return req.body.phone_id ? 'maytapi' : 'chatapi'; } /** * Creates a listener that can be used by external monitors to check * bot instance health. */ - private createCheckHealthAddress(server: any, min: GBMinInstance, instance: IGBInstance) { + private createCheckHealthAddress (server: any, min: GBMinInstance, instance: IGBInstance) { server.get(`/${min.instance.botId}/check`, async (req, res) => { try { - // Performs the checking of WhatsApp API if enabled for this instance. if (min.whatsAppDirectLine != undefined && instance.whatsappServiceKey !== null) { @@ -445,9 +436,7 @@ export class GBMinService { // GB is OK, so 200. res.status(200).send(`General Bot ${min.botId} is healthly.`); - } catch (error) { - // GB is not OK, 500 and detail the information on response content. GBLog.error(error); @@ -460,10 +449,8 @@ export class GBMinService { * Handle OAuth2 web service calls for token requests * on https:////token URL. */ - private handleOAuthTokenRequests(server: any, min: GBMinInstance, instance: IGBInstance) { - + private handleOAuthTokenRequests (server: any, min: GBMinInstance, instance: IGBInstance) { server.get(`/${min.instance.botId}/token`, async (req, res) => { - // Checks request state by reading AntiCSRFAttackState from GB Admin infrastructure. const state = await min.adminService.getValue(instance.instanceId, 'AntiCSRFAttackState'); @@ -491,12 +478,11 @@ export class GBMinService { GBLog.error(msg); res.send(msg); } else { - // Saves token to the database. - await this.adminService.setValue(instance.instanceId, 'accessToken', token['accessToken']); + await this.adminService.setValue(instance.instanceId, 'accessToken', token['accessToken']); await this.adminService.setValue(instance.instanceId, 'refreshToken', token['refreshToken']); - await this.adminService.setValue(instance.instanceId, 'expiresOn', token['expiresOn'].toString()); + await this.adminService.setValue(instance.instanceId, 'expiresOn', token['expiresOn'].toString()); await this.adminService.setValue(instance.instanceId, 'AntiCSRFAttackState', undefined); // Inform the home for default .gbui after finishing token retrival. @@ -512,15 +498,16 @@ export class GBMinService { * Handle OAuth2 web service calls for authorization requests * on https:////auth URL. */ - private handleOAuthRequests(server: any, min: GBMinInstance) { + private handleOAuthRequests (server: any, min: GBMinInstance) { server.get(`/${min.instance.botId}/auth`, (req, res) => { let authorizationUrl = urlJoin( min.instance.authenticatorAuthorityHostUrl, min.instance.authenticatorTenant, '/oauth2/authorize' ); - authorizationUrl = `${authorizationUrl}?response_type=code&client_id=${min.instance.marketplaceId - }&redirect_uri=${urlJoin(min.instance.botEndpoint, min.instance.botId, 'token')}`; + authorizationUrl = `${authorizationUrl}?response_type=code&client_id=${ + min.instance.marketplaceId + }&redirect_uri=${urlJoin(min.instance.botEndpoint, min.instance.botId, 'token')}`; GBLog.info(`HandleOAuthRequests: ${authorizationUrl}.`); res.redirect(authorizationUrl); }); @@ -529,8 +516,7 @@ export class GBMinService { /** * Returns the instance object to clients requesting bot info. */ - private async handleGetInstanceForClient(req: any, res: any) { - + private async handleGetInstanceForClient (req: any, res: any) { // Translates the requested botId. let botId = req.params.botId; @@ -548,7 +534,6 @@ export class GBMinService { } if (instance !== null) { - // Gets the webchat token, speech token and theme. const webchatTokenContainer = await this.getWebchatToken(instance); @@ -561,7 +546,6 @@ export class GBMinService { theme = `default.gbtheme`; } - res.send( JSON.stringify({ instanceId: instance.instanceId, @@ -589,7 +573,7 @@ export class GBMinService { /** * Gets Webchat token from Bot Service. */ - private async getWebchatToken(instance: any) { + private async getWebchatToken (instance: any) { const options = { url: 'https://directline.botframework.com/v3/directline/tokens/generate', method: 'POST', @@ -612,7 +596,7 @@ export class GBMinService { /** * Gets a Speech to Text / Text to Speech token from the provider. */ - private async getSTSToken(instance: any) { + private async getSTSToken (instance: any) { const options = { url: instance.speechEndpoint, method: 'POST', @@ -633,17 +617,19 @@ export class GBMinService { /** * Builds the BOT Framework & GB infrastructures. */ - private async buildBotAdapter(instance: any, sysPackages: IGBPackage[], appPackages: IGBPackage[]) { - + private async buildBotAdapter (instance: any, sysPackages: IGBPackage[], appPackages: IGBPackage[]) { // MSFT stuff. - const adapter = new BotFrameworkAdapter( - { appId: instance.marketplaceId, appPassword: instance.marketplacePassword }); + const adapter = new BotFrameworkAdapter({ + appId: instance.marketplaceId, + appPassword: instance.marketplacePassword + }); const storage = new MemoryStorage(); const conversationState = new ConversationState(storage); const userState = new UserState(storage); adapter.use(new AutoSaveStateMiddleware(conversationState, userState)); - MicrosoftAppCredentials.trustServiceUrl('https://directline.botframework.com', + MicrosoftAppCredentials.trustServiceUrl( + 'https://directline.botframework.com', new Date(new Date().setFullYear(new Date().getFullYear() + 10)) ); @@ -662,9 +648,9 @@ export class GBMinService { min.cbMap = {}; min.scriptMap = {}; min.sandBoxMap = {}; - min["scheduleMap"] = {}; - min["conversationWelcomed"] = {}; - min["nerEngine"] = new nlp.default.NerManager(); + min['scheduleMap'] = {}; + min['conversationWelcomed'] = {}; + min['nerEngine'] = new nlp.default.NerManager(); min.packages = sysPackages; min.appPackages = appPackages; @@ -690,8 +676,6 @@ export class GBMinService { } }); - - if (min.instance.googlePrivateKey) { min['googleDirectLine'] = new GoogleChatDirectLine( min, @@ -706,11 +690,7 @@ export class GBMinService { await min['googleDirectLine'].setup(true); } - const group = min.core.getParam( - min.instance, - 'WhatsApp Group ID', - null, - ); + const group = min.core.getParam(min.instance, 'WhatsApp Group ID', null); WhatsappDirectLine.botGroups[min.botId] = group; @@ -769,8 +749,7 @@ export class GBMinService { /** * Performs calling of loadBot event in all .gbapps. */ - private async invokeLoadBot(appPackages: IGBPackage[], sysPackages: IGBPackage[], min: GBMinInstance) { - + private async invokeLoadBot (appPackages: IGBPackage[], sysPackages: IGBPackage[], min: GBMinInstance) { // Calls loadBot event in all .gbapp packages. await CollectionUtil.asyncForEach(sysPackages, async p => { @@ -804,22 +783,20 @@ export class GBMinService { } // TODO: Unify in util. - public static userMobile(step) { - let mobile = WhatsappDirectLine.mobiles[step.context.activity.conversation.id] + public static userMobile (step) { + let mobile = WhatsappDirectLine.mobiles[step.context.activity.conversation.id]; if (!mobile && step) { return step.context.activity.from.id; } return mobile; - } - /** * BOT Framework web service hook method. */ - private async receiver( + private async receiver ( req: any, res: any, conversationState: ConversationState, @@ -827,7 +804,6 @@ export class GBMinService { instance: any, appPackages: any[] ) { - let adapter = min.bot; if (req.body.object) { @@ -849,13 +825,10 @@ export class GBMinService { step.context.activity.locale = 'pt-BR'; let firstTime = false; - try { const sec = new SecService(); const user = await min.userProfile.get(context, {}); - const conversationReference = JSON.stringify( - TurnContext.getConversationReference(context.activity) - ); + const conversationReference = JSON.stringify(TurnContext.getConversationReference(context.activity)); // First time processing. @@ -868,7 +841,7 @@ export class GBMinService { user.subjects = []; user.cb = undefined; user.welcomed = false; - user.basicOptions = { maxLines: 100, translatorOn: true, wholeWord: true, theme: "white", maxColumns: 40 }; + user.basicOptions = { maxLines: 100, translatorOn: true, wholeWord: true, theme: 'white', maxColumns: 40 }; firstTime = true; @@ -876,7 +849,6 @@ export class GBMinService { // including the bot, that is filtered bellow. if (context.activity.from.id !== min.botId) { - // Creates a new row in user table if it does not exists. const member = context.activity.from; @@ -894,7 +866,6 @@ export class GBMinService { const analytics = new AnalyticsService(); user.systemUser = persistedUser; user.conversation = await analytics.createConversation(persistedUser); - } await sec.updateConversationReferenceById(user.systemUser.userId, conversationReference); @@ -919,27 +890,35 @@ export class GBMinService { // Required for MSTEAMS handling of persisted conversations. if (step.context.activity.channelId === 'msteams') { - if (step.context.activity.attachments && step.context.activity.attachments.length > 1) { - const file = context.activity.attachments[0]; - const credentials = new MicrosoftAppCredentials(min.instance.marketplaceId, min.instance.marketplacePassword); + const credentials = new MicrosoftAppCredentials( + min.instance.marketplaceId, + min.instance.marketplacePassword + ); const botToken = await credentials.getToken(); const headers = { Authorization: `Bearer ${botToken}` }; const t = new SystemKeywords(null, null, null, null); const data = await t.getByHttp({ - url: file.contentUrl, headers, username: null, - ps: null, qs: null, streaming: true + url: file.contentUrl, + headers, + username: null, + ps: null, + qs: null, + streaming: true }); const folder = `work/${min.instance.botId}.gbai/cache`; const filename = `${GBAdminService.generateUuid()}.png`; Fs.writeFileSync(path.join(folder, filename), data); - step.context.activity.text = urlJoin(GBServer.globals.publicAddress, `${min.instance.botId}`, 'cache', filename); + step.context.activity.text = urlJoin( + GBServer.globals.publicAddress, + `${min.instance.botId}`, + 'cache', + filename + ); } - - if (!user.welcomed) { const startDialog = min.core.getParam(min.instance, 'Start Dialog', null); if (startDialog && !user.welcomed) { @@ -952,7 +931,11 @@ export class GBMinService { // Required for F0 handling of persisted conversations. - GBLog.info(`Input> ${context.activity.text} (type: ${context.activity.type}, name: ${context.activity.name}, channelId: ${context.activity.channelId})`); + GBLog.info( + `Input> ${context.activity.text} (type: ${context.activity.type}, name: ${ + context.activity.name + }, channelId: ${context.activity.channelId})` + ); // Answer to specific BOT Framework event conversationUpdate to auto start dialogs. // Skips if the bot is talking. @@ -960,9 +943,7 @@ export class GBMinService { if (context.activity.type === 'installationUpdate') { GBLog.info(`Bot installed on Teams.`); - } else if (context.activity.type === 'conversationUpdate' && - context.activity.membersAdded.length > 0) { - + } else if (context.activity.type === 'conversationUpdate' && context.activity.membersAdded.length > 0) { // Check if a bot or a human participant is being added to the conversation. const member = context.activity.membersAdded[0]; @@ -978,45 +959,46 @@ export class GBMinService { // Auto starts dialogs if any is specified. if (!startDialog && !user.welcomed) { - // Otherwise, calls / (root) to default welcome users. await step.beginDialog('/'); - } - else { - if (!GBMinService.userMobile(step) && - !min["conversationWelcomed"][step.context.activity.conversation.id]) { + } else { + if ( + !GBMinService.userMobile(step) && + !min['conversationWelcomed'][step.context.activity.conversation.id] + ) { + min['conversationWelcomed'][step.context.activity.conversation.id] = true; - min["conversationWelcomed"][step.context.activity.conversation.id] = true; - - GBLog.info(`Auto start (web 1) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`); + GBLog.info( + `Auto start (web 1) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...` + ); await GBVMService.callVM(startDialog.toLowerCase(), min, step, this.deployer, false); } } - } else { GBLog.info(`Person added to conversation: ${member.name}`); if (GBMinService.userMobile(step)) { - if (startDialog && !min["conversationWelcomed"][step.context.activity.conversation.id] && - !step.context.activity['group']) { + if ( + startDialog && + !min['conversationWelcomed'][step.context.activity.conversation.id] && + !step.context.activity['group'] + ) { user.welcomed = true; - min["conversationWelcomed"][step.context.activity.conversation.id] = true; + min['conversationWelcomed'][step.context.activity.conversation.id] = true; await min.userProfile.set(step.context, user); - GBLog.info(`Auto start (whatsapp) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`); + GBLog.info( + `Auto start (whatsapp) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...` + ); await GBVMService.callVM(startDialog.toLowerCase(), min, step, this.deployer, false); } } } - } else if (context.activity.type === 'message') { - // Processes messages activities. await this.processMessageActivity(context, min, step); - } else if (context.activity.type === 'event') { - // Processes events activities. await this.processEventActivity(min, user, context, step); @@ -1025,9 +1007,7 @@ export class GBMinService { // Saves conversation state for later use. await conversationState.saveChanges(context, true); - } catch (error) { - const msg = `ERROR: ${error.message} ${error.stack ? error.stack : ''}`; GBLog.error(msg); @@ -1045,8 +1025,7 @@ export class GBMinService { /** * Called to handle all event sent by .gbui clients. */ - private async processEventActivity(min, user, context, step: GBDialogStep) { - + private async processEventActivity (min, user, context, step: GBDialogStep) { if (context.activity.name === 'whoAmI') { await step.beginDialog('/whoAmI'); } else if (context.activity.name === 'showSubjects') { @@ -1068,7 +1047,7 @@ export class GBMinService { }); } else if (context.activity.name === 'startGB') { const startDialog = min.core.getParam(min.instance, 'Start Dialog', null); - if (startDialog && !min["conversationWelcomed"][step.context.activity.conversation.id]) { + if (startDialog && !min['conversationWelcomed'][step.context.activity.conversation.id]) { user.welcomed = true; GBLog.info(`Auto start (web 2) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`); await GBVMService.callVM(startDialog.toLowerCase(), min, step, this.deployer, false); @@ -1084,8 +1063,7 @@ export class GBMinService { /** * Called to handle all text messages sent and received by the bot. */ - private async processMessageActivity(context, min: GBMinInstance, step: GBDialogStep) { - + private async processMessageActivity (context, min: GBMinInstance, step: GBDialogStep) { const sec = new SecService(); if (!context.activity.text) { @@ -1110,12 +1088,10 @@ export class GBMinService { const user = await min.userProfile.get(context, {}); let message: GuaribasConversationMessage; if (process.env.PRIVACY_STORE_MESSAGES === 'true') { - // Adds message to the analytics layer. const analytics = new AnalyticsService(); if (user) { - if (!user.conversation) { user.conversation = await analytics.createConversation(user.systemUser); } @@ -1141,22 +1117,18 @@ export class GBMinService { if (isVMCall) { await GBVMService.callVM(context.activity.text, min, step, this.deployer, false); } else if (context.activity.text.charAt(0) === '/') { - const text = context.activity.text; const parts = text.split(' '); const cmdOrDialogName = parts[0]; parts.splice(0, 1); const args = parts.join(' '); if (cmdOrDialogName === '/start') { - - // Reset user. const user = await min.userProfile.get(context, {}); await min.conversationalService.sendEvent(min, step, 'loadInstance', {}); user.loaded = false; await min.userProfile.set(step.context, user); - } else if (cmdOrDialogName === '/call') { await GBVMService.callVM(args, min, step, this.deployer, false); } else if (cmdOrDialogName === '/callsch') { @@ -1169,23 +1141,21 @@ export class GBMinService { } else if (globalQuit(step.context.activity.locale, context.activity.text)) { await step.cancelAllDialogs(); await min.conversationalService.sendText(min, step, Messages[step.context.activity.locale].canceled); - } else if (context.activity.text === 'admin') { await step.beginDialog('/admin'); - } else if (context.activity.text.startsWith('{"title"')) { await step.beginDialog('/menu', JSON.parse(context.activity.text)); - } else if ( !(await this.deployer.getStoragePackageByName(min.instance.instanceId, `${min.instance.botId}.gbkb`)) && process.env.GBKB_ENABLE_AUTO_PUBLISH === 'true' ) { - await min.conversationalService.sendText(min, step, + await min.conversationalService.sendText( + min, + step, `Oi, ainda não possuo pacotes de conhecimento publicados. Por favor, aguarde alguns segundos enquanto eu auto-publico alguns pacotes.` ); await step.beginDialog('/publish', { confirm: true, firstTime: true }); } else { - // Removes unwanted chars in input text. let text = context.activity.text; @@ -1208,7 +1178,7 @@ export class GBMinService { } }); - const getNormalizedRegExp = (value) => { + const getNormalizedRegExp = value => { var chars = [ { letter: 'a', reg: '[aáàãäâ]' }, { letter: 'e', reg: '[eéèëê]' }, @@ -1220,7 +1190,7 @@ export class GBMinService { for (var i in chars) { value = value.replace(new RegExp(chars[i].letter, 'gi'), chars[i].reg); - }; + } return value; }; @@ -1236,7 +1206,10 @@ export class GBMinService { const replacementToken = 'X' + GBAdminService.getNumberIdentifier().substr(0, 4); replacements[i] = { text: item, replacementToken: replacementToken }; i++; - textProcessed = textProcessed.replace(new RegExp(`\\b${getNormalizedRegExp(it.trim())}\\b`, 'gi'), `${replacementToken}`); + textProcessed = textProcessed.replace( + new RegExp(`\\b${getNormalizedRegExp(it.trim())}\\b`, 'gi'), + `${replacementToken}` + ); } }); } @@ -1248,18 +1221,22 @@ export class GBMinService { // Detects user typed language and updates their locale profile if applies. - let locale = min.core.getParam(min.instance, 'Default User Language', + let locale = min.core.getParam( + min.instance, + 'Default User Language', GBConfigService.get('DEFAULT_USER_LANGUAGE') ); - const detectLanguage = min.core.getParam(min.instance, 'Language Detector', - GBConfigService.getBoolean('LANGUAGE_DETECTOR') - ) === 'true'; + const detectLanguage = + min.core.getParam( + min.instance, + 'Language Detector', + GBConfigService.getBoolean('LANGUAGE_DETECTOR') + ) === 'true'; const systemUser = user.systemUser; locale = systemUser.locale; if (text != '' && detectLanguage && !locale) { locale = await min.conversationalService.getLanguage(min, text); if (systemUser.locale != locale) { - user.systemUser = await sec.updateUserLocale(systemUser.userId, locale); await min.userProfile.set(step.context, user); } @@ -1308,32 +1285,32 @@ export class GBMinService { const message = await min.kbService.getAnswerTextByMediaName(min.instance.instanceId, filename); if (message === null) { - GBLog.error(`File ${filename} not found in any .gbkb published. Check the name or publish again the associated .gbkb.`); + GBLog.error( + `File ${filename} not found in any .gbkb published. Check the name or publish again the associated .gbkb.` + ); } else { await min.conversationalService.sendMarkdownToMobile(min, null, manualUser.userSystemId, message); } + } else { + await min.whatsAppDirectLine.sendToDeviceEx( + manualUser.userSystemId, + `${manualUser.agentSystemId}: ${text}`, + locale, + step.context.activity.conversation.id + ); } - else { - await min.whatsAppDirectLine.sendToDeviceEx(manualUser.userSystemId, `${manualUser.agentSystemId}: ${text}`, locale, - step.context.activity.conversation.id); - } - } - else { - - if (min.cbMap[user.systemUser.userId] && - min.cbMap[user.systemUser.userId].promise == '!GBHEAR') { + } else { + if (min.cbMap[user.systemUser.userId] && min.cbMap[user.systemUser.userId].promise == '!GBHEAR') { min.cbMap[user.systemUser.userId].promise = text; } // If there is a dialog in course, continue to the next step. - else if (step.activeDialog !== undefined) { await step.continueDialog(); } else { - - const startDialog = user.hearOnDialog ? - user.hearOnDialog : - min.core.getParam(min.instance, 'Start Dialog', null); + const startDialog = user.hearOnDialog + ? user.hearOnDialog + : min.core.getParam(min.instance, 'Start Dialog', null); if (text !== startDialog) { let nextDialog = null; @@ -1357,7 +1334,6 @@ export class GBMinService { user: user ? user.dataValues : null, message: message }); - } } } diff --git a/packages/core.gbapp/services/GBSSR.ts b/packages/core.gbapp/services/GBSSR.ts index de1adcf8..3148c4c7 100644 --- a/packages/core.gbapp/services/GBSSR.ts +++ b/packages/core.gbapp/services/GBSSR.ts @@ -31,7 +31,7 @@ \*****************************************************************************/ /** - * @fileoverview General Bots SSR support based on https://www.npmjs.com/package/ssr-for-bots. + * @fileoverview General Bots SSR support based on https://www.npmjs.com/package/ssr-for-bots. */ 'use strict'; @@ -42,302 +42,284 @@ import Fs from 'fs'; // const StealthPlugin from 'puppeteer-extra-plugin-stealth') // puppeteer.use(StealthPlugin()); -import { NextFunction, Request, Response } from "express"; -import urljoin from "url-join"; - +import { NextFunction, Request, Response } from 'express'; +import urljoin from 'url-join'; // https://hackernoon.com/tips-and-tricks-for-web-scraping-with-puppeteer-ed391a63d952 // Dont download all resources, we just need the HTML // Also, this is huge performance/response time boost -const blockedResourceTypes = [ - "image", - "media", - "font", - "texttrack", - "object", - "beacon", - "csp_report", - "imageset", -]; +const blockedResourceTypes = ['image', 'media', 'font', 'texttrack', 'object', 'beacon', 'csp_report', 'imageset']; // const whitelist = ["document", "script", "xhr", "fetch"]; const skippedResources = [ - "quantserve", - "adzerk", - "doubleclick", - "adition", - "exelator", - "sharethrough", - "cdn.api.twitter", - "google-analytics", - "googletagmanager", - "google", - "fontawesome", - "facebook", - "analytics", - "optimizely", - "clicktale", - "mixpanel", - "zedo", - "clicksor", - "tiqcdn", + 'quantserve', + 'adzerk', + 'doubleclick', + 'adition', + 'exelator', + 'sharethrough', + 'cdn.api.twitter', + 'google-analytics', + 'googletagmanager', + 'google', + 'fontawesome', + 'facebook', + 'analytics', + 'optimizely', + 'clicktale', + 'mixpanel', + 'zedo', + 'clicksor', + 'tiqcdn' ]; const RENDER_CACHE = new Map(); +async function createBrowser (profilePath): Promise { + let args = [ + '--check-for-update-interval=2592000', + '--disable-accelerated-2d-canvas', + '--disable-dev-shm-usage', + '--disable-features=site-per-process', + '--disable-gpu', + '--no-first-run', + '--no-default-browser-check' + ]; + if (profilePath) { + args.push(`--user-data-dir=${profilePath}`); -async function createBrowser(profilePath): Promise { - - let args = [ - '--check-for-update-interval=2592000', - '--disable-accelerated-2d-canvas', - '--disable-dev-shm-usage', - '--disable-features=site-per-process', - '--disable-gpu', - '--no-first-run', - '--no-default-browser-check' - ]; - - if (profilePath) { - args.push(`--user-data-dir=${profilePath}`); - - const preferences = urljoin(profilePath, "Default", "Preferences"); - if (Fs.existsSync(preferences)) { - const file = Fs.readFileSync(preferences, "utf8") - const data = JSON.parse(file) - data["profile"]['exit_type'] = "none"; - Fs.writeFileSync(preferences, JSON.stringify(data)) - } + const preferences = urljoin(profilePath, 'Default', 'Preferences'); + if (Fs.existsSync(preferences)) { + const file = Fs.readFileSync(preferences, 'utf8'); + const data = JSON.parse(file); + data['profile']['exit_type'] = 'none'; + Fs.writeFileSync(preferences, JSON.stringify(data)); } - - const browser = await puppeteer.launch({ - args: args, - ignoreHTTPSErrors: true, - headless: false, - defaultViewport: null, - ignoreDefaultArgs: ["--enable-automation", "--enable-blink-features=IdleDetection"] - }); - return browser; + } + + const browser = await puppeteer.launch({ + args: args, + ignoreHTTPSErrors: true, + headless: false, + defaultViewport: null, + ignoreDefaultArgs: ['--enable-automation', '--enable-blink-features=IdleDetection'] + }); + return browser; } -async function recursiveFindInFrames(inputFrame, selector) { - const frames = inputFrame.childFrames(); - const results = await Promise.all( - frames.map(async frame => { - const el = await frame.$(selector); - if (el) return el; - if (frame.childFrames().length > 0) { - return await recursiveFindInFrames(frame, selector); - } - return null; - }) - ); - return results.find(Boolean); +async function recursiveFindInFrames (inputFrame, selector) { + const frames = inputFrame.childFrames(); + const results = await Promise.all( + frames.map(async frame => { + const el = await frame.$(selector); + if (el) return el; + if (frame.childFrames().length > 0) { + return await recursiveFindInFrames(frame, selector); + } + return null; + }) + ); + return results.find(Boolean); } - - - /** * https://developers.google.com/web/tools/puppeteer/articles/ssr#reuseinstance * @param {string} url URL to prerender. */ -async function ssr(url: string, useCache: boolean, cacheRefreshRate: number) { - if (RENDER_CACHE.has(url) && useCache) { - const cached = RENDER_CACHE.get(url); - if ( - Date.now() - cached.renderedAt > cacheRefreshRate && - !(cacheRefreshRate <= 0) - ) { - RENDER_CACHE.delete(url); - } else { - return { - html: cached.html, - status: 200, - }; - } +async function ssr (url: string, useCache: boolean, cacheRefreshRate: number) { + if (RENDER_CACHE.has(url) && useCache) { + const cached = RENDER_CACHE.get(url); + if (Date.now() - cached.renderedAt > cacheRefreshRate && !(cacheRefreshRate <= 0)) { + RENDER_CACHE.delete(url); + } else { + return { + html: cached.html, + status: 200 + }; } - const browser = await createBrowser(null); - const stylesheetContents = {}; + } + const browser = await createBrowser(null); + const stylesheetContents = {}; - try { - const page = await browser.newPage(); - await page.setUserAgent( - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" - ); - await page.setRequestInterception(true); - page.on("request", (request) => { - const requestUrl = request.url().split("?")[0].split("#")[0]; - if ( - blockedResourceTypes.indexOf(request.resourceType()) !== -1 || - skippedResources.some((resource) => requestUrl.indexOf(resource) !== -1) - ) { - request.abort(); - } else { - request.continue(); - } + try { + const page = await browser.newPage(); + await page.setUserAgent( + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36' + ); + await page.setRequestInterception(true); + page.on('request', request => { + const requestUrl = request + .url() + .split('?')[0] + .split('#')[0]; + if ( + blockedResourceTypes.indexOf(request.resourceType()) !== -1 || + skippedResources.some(resource => requestUrl.indexOf(resource) !== -1) + ) { + request.abort(); + } else { + request.continue(); + } + }); + + page.on('response', async resp => { + const responseUrl = resp.url(); + const sameOrigin = new URL(responseUrl).origin === new URL(url).origin; + const isStylesheet = resp.request().resourceType() === 'stylesheet'; + if (sameOrigin && isStylesheet) { + stylesheetContents[responseUrl] = await resp.text(); + } + }); + + const response = await page.goto(url, { + timeout: 120000, + waitUntil: 'networkidle0' + }); + + const sleep = ms => { + return new Promise(resolve => { + setTimeout(resolve, ms); + }); + }; + await sleep(45000); + + // Inject on page to relative resources load properly. + await page.evaluate(url => { + const base = document.createElement('base'); + base.href = url; + // Add to top of head, before all other resources. + document.head.prepend(base); + }, url); + + // Remove scripts and html imports. They've already executed. + await page.evaluate(() => { + const elements = document.querySelectorAll('script, link[rel="import"]'); + elements.forEach(e => { + e.remove(); + }); + }); + + // Replace stylesheets in the page with their equivalent