From 126019f46e890869f805543062ca89515648de90 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Mar 2022 23:32:50 +0000 Subject: [PATCH 01/51] chore(deps): bump urijs from 1.19.8 to 1.19.9 Bumps [urijs](https://github.com/medialize/URI.js) from 1.19.8 to 1.19.9. - [Release notes](https://github.com/medialize/URI.js/releases) - [Changelog](https://github.com/medialize/URI.js/blob/gh-pages/CHANGELOG.md) - [Commits](https://github.com/medialize/URI.js/compare/v1.19.8...v1.19.9) --- updated-dependencies: - dependency-name: urijs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4f854ea..6e6971c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "citycoins-api", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "citycoins-api", - "version": "1.0.0", + "version": "1.1.0", "license": "MIT OR Apache-2.0", "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", @@ -6702,9 +6702,9 @@ } }, "node_modules/urijs": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.8.tgz", - "integrity": "sha512-iIXHrjomQ0ZCuDRy44wRbyTZVnfVNLVo3Ksz1yxNyE5wV1IDZW2S5Jszy45DTlw/UdsnRT7DyDhIz7Gy+vJumw==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.9.tgz", + "integrity": "sha512-v0V+v5F3NQFt6TX0GpA2NKyrpythDJI+PHRo66sUIDP/U6cXbm6NqLVcXylQGwiwW5VYNj+OAei3EU0ALj9AWg==", "dev": true }, "node_modules/url-search-params": { @@ -12403,9 +12403,9 @@ } }, "urijs": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.8.tgz", - "integrity": "sha512-iIXHrjomQ0ZCuDRy44wRbyTZVnfVNLVo3Ksz1yxNyE5wV1IDZW2S5Jszy45DTlw/UdsnRT7DyDhIz7Gy+vJumw==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.9.tgz", + "integrity": "sha512-v0V+v5F3NQFt6TX0GpA2NKyrpythDJI+PHRo66sUIDP/U6cXbm6NqLVcXylQGwiwW5VYNj+OAei3EU0ALj9AWg==", "dev": true }, "url-search-params": { From 652f0e0acae6270a86d173d2f2cb31106874e3e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Mar 2022 23:42:04 +0000 Subject: [PATCH 02/51] chore(deps): bump urijs from 1.19.9 to 1.19.10 Bumps [urijs](https://github.com/medialize/URI.js) from 1.19.9 to 1.19.10. - [Release notes](https://github.com/medialize/URI.js/releases) - [Changelog](https://github.com/medialize/URI.js/blob/gh-pages/CHANGELOG.md) - [Commits](https://github.com/medialize/URI.js/compare/v1.19.9...v1.19.10) --- updated-dependencies: - dependency-name: urijs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e6971c..d253b47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6702,9 +6702,9 @@ } }, "node_modules/urijs": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.9.tgz", - "integrity": "sha512-v0V+v5F3NQFt6TX0GpA2NKyrpythDJI+PHRo66sUIDP/U6cXbm6NqLVcXylQGwiwW5VYNj+OAei3EU0ALj9AWg==", + "version": "1.19.10", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.10.tgz", + "integrity": "sha512-EzauQlgKuJgsXOqoMrCiePBf4At5jVqRhXykF3Wfb8ZsOBMxPcfiVBcsHXug4Aepb/ICm2PIgqAUGMelgdrWEg==", "dev": true }, "node_modules/url-search-params": { @@ -12403,9 +12403,9 @@ } }, "urijs": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.9.tgz", - "integrity": "sha512-v0V+v5F3NQFt6TX0GpA2NKyrpythDJI+PHRo66sUIDP/U6cXbm6NqLVcXylQGwiwW5VYNj+OAei3EU0ALj9AWg==", + "version": "1.19.10", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.10.tgz", + "integrity": "sha512-EzauQlgKuJgsXOqoMrCiePBf4At5jVqRhXykF3Wfb8ZsOBMxPcfiVBcsHXug4Aepb/ICm2PIgqAUGMelgdrWEg==", "dev": true }, "url-search-params": { From df9c125c021c9c567ece186ce80d9d2e7e9f6383 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Mar 2022 18:08:31 +0000 Subject: [PATCH 03/51] chore(deps): bump minimist from 1.2.5 to 1.2.6 Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d253b47..36583a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5514,9 +5514,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/mkdirp": { @@ -11534,9 +11534,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mkdirp": { From e8b1d804d925aef05faa33846593f2a2845f5d59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Apr 2022 00:16:51 +0000 Subject: [PATCH 04/51] chore(deps): bump urijs from 1.19.10 to 1.19.11 Bumps [urijs](https://github.com/medialize/URI.js) from 1.19.10 to 1.19.11. - [Release notes](https://github.com/medialize/URI.js/releases) - [Changelog](https://github.com/medialize/URI.js/blob/gh-pages/CHANGELOG.md) - [Commits](https://github.com/medialize/URI.js/compare/v1.19.10...v1.19.11) --- updated-dependencies: - dependency-name: urijs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36583a8..b0e2a72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6702,9 +6702,9 @@ } }, "node_modules/urijs": { - "version": "1.19.10", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.10.tgz", - "integrity": "sha512-EzauQlgKuJgsXOqoMrCiePBf4At5jVqRhXykF3Wfb8ZsOBMxPcfiVBcsHXug4Aepb/ICm2PIgqAUGMelgdrWEg==", + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", "dev": true }, "node_modules/url-search-params": { @@ -12403,9 +12403,9 @@ } }, "urijs": { - "version": "1.19.10", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.10.tgz", - "integrity": "sha512-EzauQlgKuJgsXOqoMrCiePBf4At5jVqRhXykF3Wfb8ZsOBMxPcfiVBcsHXug4Aepb/ICm2PIgqAUGMelgdrWEg==", + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", "dev": true }, "url-search-params": { From 0b5b4ab8e6a83b7883b16a4849ab8dcebee16f48 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 6 May 2022 00:02:11 -0700 Subject: [PATCH 05/51] fix: update deployer and contract names to v2 --- src/types/cities.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/types/cities.ts b/src/types/cities.ts index 96b02f5..7a9a613 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -18,6 +18,7 @@ const emptyConfig: CityConfig = { tokenSymbol: '', } +/* const miaConfig: CityConfig = { deployer: "SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27", authContract: "miamicoin-auth", @@ -27,7 +28,19 @@ const miaConfig: CityConfig = { tokenName: "miamicoin", tokenSymbol: "MIA", }; +*/ +const miaConfig: CityConfig = { + deployer: "SP1H1733V5MZ3SZ9XRW9FKYGEZT0JDGEB8Y634C7R", + authContract: "miamicoin-auth-v2", + coreContract: "miamicoin-core-v2", + tokenContract: "miamicoin-token-v2", + tokenDisplayName: "MiamiCoin", + tokenName: "miamicoin", + tokenSymbol: "MIA", +}; + +/* const nycConfig: CityConfig = { deployer: "SP2H8PY27SEZ03MWRKS5XABZYQN17ETGQS3527SA5", authContract: "newyorkcitycoin-auth", @@ -37,6 +50,17 @@ const nycConfig: CityConfig = { tokenName: "newyorkcitycoin", tokenSymbol: "NYC", }; +*/ + +const nycConfig: CityConfig = { + deployer: "SPSCWDV3RKV5ZRN1FQD84YE1NQFEDJ9R1F4DYQ11", + authContract: "newyorkcitycoin-auth-v2", + coreContract: "newyorkcitycoin-core-v2", + tokenContract: "newyorkcitycoin-token-v2", + tokenDisplayName: "NewYorkCityCoin", + tokenName: "newyorkcitycoin", + tokenSymbol: "NYC", +}; export async function getCityConfig(city: string): Promise { switch (city.toLowerCase()) { From fed3fa78d583e290a09306631c82664eca61e339 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 9 May 2022 11:38:46 -0700 Subject: [PATCH 06/51] fix: update packages and dependencies --- package-lock.json | 8488 +++++++++++++++++---------------------------- package.json | 30 +- 2 files changed, 3114 insertions(+), 5404 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0e2a72..3d8269b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,64 +10,83 @@ "license": "MIT OR Apache-2.0", "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", - "itty-router": "^2.4.10", - "micro-stacks": "^0.2.2" + "itty-router": "^2.6.1", + "micro-stacks": "^0.3.0" }, "devDependencies": { - "@cloudflare/workers-types": "^3.0.0", - "@types/jest": "^26.0.23", + "@cloudflare/workers-types": "^3.9.0", + "@types/jest": "^27.5.0", "@types/service-worker-mock": "^2.0.1", - "@typescript-eslint/eslint-plugin": "^4.16.1", - "@typescript-eslint/parser": "^4.16.1", - "eslint": "^7.21.0", - "eslint-config-prettier": "^8.1.0", + "@typescript-eslint/eslint-plugin": "^5.23.0", + "@typescript-eslint/parser": "^5.23.0", + "eslint": "^8.15.0", + "eslint-config-prettier": "^8.5.0", "eslint-config-typescript": "^3.0.0", - "jest": "^27.0.1", - "prettier": "^2.3.0", + "jest": "^28.1.0", + "prettier": "^2.6.2", "service-worker-mock": "^2.0.5", - "ts-jest": "^27.0.1", - "ts-loader": "^9.2.2", - "typescript": "^4.3.2", - "webpack": "^5.38.1", - "webpack-cli": "^4.7.0" + "ts-jest": "^28.0.2", + "ts-loader": "^9.3.0", + "typescript": "^4.6.4", + "webpack": "^5.72.0", + "webpack-cli": "^4.9.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", - "dev": true + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", + "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", + "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.10", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.10", + "@babel/types": "^7.17.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "json5": "^2.2.1", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -77,15 +96,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -95,46 +105,34 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", + "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", "dev": true, "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, + "@babel/types": "^7.17.10", + "@jridgewell/gen-mapping": "^0.1.0", + "jsesc": "^2.5.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", + "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.16.6", + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } @@ -148,137 +146,151 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { @@ -353,9 +365,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", + "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -497,72 +509,68 @@ } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", + "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", + "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.10", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.10", + "@babel/types": "^7.17.10", "debug": "^4.1.0", "globals": "^11.1.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/globals": { @@ -575,13 +583,16 @@ } }, "node_modules/@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", + "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { @@ -599,9 +610,9 @@ } }, "node_modules/@cloudflare/workers-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.0.0.tgz", - "integrity": "sha512-RsasworfxdRyZC2iBN2Okgziydaq52uTStENePdH2JTmoA0bki53jOchvznk+ezu34WyXQLDpk4ogGyQ6BSVkw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.9.0.tgz", + "integrity": "sha512-juyc/T+0QlwB4p7mTPoxS87RlHjceXJdCWwbGAQ5l3dO5xSDymW41wYx6f6LYe51fLccpjibj56UvqKeec2SSw==", "dev": true }, "node_modules/@discoveryjs/json-ext": { @@ -614,48 +625,44 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", + "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.9.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.10.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -673,6 +680,28 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -692,88 +721,63 @@ } }, "node_modules/@jest/console": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", - "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", + "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.2", - "jest-util": "^27.0.2", + "jest-message-util": "^28.1.0", + "jest-util": "^28.1.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/core": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.3.tgz", - "integrity": "sha512-rN8lr/OJ8iApcQUh4khnMaOCVX4oRnLwy2tPW3Vh70y62K8Da8fhkxMUq0xX9VPa4+yWUm0tGc/jUSJi+Jzuwg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", + "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", "dev": true, "dependencies": { - "@jest/console": "^27.0.2", - "@jest/reporters": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^28.1.0", + "@jest/reporters": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.2", - "jest-config": "^27.0.3", - "jest-haste-map": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.2", - "jest-resolve-dependencies": "^27.0.3", - "jest-runner": "^27.0.3", - "jest-runtime": "^27.0.3", - "jest-snapshot": "^27.0.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "jest-watcher": "^27.0.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.0.2", + "jest-config": "^28.1.0", + "jest-haste-map": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.0", + "jest-resolve-dependencies": "^28.1.0", + "jest-runner": "^28.1.0", + "jest-runtime": "^28.1.0", + "jest-snapshot": "^28.1.0", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "jest-watcher": "^28.1.0", "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", + "pretty-format": "^28.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -781,188 +785,146 @@ } } }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/environment": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.3.tgz", - "integrity": "sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3" + "node": ">=10" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true }, - "node_modules/@jest/fake-timers": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.3.tgz", - "integrity": "sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==", + "node_modules/@jest/environment": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", + "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "@sinonjs/fake-timers": "^7.0.2", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" + "jest-mock": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/@jest/expect": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", + "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "expect": "^28.1.0", + "jest-snapshot": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/globals": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.3.tgz", - "integrity": "sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==", + "node_modules/@jest/expect-utils": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.0.tgz", + "integrity": "sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.3", - "@jest/types": "^27.0.2", - "expect": "^27.0.2" + "jest-get-type": "^28.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/@jest/fake-timers": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", + "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/types": "^28.1.0", + "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "jest-message-util": "^28.1.0", + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "node_modules/@jest/globals": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.0.tgz", + "integrity": "sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "@jest/environment": "^28.1.0", + "@jest/expect": "^28.1.0", + "@jest/types": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.2.tgz", - "integrity": "sha512-SVQjew/kafNxSN1my4praGQP+VPVGHsU8zqiEDppLvq6j1lryIjdNb9P+bZSsKeifU4bIoaPnf9Ui0tK9WOpFA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.0.tgz", + "integrity": "sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", + "@jridgewell/trace-mapping": "^0.3.7", + "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.2", - "jest-resolve": "^27.0.2", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "istanbul-reports": "^3.1.3", + "jest-util": "^28.1.0", + "jest-worker": "^28.1.0", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" + "v8-to-istanbul": "^9.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -970,162 +932,179 @@ } } }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", + "node_modules/@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", "dev": true, "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" + "@sinclair/typebox": "^0.23.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/test-result": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", - "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", + "node_modules/@jest/source-map": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", + "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", "dev": true, "dependencies": { - "@jest/console": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@jridgewell/trace-mapping": "^0.3.7", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/@jest/test-result": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", + "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", "dev": true, "dependencies": { + "@jest/console": "^28.1.0", + "@jest/types": "^28.1.0", "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.3.tgz", - "integrity": "sha512-DcLTzraZ8xLr5fcIl+CF14vKeBBpBrn55wFxI9Ju+dhEBdjRdJQ/Z/pLkMehkPZWIQ+rR23J8e+wFDkfjree0Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", + "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", "dev": true, "dependencies": { - "@jest/test-result": "^27.0.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-runtime": "^27.0.3" + "@jest/test-result": "^28.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/transform": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.2.tgz", - "integrity": "sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.0.tgz", + "integrity": "sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.0.2", - "babel-plugin-istanbul": "^6.0.0", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.0", + "@jridgewell/trace-mapping": "^0.3.7", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.0", "micromatch": "^4.0.4", - "pirates": "^4.0.1", + "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/transform/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", "dev": true, "dependencies": { + "@jest/schemas": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, "engines": { - "node": ">= 10.14.2" + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.10.tgz", + "integrity": "sha512-Q0YbBd6OTsXm8Y21+YUSDXupHnodNC2M4O18jtd3iwJ3+vMZNdKGols0a9G6JOK0dcJ3IdUUHoh908ZI6qhk8Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@noble/hashes": { @@ -1134,9 +1113,9 @@ "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" }, "node_modules/@noble/secp256k1": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.2.tgz", - "integrity": "sha512-5mzA40W2q55VCRuC9XzmkiEnODdY0c5a7qsK2QcOfI5/MuVQyBaWGQyE6YOEF7kDwp+tDVWGsCDVJUME+wsWWw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", + "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==", "funding": [ { "type": "individual", @@ -1145,12 +1124,12 @@ ] }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -1158,27 +1137,33 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, + "node_modules/@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "dev": true + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -1189,27 +1174,18 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1220,18 +1196,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1239,18 +1215,18 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" } }, "node_modules/@types/eslint": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", - "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", + "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", "dev": true, "dependencies": { "@types/estree": "*", @@ -1258,9 +1234,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -1268,9 +1244,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, "node_modules/@types/graceful-fs": { @@ -1283,9 +1259,9 @@ } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", "dev": true }, "node_modules/@types/istanbul-lib-report": { @@ -1307,19 +1283,19 @@ } }, "node_modules/@types/jest": { - "version": "26.0.23", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", - "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.0.tgz", + "integrity": "sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==", "dev": true, "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" } }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "node_modules/@types/node": { @@ -1329,9 +1305,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", "dev": true }, "node_modules/@types/service-worker-mock": { @@ -1341,51 +1317,52 @@ "dev": true }, "node_modules/@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "node_modules/@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz", - "integrity": "sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.23.0.tgz", + "integrity": "sha512-hEcSmG4XodSLiAp1uxv/OQSGsDY6QN3TcRU32gANp+19wGE1QQZLRS8/GV58VRUoXhnkuJ3ZxNQ3T6Z6zM59DA==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "4.26.0", - "@typescript-eslint/scope-manager": "4.26.0", - "debug": "^4.3.1", + "@typescript-eslint/scope-manager": "5.23.0", + "@typescript-eslint/type-utils": "5.23.0", + "@typescript-eslint/utils": "5.23.0", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.21", - "regexpp": "^3.1.0", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1393,81 +1370,83 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz", - "integrity": "sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==", + "node_modules/@typescript-eslint/parser": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.23.0.tgz", + "integrity": "sha512-V06cYUkqcGqpFjb8ttVgzNF53tgbB/KoQT/iB++DOIExKmzI9vBJKjZKt/6FuV9c+zrDsvJKbJ2DOCYwX91cbw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.26.0", - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/typescript-estree": "4.26.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.23.0", + "@typescript-eslint/types": "5.23.0", + "@typescript-eslint/typescript-estree": "5.23.0", + "debug": "^4.3.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/parser": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.0.tgz", - "integrity": "sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.23.0.tgz", + "integrity": "sha512-EhjaFELQHCRb5wTwlGsNMvzK9b8Oco4aYNleeDlNuL6qXWDF47ch4EhVNPh8Rdhf9tmqbN4sWDk/8g+Z/J8JVw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "4.26.0", - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/typescript-estree": "4.26.0", - "debug": "^4.3.1" + "@typescript-eslint/types": "5.23.0", + "@typescript-eslint/visitor-keys": "5.23.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", - "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.23.0.tgz", + "integrity": "sha512-iuI05JsJl/SUnOTXA9f4oI+/4qS/Zcgk+s2ir+lRmXI+80D8GaGwoUqs4p+X+4AxDolPpEpVUdlEH4ADxFy4gw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/visitor-keys": "4.26.0" + "@typescript-eslint/utils": "5.23.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/types": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", - "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.23.0.tgz", + "integrity": "sha512-NfBsV/h4dir/8mJwdZz7JFibaKC3E/QdeMEDJhiAE3/eMkoniZ7MjbEMCGXw6MZnZDMN3G9S0mH/6WUIj91dmw==", "dev": true, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1475,21 +1454,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", - "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.23.0.tgz", + "integrity": "sha512-xE9e0lrHhI647SlGMl+m+3E3CKPF1wzvvOEWnuE3CCjjT7UiRnDGJxmAcVKJIlFgK6DY9RB98eLr1OPigPEOGg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/visitor-keys": "4.26.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.23.0", + "@typescript-eslint/visitor-keys": "5.23.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1501,17 +1480,41 @@ } } }, + "node_modules/@typescript-eslint/utils": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.23.0.tgz", + "integrity": "sha512-dbgaKN21drqpkbbedGMNPCtRPZo1IOUr5EI9Jrrh99r5UW5Q0dz46RKXeSBoPV+56R6dFKpbrdhgUNSJsDDRZA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.23.0", + "@typescript-eslint/types": "5.23.0", + "@typescript-eslint/typescript-estree": "5.23.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", - "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.23.0.tgz", + "integrity": "sha512-Vd4mFNchU62sJB8pX19ZSPog05B0Y0CE2UxAZPT5k4iqhRYjPnqyY3woMxCd0++t9OTqkgjST+1ydLBi7e2Fvg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.26.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.23.0", + "eslint-visitor-keys": "^3.0.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1519,155 +1522,155 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", "dev": true, "peerDependencies": { "webpack": "4.x.x || 5.x.x", @@ -1675,9 +1678,9 @@ } }, "node_modules/@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, "dependencies": { "envinfo": "^7.7.3" @@ -1687,9 +1690,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", "dev": true, "peerDependencies": { "webpack-cli": "4.x.x" @@ -1712,16 +1715,10 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1730,46 +1727,24 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "peerDependencies": { + "acorn": "^8" } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1795,15 +1770,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1819,18 +1785,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1869,13 +1823,10 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-union": { "version": "2.1.0", @@ -1886,78 +1837,37 @@ "node": ">=8" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "node_modules/babel-jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.2.tgz", - "integrity": "sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.0.tgz", + "integrity": "sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==", "dev": true, "dependencies": { - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/transform": "^28.1.0", "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.0.2", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" }, "engines": { @@ -1965,18 +1875,18 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", + "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/babel-preset-current-node-syntax": { @@ -2003,16 +1913,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", + "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.0.1", + "babel-plugin-jest-hoist": "^28.0.2", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -2053,26 +1963,32 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/bs-logger": { @@ -2121,14 +2037,20 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001233", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001233.tgz", - "integrity": "sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg==", + "version": "1.0.30001338", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz", + "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/chalk": { "version": "4.1.1", @@ -2165,15 +2087,15 @@ } }, "node_modules/ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "node_modules/cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "node_modules/cliui": { @@ -2236,23 +2158,11 @@ "dev": true }, "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2266,9 +2176,9 @@ "dev": true }, "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" @@ -2288,48 +2198,10 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -2343,12 +2215,6 @@ } } }, - "node_modules/decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -2370,15 +2236,6 @@ "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -2389,12 +2246,12 @@ } }, "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", "dev": true, "engines": { - "node": ">= 10.14.2" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/dir-glob": { @@ -2433,40 +2290,19 @@ "node": ">=0.8.0" } }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/electron-to-chromium": { - "version": "1.3.743", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.743.tgz", - "integrity": "sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg==", + "version": "1.4.137", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", + "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", "dev": true }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -2479,9 +2315,9 @@ "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -2491,18 +2327,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", @@ -2515,10 +2339,19 @@ "node": ">=4" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "node_modules/escalade": { @@ -2542,131 +2375,45 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dev": true, - "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/escodegen/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", - "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", + "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^1.2.3", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -2674,16 +2421,16 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -2735,7 +2482,7 @@ "eslint": ">=5" } }, - "node_modules/eslint-visitor-keys": { + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", @@ -2744,60 +2491,49 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "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==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=4.0" } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/esprima": { @@ -2915,45 +2651,19 @@ } }, "node_modules/expect": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", - "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", - "dev": true, - "dependencies": { - "@jest/types": "^27.0.2", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", + "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@jest/expect-utils": "^28.1.0", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-util": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/expect/node_modules/ansi-styles": { @@ -2968,15 +2678,42 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/expect/node_modules/jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "node_modules/expect/node_modules/jest-matcher-utils": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", + "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" + }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/expect/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2984,20 +2721,31 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/fast-json-stable-stringify": { @@ -3019,9 +2767,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -3092,20 +2840,6 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3198,15 +2932,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { @@ -3243,16 +2977,16 @@ } }, "node_modules/globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -3263,9 +2997,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/has": { @@ -3289,51 +3023,12 @@ "node": ">=8" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3343,22 +3038,10 @@ "node": ">=10.17.0" } }, - "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/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -3430,17 +3113,11 @@ "node": ">= 0.10" } }, - "node_modules/is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.1.1" - }, - "bin": { - "is-ci": "bin.js" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "node_modules/is-core-module": { "version": "2.4.0", @@ -3482,9 +3159,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -3514,12 +3191,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, "node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -3529,12 +3200,6 @@ "node": ">=8" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3551,23 +3216,24 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" }, "engines": { @@ -3598,9 +3264,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -3608,13 +3274,13 @@ "source-map": "^0.6.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -3625,28 +3291,28 @@ } }, "node_modules/itty-router": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.4.10.tgz", - "integrity": "sha512-6z8UO4MoJRCdgLRVU++L6QTHJwU2pCAYFM8+9HjjcneRM5DqYyF5g6tsgIw24xXLFJlpvVrIzVzhjn862ZQZcQ==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.6.1.tgz", + "integrity": "sha512-l9gxWe5TOLUESYnBn85Jxd6tIZLWdRX5YKkHIBfSgbNQ7UFPNUGuWihRV+LlEbfJJIzgLmhwAbaWRi5yWJm8kg==" }, "node_modules/jest": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.3.tgz", - "integrity": "sha512-0G9+QqXFIZWgf5rs3yllpaA+13ZawVHfyuhuCV1EnoFbX++rVMRrYWCAnk+dfhwyv9/VTQvn+XG969u8aPRsBg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", + "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", "dev": true, "dependencies": { - "@jest/core": "^27.0.3", + "@jest/core": "^28.1.0", "import-local": "^3.0.2", - "jest-cli": "^27.0.3" + "jest-cli": "^28.1.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -3655,97 +3321,46 @@ } }, "node_modules/jest-changed-files": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", - "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", + "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", "execa": "^5.0.0", "throat": "^6.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-circus": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.3.tgz", - "integrity": "sha512-tdMfzs7SgD5l7jRcI1iB3vtQi5fHwCgo4RlO8bzZnYc05PZ+tlAOMZeS8eGYkZ2tPaRY/aRLMFWQp/8zXBrolQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.0.tgz", + "integrity": "sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/environment": "^28.1.0", + "@jest/expect": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.2", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.3", - "jest-snapshot": "^27.0.2", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", + "jest-each": "^28.1.0", + "jest-matcher-utils": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-runtime": "^28.1.0", + "jest-snapshot": "^28.1.0", + "jest-util": "^28.1.0", + "pretty-format": "^28.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-circus/node_modules/ansi-styles": { @@ -3760,84 +3375,119 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", + "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-circus/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-config": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.3.tgz", - "integrity": "sha512-zgtI2YQo+ekKsmYNyDlXFY/7w7WWBSJFoj/WRe173WB88CDUrEYWr0sLdbLOQe+sRu6l1Y2S0MCS6BOJm5jkoA==", + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/jest-cli": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", + "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.3", - "@jest/types": "^27.0.2", - "babel-jest": "^27.0.2", + "@jest/core": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/types": "^28.1.0", "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.0.3", - "jest-environment-jsdom": "^27.0.3", - "jest-environment-node": "^27.0.3", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.2", - "jest-runner": "^27.0.3", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.2" + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.0", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { - "ts-node": ">=9.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "ts-node": { + "node-notifier": { "optional": true } } }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/jest-config": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", + "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.0", + "@jest/types": "^28.1.0", + "babel-jest": "^28.1.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.0", + "jest-environment-node": "^28.1.0", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.0", + "jest-runner": "^28.1.0", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, "node_modules/jest-config/node_modules/ansi-styles": { @@ -3852,96 +3502,101 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-config/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", + "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", - "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-each/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/jest-docblock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", + "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "node_modules/jest-each": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", + "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "@jest/types": "^28.1.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.0", + "pretty-format": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-each/node_modules/ansi-styles": { @@ -3956,230 +3611,121 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-each/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz", - "integrity": "sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } + "node_modules/jest-each/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true }, "node_modules/jest-environment-node": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.3.tgz", - "integrity": "sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.0.tgz", + "integrity": "sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true, "engines": { - "node": ">= 10.14.2" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.2.tgz", - "integrity": "sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.0.tgz", + "integrity": "sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.0", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.0", + "jest-worker": "^28.1.0", "micromatch": "^4.0.4", "walker": "^1.0.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-haste-map/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-jasmine2": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.3.tgz", - "integrity": "sha512-odJ2ia8P5c+IsqOcWJPmku4AqbXIfTVLRjYTKHri3TEvbmTdLw0ghy13OAPIl/0v7cVH0TURK7+xFOHKDLvKIA==", + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.3", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.0.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.3", - "jest-snapshot": "^27.0.2", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", - "throat": "^6.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/jest-leak-detector": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.0.tgz", + "integrity": "sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "node_modules/jest-leak-detector/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -4191,27 +3737,35 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-leak-detector": { + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/jest-matcher-utils": { "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", - "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz", + "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==", "dev": true, "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.0.2", "jest-get-type": "^27.0.1", "pretty-format": "^27.0.2" }, @@ -4219,119 +3773,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-leak-detector/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz", - "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-matcher-utils/node_modules/diff-sequences": { "version": "27.0.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", @@ -4365,73 +3806,24 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-message-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", - "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", + "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2", + "pretty-format": "^28.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/jest-message-util/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-message-util/node_modules/ansi-styles": { @@ -4447,56 +3839,37 @@ } }, "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-mock": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", - "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", + "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "@types/node": "*" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-pnp-resolver": { @@ -4517,287 +3890,183 @@ } }, "node_modules/jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-resolve": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.2.tgz", - "integrity": "sha512-rmfLGyZhwAUR5z3EwPAW7LQTorWAuCYCcsQJoQxT2it+BOgX3zKxa67r1pfpK3ihy2k9TjYD3/lMp5rPm/CL1Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.0.tgz", + "integrity": "sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.3.tgz", - "integrity": "sha512-HdjWOvFAgT5CYChF2eiBN2rRKicjaTCCtA3EtH47REIdGzEHGUhYrWYgLahXsiOovvWN6edhcHL5WCa3gbc04A==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.0.tgz", + "integrity": "sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.2" + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "node_modules/jest-runner": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", + "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/console": "^28.1.0", + "@jest/environment": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.0.2", + "jest-environment-node": "^28.1.0", + "jest-haste-map": "^28.1.0", + "jest-leak-detector": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-resolve": "^28.1.0", + "jest-runtime": "^28.1.0", + "jest-util": "^28.1.0", + "jest-watcher": "^28.1.0", + "jest-worker": "^28.1.0", + "source-map-support": "0.5.13", + "throat": "^6.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/jest-runner": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.3.tgz", - "integrity": "sha512-zH23uIIh1ro1JCD7XX1bQ0bQwXEsBzLX2UJVE/AVLsk4YJRmTfyXIzzRzBWRdnMHHg1NWkJ4fGs7eFP15IqZpQ==", + "node_modules/jest-runner/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.1", - "jest-haste-map": "^27.0.2", - "jest-leak-detector": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.2", - "jest-runtime": "^27.0.3", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "node": ">=10" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/jest-runtime": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.3.tgz", - "integrity": "sha512-k1Hl2pWWHBkSXdCggX2lyLRuDnnnmMlnJd+DPLb8LmmAeHW87WgGC6TplD377VxY3KQu73sklkhGUIdwFgsRVQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/globals": "^27.0.3", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/yargs": "^16.0.0", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", + "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/globals": "^28.1.0", + "@jest/source-map": "^28.0.2", + "@jest/test-result": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", + "execa": "^5.0.0", "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.2", - "jest-snapshot": "^27.0.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-mock": "^28.1.0", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.0", + "jest-snapshot": "^28.1.0", + "jest-util": "^28.1.0", "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-snapshot": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.2.tgz", - "integrity": "sha512-4RcgvZbPrrbEE/hT6XQ4hr+NVVLNrmsgUnYSnZRT6UAvW9Q2yzGMS+tfJh+xlQJAapnnkNJzsMn6vUa+yfiVHA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", + "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", "dev": true, "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.2", - "jest-util": "^27.0.2", + "expect": "^28.1.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.0", + "jest-matcher-utils": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-util": "^28.1.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.2", - "semver": "^7.3.2" + "pretty-format": "^28.1.0", + "semver": "^7.3.5" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { @@ -4812,136 +4081,74 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", + "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", - "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", + "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-validate": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", - "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", + "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", + "jest-get-type": "^28.0.2", "leven": "^3.1.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "pretty-format": "^28.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-validate/node_modules/ansi-styles": { @@ -4957,9 +4164,9 @@ } }, "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" @@ -4968,159 +4175,73 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-validate/node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-watcher": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", - "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", + "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", "dev": true, "dependencies": { - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/test-result": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.2", + "emittery": "^0.10.2", + "jest-util": "^28.1.0", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jest/node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest/node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "node_modules/jest-worker": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/jest/node_modules/jest-cli": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.3.tgz", - "integrity": "sha512-7bt9Sgv4nWH5pUnyJfdLf8CHWfo4+7lSPxeBwQx4r0vBj9jweJam/piE2U91SXtQI+ckm+TIN97OVnqIYpVhSg==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@jest/core": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.3", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - }, - "bin": { - "jest": "bin/jest.js" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/js-tokens": { @@ -5130,76 +4251,17 @@ "dev": true }, "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==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.5", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -5218,6 +4280,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -5231,13 +4299,10 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -5285,6 +4350,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -5306,24 +4377,12 @@ "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "node_modules/lodash._basefor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", "dev": true }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -5357,18 +4416,18 @@ "lodash.isarray": "^3.0.0" } }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5412,12 +4471,12 @@ "dev": true }, "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { - "tmpl": "1.0.x" + "tmpl": "1.0.5" } }, "node_modules/merge-stream": { @@ -5436,15 +4495,27 @@ } }, "node_modules/micro-stacks": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-0.2.2.tgz", - "integrity": "sha512-2mZqWcXWkmOXWsb7pShS+9X8XpPdNWZ0HCYYGxdEvHOuWQY4XeAai307xNh5afIFY2aik/OTljFjUmKIvGtU8Q==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-0.3.0.tgz", + "integrity": "sha512-RHOMtMaptyAffSQvwR2mvLyN3y72PP0cq3qaTY74sFt/yPzQa4eihQHD2Fbw9eI8uean20mqZ4e+A+nLUmQeYQ==", "dependencies": { "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.2" + "@noble/secp256k1": "1.5.5" }, "engines": { "node": ">=12" + }, + "peerDependencies": { + "@scure/bip32": "1.0.1", + "@scure/bip39": "1.0.0" + }, + "peerDependenciesMeta": { + "@scure/bip32": { + "optional": true + }, + "@scure/bip39": { + "optional": true + } } }, "node_modules/micromatch": { @@ -5502,9 +4573,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -5513,24 +4584,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -5555,19 +4608,10 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", "dev": true }, "node_modules/normalize-path": { @@ -5591,12 +4635,6 @@ "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5638,18 +4676,6 @@ "node": ">= 0.8.0" } }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5698,11 +4724,23 @@ "node": ">=6" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/path-exists": { "version": "4.0.0", @@ -5746,6 +4784,12 @@ "node": ">=8" } }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -5759,13 +4803,10 @@ } }, "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, "engines": { "node": ">= 6" } @@ -5792,45 +4833,50 @@ } }, "node_modules/prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "engines": { - "node": ">= 10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "dependencies": { "kleur": "^3.0.3", @@ -5840,12 +4886,6 @@ "node": ">= 6" } }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -5912,9 +4952,9 @@ } }, "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { "node": ">=8" @@ -5932,15 +4972,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -5984,6 +5015,15 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6038,31 +5078,13 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -6166,9 +5188,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "node_modules/sisteransi": { @@ -6186,29 +5208,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6235,9 +5234,9 @@ "dev": true }, "node_modules/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -6269,26 +5268,26 @@ } }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -6349,51 +5348,6 @@ "node": ">=8" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/tapable": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", @@ -6537,64 +5491,53 @@ "node": ">=8.0" } }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.2.tgz", - "integrity": "sha512-pozjHOOfm+sbv9kXCvTFVyDntWvuJztzkNFql/akD75hSMZ2jsbidVauOhBRImAopXohqcLtPK/NTTIS8Y49Ug==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.2.tgz", + "integrity": "sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==", "dev": true, "dependencies": { "bs-logger": "0.x", - "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", + "jest-util": "^28.0.0", "json5": "2.x", - "lodash": "4.x", + "lodash.memoize": "4.x", "make-error": "1.x", - "mkdirp": "1.x", "semver": "7.x", - "yargs-parser": "20.x" + "yargs-parser": "^20.x" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": "^28.0.0", + "jest": "^28.0.0", + "typescript": ">=4.3" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } } }, "node_modules/ts-loader": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.2.tgz", - "integrity": "sha512-hNIhGTQHtNKjOzR2ZtQ2OSVbXPykOae+zostf1IlHCf61Mt41GMJurKNqrYUbzHgpmj6UWRu8eBfb7q0XliV0g==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.0.tgz", + "integrity": "sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -6653,27 +5596,21 @@ } }, "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typescript": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", - "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6683,15 +5620,6 @@ "node": ">=4.2.0" } }, - "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==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6721,26 +5649,17 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", + "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^1.6.0" }, "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" + "node": ">=10.12.0" } }, "node_modules/w3c-hr-time": { @@ -6752,31 +5671,19 @@ "browser-process-hrtime": "^1.0.0" } }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "makeerror": "1.0.x" + "makeerror": "1.0.12" } }, "node_modules/watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -6786,44 +5693,36 @@ "node": ">=10.13.0" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, "node_modules/webpack": { - "version": "5.38.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", - "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "version": "5.72.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", + "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" @@ -6842,23 +5741,22 @@ } }, "node_modules/webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", - "colorette": "^1.2.1", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "bin": { @@ -6908,59 +5806,14 @@ } }, "node_modules/webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", - "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7015,50 +5868,18 @@ "dev": true }, "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==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "signal-exit": "^3.0.7" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -7075,21 +5896,21 @@ "dev": true }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { @@ -7101,6 +5922,15 @@ "node": ">=10" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -7115,95 +5945,82 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.16.7" } }, "@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", + "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", "dev": true }, "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", + "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.10", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.10", + "@babel/types": "^7.17.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "json5": "^2.2.1", + "semver": "^6.3.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", + "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", "dev": true, "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/types": "^7.17.10", + "@jridgewell/gen-mapping": "^0.1.0", + "jsesc": "^2.5.1" } }, "@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", + "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.16.6", + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", "semver": "^6.3.0" }, "dependencies": { @@ -7215,135 +6032,113 @@ } } }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/types": "^7.16.7" } }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true }, - "@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" - } - }, "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.17.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true }, "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -7407,9 +6202,9 @@ } }, "@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", + "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -7512,70 +6307,52 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", + "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - } + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", + "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.10", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.10", + "@babel/types": "^7.17.10", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -7585,12 +6362,12 @@ } }, "@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", + "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -7609,9 +6386,9 @@ } }, "@cloudflare/workers-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.0.0.tgz", - "integrity": "sha512-RsasworfxdRyZC2iBN2Okgziydaq52uTStENePdH2JTmoA0bki53jOchvznk+ezu34WyXQLDpk4ogGyQ6BSVkw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.9.0.tgz", + "integrity": "sha512-juyc/T+0QlwB4p7mTPoxS87RlHjceXJdCWwbGAQ5l3dO5xSDymW41wYx6f6LYe51fLccpjibj56UvqKeec2SSw==", "dev": true }, "@discoveryjs/json-ext": { @@ -7621,39 +6398,39 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", + "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.9.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } } }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -7667,6 +6444,25 @@ "resolve-from": "^5.0.0" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -7682,424 +6478,353 @@ "dev": true }, "@jest/console": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", - "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", + "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.2", - "jest-util": "^27.0.2", + "jest-message-util": "^28.1.0", + "jest-util": "^28.1.0", "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "@jest/core": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.3.tgz", - "integrity": "sha512-rN8lr/OJ8iApcQUh4khnMaOCVX4oRnLwy2tPW3Vh70y62K8Da8fhkxMUq0xX9VPa4+yWUm0tGc/jUSJi+Jzuwg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", + "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", "dev": true, "requires": { - "@jest/console": "^27.0.2", - "@jest/reporters": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^28.1.0", + "@jest/reporters": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.2", - "jest-config": "^27.0.3", - "jest-haste-map": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.2", - "jest-resolve-dependencies": "^27.0.3", - "jest-runner": "^27.0.3", - "jest-runtime": "^27.0.3", - "jest-snapshot": "^27.0.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "jest-watcher": "^27.0.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.0.2", + "jest-config": "^28.1.0", + "jest-haste-map": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.0", + "jest-resolve-dependencies": "^28.1.0", + "jest-runner": "^28.1.0", + "jest-runtime": "^28.1.0", + "jest-snapshot": "^28.1.0", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "jest-watcher": "^28.1.0", "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", + "pretty-format": "^28.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true } } }, "@jest/environment": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.3.tgz", - "integrity": "sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", + "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", "dev": true, "requires": { - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", - "jest-mock": "^27.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "jest-mock": "^28.1.0" } }, - "@jest/fake-timers": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.3.tgz", - "integrity": "sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==", + "@jest/expect": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", + "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "@sinonjs/fake-timers": "^7.0.2", - "@types/node": "*", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "expect": "^28.1.0", + "jest-snapshot": "^28.1.0" } }, - "@jest/globals": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.3.tgz", - "integrity": "sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==", + "@jest/expect-utils": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.0.tgz", + "integrity": "sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw==", "dev": true, "requires": { - "@jest/environment": "^27.0.3", - "@jest/types": "^27.0.2", - "expect": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "jest-get-type": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", + "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "dev": true, + "requires": { + "@jest/types": "^28.1.0", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.1.0", + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0" + } + }, + "@jest/globals": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.0.tgz", + "integrity": "sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.0", + "@jest/expect": "^28.1.0", + "@jest/types": "^28.1.0" } }, "@jest/reporters": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.2.tgz", - "integrity": "sha512-SVQjew/kafNxSN1my4praGQP+VPVGHsU8zqiEDppLvq6j1lryIjdNb9P+bZSsKeifU4bIoaPnf9Ui0tK9WOpFA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.0.tgz", + "integrity": "sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", + "@jridgewell/trace-mapping": "^0.3.7", + "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.2", - "jest-resolve": "^27.0.2", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "istanbul-reports": "^3.1.3", + "jest-util": "^28.1.0", + "jest-worker": "^28.1.0", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" + "v8-to-istanbul": "^9.0.0" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" } }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "has-flag": "^4.0.0" } } } }, + "@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.23.3" + } + }, "@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", + "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.7", "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" + "graceful-fs": "^4.2.9" } }, "@jest/test-result": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", - "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", + "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", "dev": true, "requires": { - "@jest/console": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^28.1.0", + "@jest/types": "^28.1.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "@jest/test-sequencer": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.3.tgz", - "integrity": "sha512-DcLTzraZ8xLr5fcIl+CF14vKeBBpBrn55wFxI9Ju+dhEBdjRdJQ/Z/pLkMehkPZWIQ+rR23J8e+wFDkfjree0Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", + "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", "dev": true, "requires": { - "@jest/test-result": "^27.0.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-runtime": "^27.0.3" + "@jest/test-result": "^28.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "slash": "^3.0.0" } }, "@jest/transform": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.2.tgz", - "integrity": "sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.0.tgz", + "integrity": "sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.0.2", - "babel-plugin-istanbul": "^6.0.0", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.0", + "@jridgewell/trace-mapping": "^0.3.7", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.0", "micromatch": "^4.0.4", - "pirates": "^4.0.1", + "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "write-file-atomic": "^4.0.1" } }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", "dev": true, "requires": { + "@jest/schemas": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.10.tgz", + "integrity": "sha512-Q0YbBd6OTsXm8Y21+YUSDXupHnodNC2M4O18jtd3iwJ3+vMZNdKGols0a9G6JOK0dcJ3IdUUHoh908ZI6qhk8Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@noble/hashes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" }, "@noble/secp256k1": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.2.tgz", - "integrity": "sha512-5mzA40W2q55VCRuC9XzmkiEnODdY0c5a7qsK2QcOfI5/MuVQyBaWGQyE6YOEF7kDwp+tDVWGsCDVJUME+wsWWw==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", + "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==" }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, + "@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "dev": true + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -8110,24 +6835,18 @@ } }, "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -8138,18 +6857,18 @@ } }, "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -8157,18 +6876,18 @@ } }, "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/eslint": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", - "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", + "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", "dev": true, "requires": { "@types/estree": "*", @@ -8176,9 +6895,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "requires": { "@types/eslint": "*", @@ -8186,9 +6905,9 @@ } }, "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, "@types/graceful-fs": { @@ -8201,9 +6920,9 @@ } }, "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", "dev": true }, "@types/istanbul-lib-report": { @@ -8225,19 +6944,19 @@ } }, "@types/jest": { - "version": "26.0.23", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", - "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.0.tgz", + "integrity": "sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==", "dev": true, "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/node": { @@ -8247,9 +6966,9 @@ "dev": true }, "@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", "dev": true }, "@types/service-worker-mock": { @@ -8259,275 +6978,287 @@ "dev": true }, "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz", - "integrity": "sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.23.0.tgz", + "integrity": "sha512-hEcSmG4XodSLiAp1uxv/OQSGsDY6QN3TcRU32gANp+19wGE1QQZLRS8/GV58VRUoXhnkuJ3ZxNQ3T6Z6zM59DA==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.26.0", - "@typescript-eslint/scope-manager": "4.26.0", - "debug": "^4.3.1", + "@typescript-eslint/scope-manager": "5.23.0", + "@typescript-eslint/type-utils": "5.23.0", + "@typescript-eslint/utils": "5.23.0", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.21", - "regexpp": "^3.1.0", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, - "@typescript-eslint/experimental-utils": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz", - "integrity": "sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==", + "@typescript-eslint/parser": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.23.0.tgz", + "integrity": "sha512-V06cYUkqcGqpFjb8ttVgzNF53tgbB/KoQT/iB++DOIExKmzI9vBJKjZKt/6FuV9c+zrDsvJKbJ2DOCYwX91cbw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.26.0", - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/typescript-estree": "4.26.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.23.0", + "@typescript-eslint/types": "5.23.0", + "@typescript-eslint/typescript-estree": "5.23.0", + "debug": "^4.3.2" } }, - "@typescript-eslint/parser": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.0.tgz", - "integrity": "sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==", + "@typescript-eslint/scope-manager": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.23.0.tgz", + "integrity": "sha512-EhjaFELQHCRb5wTwlGsNMvzK9b8Oco4aYNleeDlNuL6qXWDF47ch4EhVNPh8Rdhf9tmqbN4sWDk/8g+Z/J8JVw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.26.0", - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/typescript-estree": "4.26.0", - "debug": "^4.3.1" + "@typescript-eslint/types": "5.23.0", + "@typescript-eslint/visitor-keys": "5.23.0" } }, - "@typescript-eslint/scope-manager": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", - "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", + "@typescript-eslint/type-utils": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.23.0.tgz", + "integrity": "sha512-iuI05JsJl/SUnOTXA9f4oI+/4qS/Zcgk+s2ir+lRmXI+80D8GaGwoUqs4p+X+4AxDolPpEpVUdlEH4ADxFy4gw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/visitor-keys": "4.26.0" + "@typescript-eslint/utils": "5.23.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", - "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.23.0.tgz", + "integrity": "sha512-NfBsV/h4dir/8mJwdZz7JFibaKC3E/QdeMEDJhiAE3/eMkoniZ7MjbEMCGXw6MZnZDMN3G9S0mH/6WUIj91dmw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", - "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.23.0.tgz", + "integrity": "sha512-xE9e0lrHhI647SlGMl+m+3E3CKPF1wzvvOEWnuE3CCjjT7UiRnDGJxmAcVKJIlFgK6DY9RB98eLr1OPigPEOGg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/visitor-keys": "4.26.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.23.0", + "@typescript-eslint/visitor-keys": "5.23.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, + "@typescript-eslint/utils": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.23.0.tgz", + "integrity": "sha512-dbgaKN21drqpkbbedGMNPCtRPZo1IOUr5EI9Jrrh99r5UW5Q0dz46RKXeSBoPV+56R6dFKpbrdhgUNSJsDDRZA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.23.0", + "@typescript-eslint/types": "5.23.0", + "@typescript-eslint/typescript-estree": "5.23.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, "@typescript-eslint/visitor-keys": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", - "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.23.0.tgz", + "integrity": "sha512-Vd4mFNchU62sJB8pX19ZSPog05B0Y0CE2UxAZPT5k4iqhRYjPnqyY3woMxCd0++t9OTqkgjST+1ydLBi7e2Fvg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.26.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.23.0", + "eslint-visitor-keys": "^3.0.0" } }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", "dev": true, "requires": {} }, "@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", "dev": true, "requires": {} }, @@ -8543,50 +7274,26 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } + "requires": {} }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8606,12 +7313,6 @@ "dev": true, "requires": {} }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -8619,14 +7320,6 @@ "dev": true, "requires": { "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } } }, "ansi-regex": { @@ -8655,13 +7348,10 @@ } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "array-union": { "version": "2.1.0", @@ -8669,80 +7359,43 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "babel-jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.2.tgz", - "integrity": "sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.0.tgz", + "integrity": "sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==", "dev": true, "requires": { - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/transform": "^28.1.0", "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.0.2", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", + "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, @@ -8767,12 +7420,12 @@ } }, "babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", + "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.0.1", + "babel-plugin-jest-hoist": "^28.0.2", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -8808,16 +7461,16 @@ "dev": true }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" } }, "bs-logger": { @@ -8857,9 +7510,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001233", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001233.tgz", - "integrity": "sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg==", + "version": "1.0.30001338", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz", + "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==", "dev": true }, "chalk": { @@ -8885,15 +7538,15 @@ "dev": true }, "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "cliui": { @@ -8946,20 +7599,11 @@ "dev": true }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -8973,9 +7617,9 @@ "dev": true }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -8992,55 +7636,15 @@ "which": "^2.0.1" } }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -9059,12 +7663,6 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -9072,9 +7670,9 @@ "dev": true }, "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", "dev": true }, "dir-glob": { @@ -9104,33 +7702,16 @@ "urijs": "^1.16.1" } }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, "electron-to-chromium": { - "version": "1.3.743", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.743.tgz", - "integrity": "sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg==", + "version": "1.4.137", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", + "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", "dev": true }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true }, "emoji-regex": { @@ -9140,184 +7721,113 @@ "dev": true }, "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "envinfo": { "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" } }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, "eslint": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", - "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", + "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^1.2.3", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, "requires": {} }, @@ -9345,31 +7855,31 @@ "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" } }, "esprima": { @@ -9454,51 +7964,52 @@ "dev": true }, "expect": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", - "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", + "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1" + "@jest/expect-utils": "^28.1.0", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-util": "^28.1.0" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", + "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" } }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" } }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", "dev": true } } @@ -9510,17 +8021,27 @@ "dev": true }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -9542,9 +8063,9 @@ "dev": true }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -9603,17 +8124,6 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -9678,12 +8188,12 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "glob-to-regexp": { @@ -9710,23 +8220,23 @@ } }, "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "has": { @@ -9744,61 +8254,22 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "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" - } - }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -9849,14 +8320,11 @@ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, - "is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-core-module": { "version": "2.4.0", @@ -9886,9 +8354,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -9909,24 +8377,12 @@ "isobject": "^3.0.1" } }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -9940,20 +8396,21 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", "dev": true, "requires": { - "@babel/core": "^7.7.5", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" }, "dependencies": { @@ -9977,9 +8434,9 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -9988,9 +8445,9 @@ } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -9998,504 +8455,330 @@ } }, "itty-router": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.4.10.tgz", - "integrity": "sha512-6z8UO4MoJRCdgLRVU++L6QTHJwU2pCAYFM8+9HjjcneRM5DqYyF5g6tsgIw24xXLFJlpvVrIzVzhjn862ZQZcQ==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.6.1.tgz", + "integrity": "sha512-l9gxWe5TOLUESYnBn85Jxd6tIZLWdRX5YKkHIBfSgbNQ7UFPNUGuWihRV+LlEbfJJIzgLmhwAbaWRi5yWJm8kg==" }, "jest": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.3.tgz", - "integrity": "sha512-0G9+QqXFIZWgf5rs3yllpaA+13ZawVHfyuhuCV1EnoFbX++rVMRrYWCAnk+dfhwyv9/VTQvn+XG969u8aPRsBg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", + "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", "dev": true, "requires": { - "@jest/core": "^27.0.3", + "@jest/core": "^28.1.0", "import-local": "^3.0.2", - "jest-cli": "^27.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-cli": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.3.tgz", - "integrity": "sha512-7bt9Sgv4nWH5pUnyJfdLf8CHWfo4+7lSPxeBwQx4r0vBj9jweJam/piE2U91SXtQI+ckm+TIN97OVnqIYpVhSg==", - "dev": true, - "requires": { - "@jest/core": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.3", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - } - } + "jest-cli": "^28.1.0" } }, "jest-changed-files": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", - "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", + "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", "execa": "^5.0.0", "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-circus": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.3.tgz", - "integrity": "sha512-tdMfzs7SgD5l7jRcI1iB3vtQi5fHwCgo4RlO8bzZnYc05PZ+tlAOMZeS8eGYkZ2tPaRY/aRLMFWQp/8zXBrolQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.0.tgz", + "integrity": "sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ==", "dev": true, "requires": { - "@jest/environment": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/environment": "^28.1.0", + "@jest/expect": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.2", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.3", - "jest-snapshot": "^27.0.2", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", + "jest-each": "^28.1.0", + "jest-matcher-utils": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-runtime": "^28.1.0", + "jest-snapshot": "^28.1.0", + "jest-util": "^28.1.0", + "pretty-format": "^28.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, + "jest-matcher-utils": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", + "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" + } + }, "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true } } }, + "jest-cli": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", + "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", + "dev": true, + "requires": { + "@jest/core": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/types": "^28.1.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.0", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } + }, "jest-config": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.3.tgz", - "integrity": "sha512-zgtI2YQo+ekKsmYNyDlXFY/7w7WWBSJFoj/WRe173WB88CDUrEYWr0sLdbLOQe+sRu6l1Y2S0MCS6BOJm5jkoA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", + "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.3", - "@jest/types": "^27.0.2", - "babel-jest": "^27.0.2", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.0", + "@jest/types": "^28.1.0", + "babel-jest": "^28.1.0", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.0.3", - "jest-environment-jsdom": "^27.0.3", - "jest-environment-node": "^27.0.3", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.2", - "jest-runner": "^27.0.3", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.0", + "jest-environment-node": "^28.1.0", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.0", + "jest-runner": "^28.1.0", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2" + "parse-json": "^5.2.0", + "pretty-format": "^28.1.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true } } }, "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", - "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", + "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2" + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true } } }, - "jest-environment-jsdom": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz", - "integrity": "sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==", + "jest-docblock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", + "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", "dev": true, "requires": { - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2", - "jsdom": "^16.6.0" + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", + "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", + "dev": true, + "requires": { + "@jest/types": "^28.1.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.0", + "pretty-format": "^28.1.0" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true } } }, "jest-environment-node": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.3.tgz", - "integrity": "sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.0.tgz", + "integrity": "sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ==", "dev": true, "requires": { - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0" } }, "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true }, "jest-haste-map": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.2.tgz", - "integrity": "sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.0.tgz", + "integrity": "sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.0", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.0", + "jest-worker": "^28.1.0", "micromatch": "^4.0.4", "walker": "^1.0.7" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" } }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "has-flag": "^4.0.0" } } } }, - "jest-jasmine2": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.3.tgz", - "integrity": "sha512-odJ2ia8P5c+IsqOcWJPmku4AqbXIfTVLRjYTKHri3TEvbmTdLw0ghy13OAPIl/0v7cVH0TURK7+xFOHKDLvKIA==", + "jest-leak-detector": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.0.tgz", + "integrity": "sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.3", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.0.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.3", - "jest-snapshot": "^27.0.2", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", - "throat": "^6.0.1" + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -10503,74 +8786,22 @@ "dev": true }, "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-leak-detector": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", - "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", - "dev": true, - "requires": { - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" + "react-is": "^18.0.0" } }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } } } }, @@ -10586,34 +8817,6 @@ "pretty-format": "^27.0.2" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, "diff-sequences": { "version": "27.0.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", @@ -10637,69 +8840,26 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } } } }, "jest-message-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", - "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", + "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2", + "pretty-format": "^28.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -10707,51 +8867,33 @@ "dev": true }, "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true } } }, "jest-mock": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", - "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", + "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-pnp-resolver": { @@ -10762,379 +8904,226 @@ "requires": {} }, "jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, "jest-resolve": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.2.tgz", - "integrity": "sha512-rmfLGyZhwAUR5z3EwPAW7LQTorWAuCYCcsQJoQxT2it+BOgX3zKxa67r1pfpK3ihy2k9TjYD3/lMp5rPm/CL1Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.0.tgz", + "integrity": "sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw==", "dev": true, "requires": { - "@jest/types": "^27.0.2", "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-resolve-dependencies": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.3.tgz", - "integrity": "sha512-HdjWOvFAgT5CYChF2eiBN2rRKicjaTCCtA3EtH47REIdGzEHGUhYrWYgLahXsiOovvWN6edhcHL5WCa3gbc04A==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.0.tgz", + "integrity": "sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.0" } }, "jest-runner": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.3.tgz", - "integrity": "sha512-zH23uIIh1ro1JCD7XX1bQ0bQwXEsBzLX2UJVE/AVLsk4YJRmTfyXIzzRzBWRdnMHHg1NWkJ4fGs7eFP15IqZpQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", + "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", "dev": true, "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^28.1.0", + "@jest/environment": "^28.1.0", + "@jest/test-result": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.1", - "jest-haste-map": "^27.0.2", - "jest-leak-detector": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.2", - "jest-runtime": "^27.0.3", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", - "source-map-support": "^0.5.6", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.0.2", + "jest-environment-node": "^28.1.0", + "jest-haste-map": "^28.1.0", + "jest-leak-detector": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-resolve": "^28.1.0", + "jest-runtime": "^28.1.0", + "jest-util": "^28.1.0", + "jest-watcher": "^28.1.0", + "jest-worker": "^28.1.0", + "source-map-support": "0.5.13", "throat": "^6.0.1" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "has-flag": "^4.0.0" } } } }, "jest-runtime": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.3.tgz", - "integrity": "sha512-k1Hl2pWWHBkSXdCggX2lyLRuDnnnmMlnJd+DPLb8LmmAeHW87WgGC6TplD377VxY3KQu73sklkhGUIdwFgsRVQ==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/globals": "^27.0.3", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/yargs": "^16.0.0", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", + "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/globals": "^28.1.0", + "@jest/source-map": "^28.0.2", + "@jest/test-result": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", + "execa": "^5.0.0", "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.2", - "jest-snapshot": "^27.0.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-mock": "^28.1.0", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.0", + "jest-snapshot": "^28.1.0", + "jest-util": "^28.1.0", "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" + "strip-bom": "^4.0.0" } }, "jest-snapshot": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.2.tgz", - "integrity": "sha512-4RcgvZbPrrbEE/hT6XQ4hr+NVVLNrmsgUnYSnZRT6UAvW9Q2yzGMS+tfJh+xlQJAapnnkNJzsMn6vUa+yfiVHA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", + "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", "dev": true, "requires": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.0", + "@jest/transform": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.2", - "jest-util": "^27.0.2", + "expect": "^28.1.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.0", + "jest-matcher-utils": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-util": "^28.1.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.2", - "semver": "^7.3.2" + "pretty-format": "^28.1.0", + "semver": "^7.3.5" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", - "dev": true - }, - "jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", + "jest-matcher-utils": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", + "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" } }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", - "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "picomatch": "^2.2.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "react-is": "^18.0.0" } }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true } } }, + "jest-util": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", + "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, "jest-validate": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", - "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", + "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^28.1.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", + "jest-get-type": "^28.0.2", "leven": "^3.1.0", - "pretty-format": "^27.0.2" + "pretty-format": "^28.1.0" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -11142,68 +9131,45 @@ "dev": true }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true } } }, "jest-watcher": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", - "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", + "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", "dev": true, "requires": { - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/test-result": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.2", + "emittery": "^0.10.2", + "jest-util": "^28.1.0", "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-worker": { @@ -11235,56 +9201,12 @@ "dev": true }, "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==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.5", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "dev": true - } + "argparse": "^2.0.1" } }, "jsesc": { @@ -11299,6 +9221,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -11312,13 +9240,10 @@ "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "kind-of": { "version": "6.0.3", @@ -11348,6 +9273,12 @@ "type-check": "~0.4.0" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -11363,24 +9294,12 @@ "p-locate": "^4.1.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lodash._basefor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", "dev": true }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -11414,18 +9333,18 @@ "lodash.isarray": "^3.0.0" } }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -11459,12 +9378,12 @@ "dev": true }, "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "requires": { - "tmpl": "1.0.x" + "tmpl": "1.0.5" } }, "merge-stream": { @@ -11480,12 +9399,12 @@ "dev": true }, "micro-stacks": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-0.2.2.tgz", - "integrity": "sha512-2mZqWcXWkmOXWsb7pShS+9X8XpPdNWZ0HCYYGxdEvHOuWQY4XeAai307xNh5afIFY2aik/OTljFjUmKIvGtU8Q==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-0.3.0.tgz", + "integrity": "sha512-RHOMtMaptyAffSQvwR2mvLyN3y72PP0cq3qaTY74sFt/yPzQa4eihQHD2Fbw9eI8uean20mqZ4e+A+nLUmQeYQ==", "requires": { "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.2" + "@noble/secp256k1": "1.5.5" } }, "micromatch": { @@ -11525,26 +9444,14 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -11569,16 +9476,10 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", "dev": true }, "normalize-path": { @@ -11596,12 +9497,6 @@ "path-key": "^3.0.0" } }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -11634,12 +9529,6 @@ "word-wrap": "^1.2.3" } }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -11673,11 +9562,17 @@ "callsites": "^3.0.0" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } }, "path-exists": { "version": "4.0.0", @@ -11709,6 +9604,12 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -11716,13 +9617,10 @@ "dev": true }, "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true }, "pkg-dir": { "version": "4.2.0", @@ -11740,45 +9638,40 @@ "dev": true }, "prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true }, "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -11825,9 +9718,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "require-directory": { @@ -11836,12 +9729,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -11875,6 +9762,12 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -11905,28 +9798,13 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -12002,9 +9880,9 @@ } }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "sisteransi": { @@ -12019,23 +9897,6 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -12059,9 +9920,9 @@ "dev": true }, "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -12086,23 +9947,23 @@ } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -12142,46 +10003,6 @@ "supports-color": "^7.0.0" } }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, "tapable": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", @@ -12286,48 +10107,26 @@ "is-number": "^7.0.0" } }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, "ts-jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.2.tgz", - "integrity": "sha512-pozjHOOfm+sbv9kXCvTFVyDntWvuJztzkNFql/akD75hSMZ2jsbidVauOhBRImAopXohqcLtPK/NTTIS8Y49Ug==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.2.tgz", + "integrity": "sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==", "dev": true, "requires": { "bs-logger": "0.x", - "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", + "jest-util": "^28.0.0", "json5": "2.x", - "lodash": "4.x", + "lodash.memoize": "4.x", "make-error": "1.x", - "mkdirp": "1.x", "semver": "7.x", - "yargs-parser": "20.x" + "yargs-parser": "^20.x" } }, "ts-loader": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.2.tgz", - "integrity": "sha512-hNIhGTQHtNKjOzR2ZtQ2OSVbXPykOae+zostf1IlHCf61Mt41GMJurKNqrYUbzHgpmj6UWRu8eBfb7q0XliV0g==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.0.tgz", + "integrity": "sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -12367,30 +10166,15 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typescript": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", - "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true }, "uri-js": { @@ -12421,22 +10205,14 @@ "dev": true }, "v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", + "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.7", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "convert-source-map": "^1.6.0" } }, "w3c-hr-time": { @@ -12448,97 +10224,74 @@ "browser-process-hrtime": "^1.0.0" } }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "requires": { - "makeerror": "1.0.x" + "makeerror": "1.0.12" } }, "watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, "webpack": { - "version": "5.38.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", - "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "version": "5.72.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", + "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "dependencies": { - "acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "dev": true - } + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" } }, "webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", - "colorette": "^1.2.1", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "dependencies": { @@ -12561,41 +10314,11 @@ } }, "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true }, - "whatwg-url": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", - "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -12635,36 +10358,15 @@ "dev": true }, "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==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" } }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -12678,18 +10380,26 @@ "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + } } }, "yargs-parser": { diff --git a/package.json b/package.json index 4e7a97c..2d3adaa 100644 --- a/package.json +++ b/package.json @@ -19,26 +19,26 @@ ] }, "devDependencies": { - "@cloudflare/workers-types": "^3.0.0", - "@types/jest": "^26.0.23", + "@cloudflare/workers-types": "^3.9.0", + "@types/jest": "^27.5.0", "@types/service-worker-mock": "^2.0.1", - "@typescript-eslint/eslint-plugin": "^4.16.1", - "@typescript-eslint/parser": "^4.16.1", - "eslint": "^7.21.0", - "eslint-config-prettier": "^8.1.0", + "@typescript-eslint/eslint-plugin": "^5.23.0", + "@typescript-eslint/parser": "^5.23.0", + "eslint": "^8.15.0", + "eslint-config-prettier": "^8.5.0", "eslint-config-typescript": "^3.0.0", - "jest": "^27.0.1", - "prettier": "^2.3.0", + "jest": "^28.1.0", + "prettier": "^2.6.2", "service-worker-mock": "^2.0.5", - "ts-jest": "^27.0.1", - "ts-loader": "^9.2.2", - "typescript": "^4.3.2", - "webpack": "^5.38.1", - "webpack-cli": "^4.7.0" + "ts-jest": "^28.0.2", + "ts-loader": "^9.3.0", + "typescript": "^4.6.4", + "webpack": "^5.72.0", + "webpack-cli": "^4.9.2" }, "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", - "itty-router": "^2.4.10", - "micro-stacks": "^0.2.2" + "itty-router": "^2.6.1", + "micro-stacks": "^0.3.0" } } From 690791ab5a998b6d4e709a54b6fdf320bb939917 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 9 May 2022 13:44:06 -0700 Subject: [PATCH 07/51] Revert "fix: update packages and dependencies" This reverts commit fed3fa78d583e290a09306631c82664eca61e339. --- package-lock.json | 8442 ++++++++++++++++++++++++++++----------------- package.json | 30 +- 2 files changed, 5381 insertions(+), 3091 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d8269b..b0e2a72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,83 +10,64 @@ "license": "MIT OR Apache-2.0", "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", - "itty-router": "^2.6.1", - "micro-stacks": "^0.3.0" + "itty-router": "^2.4.10", + "micro-stacks": "^0.2.2" }, "devDependencies": { - "@cloudflare/workers-types": "^3.9.0", - "@types/jest": "^27.5.0", + "@cloudflare/workers-types": "^3.0.0", + "@types/jest": "^26.0.23", "@types/service-worker-mock": "^2.0.1", - "@typescript-eslint/eslint-plugin": "^5.23.0", - "@typescript-eslint/parser": "^5.23.0", - "eslint": "^8.15.0", - "eslint-config-prettier": "^8.5.0", + "@typescript-eslint/eslint-plugin": "^4.16.1", + "@typescript-eslint/parser": "^4.16.1", + "eslint": "^7.21.0", + "eslint-config-prettier": "^8.1.0", "eslint-config-typescript": "^3.0.0", - "jest": "^28.1.0", - "prettier": "^2.6.2", + "jest": "^27.0.1", + "prettier": "^2.3.0", "service-worker-mock": "^2.0.5", - "ts-jest": "^28.0.2", - "ts-loader": "^9.3.0", - "typescript": "^4.6.4", - "webpack": "^5.72.0", - "webpack-cli": "^4.9.2" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "ts-jest": "^27.0.1", + "ts-loader": "^9.2.2", + "typescript": "^4.3.2", + "webpack": "^5.38.1", + "webpack-cli": "^4.7.0" } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/highlight": "^7.10.4" } }, "node_modules/@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", + "dev": true }, "node_modules/@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" @@ -96,6 +77,15 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -105,34 +95,46 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "dependencies": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", - "jsesc": "^2.5.1" - }, + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.14.4", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, - "engines": { - "node": ">=6.9.0" - }, "peerDependencies": { "@babel/core": "^7.0.0" } @@ -146,151 +148,137 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "node_modules/@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", "dev": true, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.4" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "dependencies": { - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true }, "node_modules/@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { @@ -365,9 +353,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -509,68 +497,72 @@ } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", - "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" } }, "node_modules/@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" } }, "node_modules/@babel/traverse/node_modules/globals": { @@ -583,16 +575,13 @@ } }, "node_modules/@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { @@ -610,9 +599,9 @@ } }, "node_modules/@cloudflare/workers-types": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.9.0.tgz", - "integrity": "sha512-juyc/T+0QlwB4p7mTPoxS87RlHjceXJdCWwbGAQ5l3dO5xSDymW41wYx6f6LYe51fLccpjibj56UvqKeec2SSw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.0.0.tgz", + "integrity": "sha512-RsasworfxdRyZC2iBN2Okgziydaq52uTStENePdH2JTmoA0bki53jOchvznk+ezu34WyXQLDpk4ogGyQ6BSVkw==", "dev": true }, "node_modules/@discoveryjs/json-ext": { @@ -625,44 +614,48 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", - "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.9.0", - "ignore": "^5.2.0", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "type-fest": "^0.8.1" }, "engines": { - "node": ">=10.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -680,28 +673,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/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==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -721,63 +692,88 @@ } }, "node_modules/@jest/console": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", - "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", + "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", + "jest-message-util": "^27.0.2", + "jest-util": "^27.0.2", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/@jest/core": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", - "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.3.tgz", + "integrity": "sha512-rN8lr/OJ8iApcQUh4khnMaOCVX4oRnLwy2tPW3Vh70y62K8Da8fhkxMUq0xX9VPa4+yWUm0tGc/jUSJi+Jzuwg==", "dev": true, "dependencies": { - "@jest/console": "^28.1.0", - "@jest/reporters": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^27.0.2", + "@jest/reporters": "^27.0.2", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "ci-info": "^3.2.0", + "emittery": "^0.8.1", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.0.2", - "jest-config": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-resolve-dependencies": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "jest-watcher": "^28.1.0", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.0.2", + "jest-config": "^27.0.3", + "jest-haste-map": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.2", + "jest-resolve-dependencies": "^27.0.3", + "jest-runner": "^27.0.3", + "jest-runtime": "^27.0.3", + "jest-snapshot": "^27.0.2", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "jest-watcher": "^27.0.2", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node-notifier": "^8.0.1 || ^9.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -785,146 +781,188 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "@types/yargs-parser": "*" } }, - "node_modules/@jest/core/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, "node_modules/@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.3.tgz", + "integrity": "sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==", "dev": true, "dependencies": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^27.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "expect": "^28.1.0", - "jest-snapshot": "^28.1.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, - "node_modules/@jest/expect-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.0.tgz", - "integrity": "sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw==", + "node_modules/@jest/fake-timers": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.3.tgz", + "integrity": "sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==", "dev": true, "dependencies": { - "jest-get-type": "^28.0.2" + "@jest/types": "^27.0.2", + "@sinonjs/fake-timers": "^7.0.2", + "@types/node": "*", + "jest-message-util": "^27.0.2", + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", - "@sinonjs/fake-timers": "^9.1.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/@jest/globals": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.0.tgz", - "integrity": "sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.3.tgz", + "integrity": "sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.3", + "@jest/types": "^27.0.2", + "expect": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/types": "^28.1.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/@jest/reporters": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.0.tgz", - "integrity": "sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.2.tgz", + "integrity": "sha512-SVQjew/kafNxSN1my4praGQP+VPVGHsU8zqiEDppLvq6j1lryIjdNb9P+bZSsKeifU4bIoaPnf9Ui0tK9WOpFA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", - "@jridgewell/trace-mapping": "^0.3.7", - "@types/node": "*", + "@jest/console": "^27.0.2", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^4.0.3", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.0.2", + "jest-resolve": "^27.0.2", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", "slash": "^3.0.0", + "source-map": "^0.6.0", "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.0" + "v8-to-istanbul": "^7.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node-notifier": "^8.0.1 || ^9.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -932,179 +970,162 @@ } } }, - "node_modules/@jest/reporters/node_modules/jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "@types/yargs-parser": "*" } }, - "node_modules/@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "node_modules/@jest/source-map": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", + "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.23.3" + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/source-map": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", - "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", + "node_modules/@jest/test-result": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", + "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.7", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@jest/console": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/test-result": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", - "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "@jest/console": "^28.1.0", - "@jest/types": "^28.1.0", "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/@jest/test-sequencer": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", - "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.3.tgz", + "integrity": "sha512-DcLTzraZ8xLr5fcIl+CF14vKeBBpBrn55wFxI9Ju+dhEBdjRdJQ/Z/pLkMehkPZWIQ+rR23J8e+wFDkfjree0Q==", "dev": true, "dependencies": { - "@jest/test-result": "^28.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "@jest/test-result": "^27.0.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-runtime": "^27.0.3" } }, "node_modules/@jest/transform": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.0.tgz", - "integrity": "sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.2.tgz", + "integrity": "sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.0", - "@jridgewell/trace-mapping": "^0.3.7", - "babel-plugin-istanbul": "^6.1.1", + "@babel/core": "^7.1.0", + "@jest/types": "^27.0.2", + "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-util": "^27.0.2", "micromatch": "^4.0.4", - "pirates": "^4.0.4", + "pirates": "^4.0.1", "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^17.0.8", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" + "@types/yargs-parser": "*" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.10.tgz", - "integrity": "sha512-Q0YbBd6OTsXm8Y21+YUSDXupHnodNC2M4O18jtd3iwJ3+vMZNdKGols0a9G6JOK0dcJ3IdUUHoh908ZI6qhk8Q==", + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" } }, "node_modules/@noble/hashes": { @@ -1113,9 +1134,9 @@ "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" }, "node_modules/@noble/secp256k1": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", - "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.2.tgz", + "integrity": "sha512-5mzA40W2q55VCRuC9XzmkiEnODdY0c5a7qsK2QcOfI5/MuVQyBaWGQyE6YOEF7kDwp+tDVWGsCDVJUME+wsWWw==", "funding": [ { "type": "individual", @@ -1124,12 +1145,12 @@ ] }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", + "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" }, "engines": { @@ -1137,33 +1158,27 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", + "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, - "node_modules/@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", - "dev": true - }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -1174,18 +1189,27 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1196,18 +1220,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1215,18 +1239,18 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" } }, "node_modules/@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -1234,9 +1258,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -1244,9 +1268,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", "dev": true }, "node_modules/@types/graceful-fs": { @@ -1259,9 +1283,9 @@ } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, "node_modules/@types/istanbul-lib-report": { @@ -1283,19 +1307,19 @@ } }, "node_modules/@types/jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.0.tgz", - "integrity": "sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==", + "version": "26.0.23", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", + "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", "dev": true, "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, "node_modules/@types/node": { @@ -1305,9 +1329,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", "dev": true }, "node_modules/@types/service-worker-mock": { @@ -1317,52 +1341,51 @@ "dev": true }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.23.0.tgz", - "integrity": "sha512-hEcSmG4XodSLiAp1uxv/OQSGsDY6QN3TcRU32gANp+19wGE1QQZLRS8/GV58VRUoXhnkuJ3ZxNQ3T6Z6zM59DA==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz", + "integrity": "sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.23.0", - "@typescript-eslint/type-utils": "5.23.0", - "@typescript-eslint/utils": "5.23.0", - "debug": "^4.3.2", + "@typescript-eslint/experimental-utils": "4.26.0", + "@typescript-eslint/scope-manager": "4.26.0", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", + "lodash": "^4.17.21", + "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1370,83 +1393,81 @@ } } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.23.0.tgz", - "integrity": "sha512-V06cYUkqcGqpFjb8ttVgzNF53tgbB/KoQT/iB++DOIExKmzI9vBJKjZKt/6FuV9c+zrDsvJKbJ2DOCYwX91cbw==", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz", + "integrity": "sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.23.0", - "@typescript-eslint/types": "5.23.0", - "@typescript-eslint/typescript-estree": "5.23.0", - "debug": "^4.3.2" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.26.0", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/typescript-estree": "4.26.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "*" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.23.0.tgz", - "integrity": "sha512-EhjaFELQHCRb5wTwlGsNMvzK9b8Oco4aYNleeDlNuL6qXWDF47ch4EhVNPh8Rdhf9tmqbN4sWDk/8g+Z/J8JVw==", + "node_modules/@typescript-eslint/parser": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.0.tgz", + "integrity": "sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.23.0", - "@typescript-eslint/visitor-keys": "5.23.0" + "@typescript-eslint/scope-manager": "4.26.0", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/typescript-estree": "4.26.0", + "debug": "^4.3.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.23.0.tgz", - "integrity": "sha512-iuI05JsJl/SUnOTXA9f4oI+/4qS/Zcgk+s2ir+lRmXI+80D8GaGwoUqs4p+X+4AxDolPpEpVUdlEH4ADxFy4gw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", + "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.23.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, "node_modules/@typescript-eslint/types": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.23.0.tgz", - "integrity": "sha512-NfBsV/h4dir/8mJwdZz7JFibaKC3E/QdeMEDJhiAE3/eMkoniZ7MjbEMCGXw6MZnZDMN3G9S0mH/6WUIj91dmw==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", + "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" }, "funding": { "type": "opencollective", @@ -1454,21 +1475,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.23.0.tgz", - "integrity": "sha512-xE9e0lrHhI647SlGMl+m+3E3CKPF1wzvvOEWnuE3CCjjT7UiRnDGJxmAcVKJIlFgK6DY9RB98eLr1OPigPEOGg==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", + "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.23.0", - "@typescript-eslint/visitor-keys": "5.23.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" }, "funding": { "type": "opencollective", @@ -1480,41 +1501,17 @@ } } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.23.0.tgz", - "integrity": "sha512-dbgaKN21drqpkbbedGMNPCtRPZo1IOUr5EI9Jrrh99r5UW5Q0dz46RKXeSBoPV+56R6dFKpbrdhgUNSJsDDRZA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.23.0", - "@typescript-eslint/types": "5.23.0", - "@typescript-eslint/typescript-estree": "5.23.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.23.0.tgz", - "integrity": "sha512-Vd4mFNchU62sJB8pX19ZSPog05B0Y0CE2UxAZPT5k4iqhRYjPnqyY3woMxCd0++t9OTqkgjST+1ydLBi7e2Fvg==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", + "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.23.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "4.26.0", + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" }, "funding": { "type": "opencollective", @@ -1522,155 +1519,155 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", - "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", + "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", "dev": true, "peerDependencies": { "webpack": "4.x.x || 5.x.x", @@ -1678,9 +1675,9 @@ } }, "node_modules/@webpack-cli/info": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", - "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", + "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", "dev": true, "dependencies": { "envinfo": "^7.7.3" @@ -1690,9 +1687,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", - "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", + "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", "dev": true, "peerDependencies": { "webpack-cli": "4.x.x" @@ -1715,10 +1712,16 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1727,24 +1730,46 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, - "peerDependencies": { - "acorn": "^8" + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1770,6 +1795,15 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1785,6 +1819,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1823,10 +1869,13 @@ } }, "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/array-union": { "version": "2.1.0", @@ -1837,37 +1886,78 @@ "node": ">=8" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "node_modules/babel-jest": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.0.tgz", - "integrity": "sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.2.tgz", + "integrity": "sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==", "dev": true, "dependencies": { - "@jest/transform": "^28.1.0", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.0.2", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.0.1", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.4", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", + "istanbul-lib-instrument": "^4.0.0", "test-exclude": "^6.0.0" }, "engines": { @@ -1875,18 +1965,18 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", - "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", + "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", + "@types/babel__core": "^7.0.0", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/babel-preset-current-node-syntax": { @@ -1913,16 +2003,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", - "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", + "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^28.0.2", + "babel-plugin-jest-hoist": "^27.0.1", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -1963,32 +2053,26 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "node-releases": "^1.1.71" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, "node_modules/bs-logger": { @@ -2037,20 +2121,14 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001338", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz", - "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==", + "version": "1.0.30001233", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001233.tgz", + "integrity": "sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, "node_modules/chalk": { "version": "4.1.1", @@ -2087,15 +2165,15 @@ } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", + "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", "dev": true }, "node_modules/cliui": { @@ -2158,16 +2236,28 @@ "dev": true }, "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -2176,9 +2266,9 @@ "dev": true }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" @@ -2198,10 +2288,48 @@ "node": ">= 8" } }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -2215,6 +2343,12 @@ } } }, + "node_modules/decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -2236,6 +2370,15 @@ "node": ">=0.10.0" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -2246,12 +2389,12 @@ } }, "node_modules/diff-sequences": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", - "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">= 10.14.2" } }, "node_modules/dir-glob": { @@ -2290,19 +2433,40 @@ "node": ">=0.8.0" } }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", + "version": "1.3.743", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.743.tgz", + "integrity": "sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg==", "dev": true }, "node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -2315,9 +2479,9 @@ "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", - "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -2327,6 +2491,18 @@ "node": ">=10.13.0" } }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", @@ -2339,19 +2515,10 @@ "node": ">=4" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", "dev": true }, "node_modules/escalade": { @@ -2375,45 +2542,131 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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==", + "dev": true, + "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/escodegen/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", - "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", + "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.2.3", - "@humanwhocodes/config-array": "^0.9.2", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.3.2", + "debug": "^4.0.1", "doctrine": "^3.0.0", + "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", + "glob-parent": "^5.0.0", "globals": "^13.6.0", - "ignore": "^5.2.0", + "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -2421,16 +2674,16 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -2482,7 +2735,7 @@ "eslint": ">=5" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", @@ -2491,49 +2744,60 @@ "node": ">=10" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=4" } }, - "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==", + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">= 4" } }, "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "dependencies": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" } }, "node_modules/esprima": { @@ -2651,19 +2915,45 @@ } }, "node_modules/expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", + "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.1", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-regex-util": "^27.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "@jest/expect-utils": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/expect/node_modules/ansi-styles": { @@ -2678,42 +2968,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/expect/node_modules/jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/expect/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "node_modules/expect/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/expect/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2721,31 +2984,20 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", + "glob-parent": "^5.1.0", "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, "node_modules/fast-json-stable-stringify": { @@ -2767,9 +3019,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -2840,6 +3092,20 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2932,15 +3198,15 @@ } }, "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 6" } }, "node_modules/glob-to-regexp": { @@ -2977,16 +3243,16 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", "slash": "^3.0.0" }, "engines": { @@ -2997,9 +3263,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "node_modules/has": { @@ -3023,12 +3289,51 @@ "node": ">=8" } }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3038,10 +3343,22 @@ "node": ">=10.17.0" } }, + "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/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, "engines": { "node": ">= 4" @@ -3113,11 +3430,17 @@ "node": ">= 0.10" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "node_modules/is-ci": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.1.1" + }, + "bin": { + "is-ci": "bin.js" + } }, "node_modules/is-core-module": { "version": "2.4.0", @@ -3159,9 +3482,9 @@ } }, "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==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -3191,6 +3514,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -3200,6 +3529,12 @@ "node": ">=8" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3216,24 +3551,23 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", + "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" }, "engines": { @@ -3264,9 +3598,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -3274,13 +3608,13 @@ "source-map": "^0.6.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -3291,28 +3625,28 @@ } }, "node_modules/itty-router": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.6.1.tgz", - "integrity": "sha512-l9gxWe5TOLUESYnBn85Jxd6tIZLWdRX5YKkHIBfSgbNQ7UFPNUGuWihRV+LlEbfJJIzgLmhwAbaWRi5yWJm8kg==" + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.4.10.tgz", + "integrity": "sha512-6z8UO4MoJRCdgLRVU++L6QTHJwU2pCAYFM8+9HjjcneRM5DqYyF5g6tsgIw24xXLFJlpvVrIzVzhjn862ZQZcQ==" }, "node_modules/jest": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", - "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.3.tgz", + "integrity": "sha512-0G9+QqXFIZWgf5rs3yllpaA+13ZawVHfyuhuCV1EnoFbX++rVMRrYWCAnk+dfhwyv9/VTQvn+XG969u8aPRsBg==", "dev": true, "dependencies": { - "@jest/core": "^28.1.0", + "@jest/core": "^27.0.3", "import-local": "^3.0.2", - "jest-cli": "^28.1.0" + "jest-cli": "^27.0.3" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node-notifier": "^8.0.1 || ^9.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -3321,46 +3655,97 @@ } }, "node_modules/jest-changed-files": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", - "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", + "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", "dev": true, "dependencies": { + "@jest/types": "^27.0.2", "execa": "^5.0.0", "throat": "^6.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-circus": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.0.tgz", - "integrity": "sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.3.tgz", + "integrity": "sha512-tdMfzs7SgD5l7jRcI1iB3vtQi5fHwCgo4RlO8bzZnYc05PZ+tlAOMZeS8eGYkZ2tPaRY/aRLMFWQp/8zXBrolQ==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/environment": "^27.0.3", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", + "expect": "^27.0.2", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0", + "jest-each": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-runtime": "^27.0.3", + "jest-snapshot": "^27.0.2", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-circus/node_modules/ansi-styles": { @@ -3375,119 +3760,84 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-circus/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-circus/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, - "node_modules/jest-cli": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", - "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", + "node_modules/jest-config": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.3.tgz", + "integrity": "sha512-zgtI2YQo+ekKsmYNyDlXFY/7w7WWBSJFoj/WRe173WB88CDUrEYWr0sLdbLOQe+sRu6l1Y2S0MCS6BOJm5jkoA==", "dev": true, "dependencies": { - "@jest/core": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^27.0.3", + "@jest/types": "^27.0.2", + "babel-jest": "^27.0.2", "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "is-ci": "^3.0.0", + "jest-circus": "^27.0.3", + "jest-environment-jsdom": "^27.0.3", + "jest-environment-node": "^27.0.3", + "jest-get-type": "^27.0.1", + "jest-jasmine2": "^27.0.3", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.2", + "jest-runner": "^27.0.3", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { - "node-notifier": { + "ts-node": { "optional": true } } }, - "node_modules/jest-config": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", - "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", + "node_modules/jest-config/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.0", - "@jest/types": "^28.1.0", - "babel-jest": "^28.1.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.0", - "jest-environment-node": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "ts-node": ">=9.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-config/node_modules/ansi-styles": { @@ -3502,101 +3852,96 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-config/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-config/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, "node_modules/jest-diff": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", - "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^28.0.2", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">= 10.14.2" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-docblock": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", + "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "detect-newline": "^3.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "node_modules/jest-each": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", + "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/types": "^27.0.2", + "chalk": "^4.0.0", + "jest-get-type": "^27.0.1", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, - "node_modules/jest-docblock": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", - "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", + "node_modules/jest-each/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-each": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", - "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "@types/yargs-parser": "*" } }, "node_modules/jest-each/node_modules/ansi-styles": { @@ -3611,121 +3956,230 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-each/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-each/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true + "node_modules/jest-environment-jsdom": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz", + "integrity": "sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", + "@types/node": "*", + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } }, "node_modules/jest-environment-node": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.0.tgz", - "integrity": "sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.3.tgz", + "integrity": "sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", "@types/node": "*", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">= 10.14.2" } }, "node_modules/jest-haste-map": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.0.tgz", - "integrity": "sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.2.tgz", + "integrity": "sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", - "@types/graceful-fs": "^4.1.3", + "@jest/types": "^27.0.2", + "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.0.1", + "jest-serializer": "^27.0.1", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", "micromatch": "^4.0.4", "walker": "^1.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-haste-map/node_modules/jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-haste-map/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.3.tgz", + "integrity": "sha512-odJ2ia8P5c+IsqOcWJPmku4AqbXIfTVLRjYTKHri3TEvbmTdLw0ghy13OAPIl/0v7cVH0TURK7+xFOHKDLvKIA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^27.0.3", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.0.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-runtime": "^27.0.3", + "jest-snapshot": "^27.0.2", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2", + "throat": "^6.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-leak-detector": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.0.tgz", - "integrity": "sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA==", + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -3737,26 +4191,94 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "node_modules/jest-jasmine2/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-leak-detector/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true + "node_modules/jest-leak-detector": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", + "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, "node_modules/jest-matcher-utils": { "version": "27.0.2", @@ -3773,6 +4295,43 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-matcher-utils/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-matcher-utils/node_modules/diff-sequences": { "version": "27.0.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", @@ -3806,24 +4365,73 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", + "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^27.0.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/jest-message-util/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-message-util/node_modules/ansi-styles": { @@ -3839,37 +4447,56 @@ } }, "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, "node_modules/jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", + "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "@types/node": "*" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-pnp-resolver": { @@ -3890,183 +4517,287 @@ } }, "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", + "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.0.tgz", - "integrity": "sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.2.tgz", + "integrity": "sha512-rmfLGyZhwAUR5z3EwPAW7LQTorWAuCYCcsQJoQxT2it+BOgX3zKxa67r1pfpK3ihy2k9TjYD3/lMp5rPm/CL1Q==", "dev": true, "dependencies": { + "@jest/types": "^27.0.2", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", + "escalade": "^3.1.1", + "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.0.tgz", - "integrity": "sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.3.tgz", + "integrity": "sha512-HdjWOvFAgT5CYChF2eiBN2rRKicjaTCCtA3EtH47REIdGzEHGUhYrWYgLahXsiOovvWN6edhcHL5WCa3gbc04A==", "dev": true, "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.0" + "@jest/types": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-snapshot": "^27.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-runner": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", - "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "dependencies": { - "@jest/console": "^28.1.0", - "@jest/environment": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.0.2", - "jest-environment-node": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-leak-detector": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-resolve": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-util": "^28.1.0", - "jest-watcher": "^28.1.0", - "jest-worker": "^28.1.0", - "source-map-support": "0.5.13", - "throat": "^6.0.1" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-runner/node_modules/jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@types/yargs-parser": "*" } }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/jest-runner": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.3.tgz", + "integrity": "sha512-zH23uIIh1ro1JCD7XX1bQ0bQwXEsBzLX2UJVE/AVLsk4YJRmTfyXIzzRzBWRdnMHHg1NWkJ4fGs7eFP15IqZpQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jest/console": "^27.0.2", + "@jest/environment": "^27.0.3", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.0.1", + "jest-haste-map": "^27.0.2", + "jest-leak-detector": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-resolve": "^27.0.2", + "jest-runtime": "^27.0.3", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-runtime": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", - "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/globals": "^28.1.0", - "@jest/source-map": "^28.0.2", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.3.tgz", + "integrity": "sha512-k1Hl2pWWHBkSXdCggX2lyLRuDnnnmMlnJd+DPLb8LmmAeHW87WgGC6TplD377VxY3KQu73sklkhGUIdwFgsRVQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.2", + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/globals": "^27.0.3", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", + "exit": "^0.1.2", "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-mock": "^27.0.3", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.2", + "jest-snapshot": "^27.0.2", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "strip-bom": "^4.0.0", + "yargs": "^16.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-serializer": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", + "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", - "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.2.tgz", + "integrity": "sha512-4RcgvZbPrrbEE/hT6XQ4hr+NVVLNrmsgUnYSnZRT6UAvW9Q2yzGMS+tfJh+xlQJAapnnkNJzsMn6vUa+yfiVHA==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", + "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", - "@types/babel__traverse": "^7.0.6", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^28.1.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", + "expect": "^27.0.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.0.2", + "jest-get-type": "^27.0.1", + "jest-haste-map": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-resolve": "^27.0.2", + "jest-util": "^27.0.2", "natural-compare": "^1.4.0", - "pretty-format": "^28.1.0", - "semver": "^7.3.5" + "pretty-format": "^27.0.2", + "semver": "^7.3.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { @@ -4081,74 +4812,136 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", + "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", + "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "diff-sequences": "^27.0.1", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-snapshot/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, "node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", + "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.4", + "is-ci": "^3.0.0", "picomatch": "^2.2.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-validate": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", - "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", + "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", + "jest-get-type": "^27.0.1", "leven": "^3.1.0", - "pretty-format": "^28.1.0" + "pretty-format": "^27.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-validate/node_modules/ansi-styles": { @@ -4164,9 +4957,9 @@ } }, "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, "engines": { "node": ">=10" @@ -4175,44 +4968,71 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-validate/node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-validate/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, "node_modules/jest-watcher": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", - "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", + "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", "dev": true, "dependencies": { - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.0", + "jest-util": "^27.0.2", "string-length": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-worker": { @@ -4244,6 +5064,65 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jest/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.3.tgz", + "integrity": "sha512-7bt9Sgv4nWH5pUnyJfdLf8CHWfo4+7lSPxeBwQx4r0vBj9jweJam/piE2U91SXtQI+ckm+TIN97OVnqIYpVhSg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.0.3", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.0.3", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "prompts": "^2.0.1", + "yargs": "^16.0.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4251,17 +5130,76 @@ "dev": true }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -4280,12 +5218,6 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -4299,10 +5231,13 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, "bin": { "json5": "lib/cli.js" }, @@ -4350,12 +5285,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, "node_modules/loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -4377,12 +5306,24 @@ "node": ">=8" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "node_modules/lodash._basefor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", "dev": true }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -4416,18 +5357,18 @@ "lodash.isarray": "^3.0.0" } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4471,12 +5412,12 @@ "dev": true }, "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "dependencies": { - "tmpl": "1.0.5" + "tmpl": "1.0.x" } }, "node_modules/merge-stream": { @@ -4495,27 +5436,15 @@ } }, "node_modules/micro-stacks": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-0.3.0.tgz", - "integrity": "sha512-RHOMtMaptyAffSQvwR2mvLyN3y72PP0cq3qaTY74sFt/yPzQa4eihQHD2Fbw9eI8uean20mqZ4e+A+nLUmQeYQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-0.2.2.tgz", + "integrity": "sha512-2mZqWcXWkmOXWsb7pShS+9X8XpPdNWZ0HCYYGxdEvHOuWQY4XeAai307xNh5afIFY2aik/OTljFjUmKIvGtU8Q==", "dependencies": { "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5" + "@noble/secp256k1": "1.5.2" }, "engines": { "node": ">=12" - }, - "peerDependencies": { - "@scure/bip32": "1.0.1", - "@scure/bip39": "1.0.0" - }, - "peerDependenciesMeta": { - "@scure/bip32": { - "optional": true - }, - "@scure/bip39": { - "optional": true - } } }, "node_modules/micromatch": { @@ -4573,9 +5502,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -4584,6 +5513,24 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4608,10 +5555,19 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, "node_modules/normalize-path": { @@ -4635,6 +5591,12 @@ "node": ">=8" } }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4676,6 +5638,18 @@ "node": ">= 0.8.0" } }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -4724,23 +5698,11 @@ "node": ">=6" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/path-exists": { "version": "4.0.0", @@ -4784,12 +5746,6 @@ "node": ">=8" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -4803,10 +5759,13 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, "engines": { "node": ">= 6" } @@ -4833,50 +5792,45 @@ } }, "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", "react-is": "^17.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 10" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.4.0" } }, "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dev": true, "dependencies": { "kleur": "^3.0.3", @@ -4886,6 +5840,12 @@ "node": ">= 6" } }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -4952,9 +5912,9 @@ } }, "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true, "engines": { "node": ">=8" @@ -4972,6 +5932,15 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -5015,15 +5984,6 @@ "node": ">=4" } }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -5078,13 +6038,31 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", + "@types/json-schema": "^7.0.6", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -5188,9 +6166,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "node_modules/sisteransi": { @@ -5208,6 +6186,29 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5234,9 +6235,9 @@ "dev": true }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -5268,26 +6269,26 @@ } }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^5.0.0" }, "engines": { "node": ">=8" @@ -5348,6 +6349,51 @@ "node": ">=8" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/tapable": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", @@ -5479,65 +6525,76 @@ "node": ">=4" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { - "is-number": "^7.0.0" + "punycode": "^2.1.1" }, "engines": { - "node": ">=8.0" + "node": ">=8" } }, "node_modules/ts-jest": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.2.tgz", - "integrity": "sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.2.tgz", + "integrity": "sha512-pozjHOOfm+sbv9kXCvTFVyDntWvuJztzkNFql/akD75hSMZ2jsbidVauOhBRImAopXohqcLtPK/NTTIS8Y49Ug==", "dev": true, "dependencies": { "bs-logger": "0.x", + "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^28.0.0", + "jest-util": "^27.0.0", "json5": "2.x", - "lodash.memoize": "4.x", + "lodash": "4.x", "make-error": "1.x", + "mkdirp": "1.x", "semver": "7.x", - "yargs-parser": "^20.x" + "yargs-parser": "20.x" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": "^28.0.0", - "jest": "^28.0.0", - "typescript": ">=4.3" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" } }, "node_modules/ts-loader": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.0.tgz", - "integrity": "sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.2.tgz", + "integrity": "sha512-hNIhGTQHtNKjOzR2ZtQ2OSVbXPykOae+zostf1IlHCf61Mt41GMJurKNqrYUbzHgpmj6UWRu8eBfb7q0XliV0g==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -5596,21 +6653,27 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -5620,6 +6683,15 @@ "node": ">=4.2.0" } }, + "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==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5649,17 +6721,26 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", - "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.7", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" }, "engines": { - "node": ">=10.12.0" + "node": ">=10.10.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" } }, "node_modules/w3c-hr-time": { @@ -5671,19 +6752,31 @@ "browser-process-hrtime": "^1.0.0" } }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "dependencies": { - "makeerror": "1.0.12" + "makeerror": "1.0.x" } }, "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -5693,36 +6786,44 @@ "node": ">=10.13.0" } }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, "node_modules/webpack": { - "version": "5.72.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", - "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", + "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.2", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.0.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" }, "bin": { "webpack": "bin/webpack.js" @@ -5741,22 +6842,23 @@ } }, "node_modules/webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", - "colorette": "^2.0.14", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", + "colorette": "^1.2.1", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "bin": { @@ -5806,14 +6908,59 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", "dev": true, + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, "engines": { "node": ">=10.13.0" } }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5868,18 +7015,50 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "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==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -5896,21 +7075,21 @@ "dev": true }, "node_modules/yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^4.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/yargs-parser": { @@ -5922,15 +7101,6 @@ "node": ">=10" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -5945,82 +7115,95 @@ } }, "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.10.4" } }, "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", "dev": true }, "@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, "@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "requires": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", - "jsesc": "^2.5.1" + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.14.4", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, "dependencies": { @@ -6032,113 +7215,135 @@ } } }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/types": "^7.12.13" } }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/types": "^7.12.13" } }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, + "@babel/helper-replace-supers": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.4" + } + }, "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "requires": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.13.12" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.12.13" } }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", "dev": true }, "@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -6202,9 +7407,9 @@ } }, "@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -6307,52 +7512,70 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-typescript": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", - "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } } }, "@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -6362,12 +7585,12 @@ } }, "@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -6386,9 +7609,9 @@ } }, "@cloudflare/workers-types": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.9.0.tgz", - "integrity": "sha512-juyc/T+0QlwB4p7mTPoxS87RlHjceXJdCWwbGAQ5l3dO5xSDymW41wYx6f6LYe51fLccpjibj56UvqKeec2SSw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.0.0.tgz", + "integrity": "sha512-RsasworfxdRyZC2iBN2Okgziydaq52uTStENePdH2JTmoA0bki53jOchvznk+ezu34WyXQLDpk4ogGyQ6BSVkw==", "dev": true }, "@discoveryjs/json-ext": { @@ -6398,39 +7621,39 @@ "dev": true }, "@eslint/eslintrc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", - "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.9.0", - "ignore": "^5.2.0", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } } }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -6444,25 +7667,6 @@ "resolve-from": "^5.0.0" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -6478,353 +7682,424 @@ "dev": true }, "@jest/console": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", - "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", + "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", + "jest-message-util": "^27.0.2", + "jest-util": "^27.0.2", "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "@jest/core": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", - "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.3.tgz", + "integrity": "sha512-rN8lr/OJ8iApcQUh4khnMaOCVX4oRnLwy2tPW3Vh70y62K8Da8fhkxMUq0xX9VPa4+yWUm0tGc/jUSJi+Jzuwg==", "dev": true, "requires": { - "@jest/console": "^28.1.0", - "@jest/reporters": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^27.0.2", + "@jest/reporters": "^27.0.2", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "ci-info": "^3.2.0", + "emittery": "^0.8.1", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.0.2", - "jest-config": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-resolve-dependencies": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "jest-watcher": "^28.1.0", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.0.2", + "jest-config": "^27.0.3", + "jest-haste-map": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.2", + "jest-resolve-dependencies": "^27.0.3", + "jest-runner": "^27.0.3", + "jest-runtime": "^27.0.3", + "jest-snapshot": "^27.0.2", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "jest-watcher": "^27.0.2", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } } } }, "@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.3.tgz", + "integrity": "sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==", "dev": true, "requires": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", "@types/node": "*", - "jest-mock": "^28.1.0" - } - }, - "@jest/expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", - "dev": true, - "requires": { - "expect": "^28.1.0", - "jest-snapshot": "^28.1.0" - } - }, - "@jest/expect-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.0.tgz", - "integrity": "sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2" + "jest-mock": "^27.0.3" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.3.tgz", + "integrity": "sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", - "@sinonjs/fake-timers": "^9.1.1", + "@jest/types": "^27.0.2", + "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^27.0.2", + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "@jest/globals": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.0.tgz", - "integrity": "sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.3.tgz", + "integrity": "sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==", "dev": true, "requires": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/types": "^28.1.0" + "@jest/environment": "^27.0.3", + "@jest/types": "^27.0.2", + "expect": "^27.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "@jest/reporters": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.0.tgz", - "integrity": "sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.2.tgz", + "integrity": "sha512-SVQjew/kafNxSN1my4praGQP+VPVGHsU8zqiEDppLvq6j1lryIjdNb9P+bZSsKeifU4bIoaPnf9Ui0tK9WOpFA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", - "@jridgewell/trace-mapping": "^0.3.7", - "@types/node": "*", + "@jest/console": "^27.0.2", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^4.0.3", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.0.2", + "jest-resolve": "^27.0.2", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", "slash": "^3.0.0", + "source-map": "^0.6.0", "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.0" + "v8-to-istanbul": "^7.0.0" }, "dependencies": { - "jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@types/yargs-parser": "*" } } } }, - "@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.23.3" - } - }, "@jest/source-map": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", - "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", + "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.7", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" } }, "@jest/test-result": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", - "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", + "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", "dev": true, "requires": { - "@jest/console": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^27.0.2", + "@jest/types": "^27.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "@jest/test-sequencer": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", - "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.3.tgz", + "integrity": "sha512-DcLTzraZ8xLr5fcIl+CF14vKeBBpBrn55wFxI9Ju+dhEBdjRdJQ/Z/pLkMehkPZWIQ+rR23J8e+wFDkfjree0Q==", "dev": true, "requires": { - "@jest/test-result": "^28.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "slash": "^3.0.0" + "@jest/test-result": "^27.0.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-runtime": "^27.0.3" } }, "@jest/transform": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.0.tgz", - "integrity": "sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.2.tgz", + "integrity": "sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==", "dev": true, "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.0", - "@jridgewell/trace-mapping": "^0.3.7", - "babel-plugin-istanbul": "^6.1.1", + "@babel/core": "^7.1.0", + "@jest/types": "^27.0.2", + "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-util": "^27.0.2", "micromatch": "^4.0.4", - "pirates": "^4.0.4", + "pirates": "^4.0.1", "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^17.0.8", + "@types/yargs": "^15.0.0", "chalk": "^4.0.0" } }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.10.tgz", - "integrity": "sha512-Q0YbBd6OTsXm8Y21+YUSDXupHnodNC2M4O18jtd3iwJ3+vMZNdKGols0a9G6JOK0dcJ3IdUUHoh908ZI6qhk8Q==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "@noble/hashes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" }, "@noble/secp256k1": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", - "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.2.tgz", + "integrity": "sha512-5mzA40W2q55VCRuC9XzmkiEnODdY0c5a7qsK2QcOfI5/MuVQyBaWGQyE6YOEF7kDwp+tDVWGsCDVJUME+wsWWw==" }, "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.5", + "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.5", + "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" } }, - "@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", - "dev": true - }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -6835,18 +8110,24 @@ } }, "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -6857,18 +8138,18 @@ } }, "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -6876,18 +8157,18 @@ } }, "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", "dev": true, "requires": { "@types/estree": "*", @@ -6895,9 +8176,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", "dev": true, "requires": { "@types/eslint": "*", @@ -6905,9 +8186,9 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", "dev": true }, "@types/graceful-fs": { @@ -6920,9 +8201,9 @@ } }, "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, "@types/istanbul-lib-report": { @@ -6944,19 +8225,19 @@ } }, "@types/jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.0.tgz", - "integrity": "sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==", + "version": "26.0.23", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", + "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", "dev": true, "requires": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" } }, "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, "@types/node": { @@ -6966,9 +8247,9 @@ "dev": true }, "@types/prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", "dev": true }, "@types/service-worker-mock": { @@ -6978,287 +8259,275 @@ "dev": true }, "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.23.0.tgz", - "integrity": "sha512-hEcSmG4XodSLiAp1uxv/OQSGsDY6QN3TcRU32gANp+19wGE1QQZLRS8/GV58VRUoXhnkuJ3ZxNQ3T6Z6zM59DA==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz", + "integrity": "sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.23.0", - "@typescript-eslint/type-utils": "5.23.0", - "@typescript-eslint/utils": "5.23.0", - "debug": "^4.3.2", + "@typescript-eslint/experimental-utils": "4.26.0", + "@typescript-eslint/scope-manager": "4.26.0", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", + "lodash": "^4.17.21", + "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, - "@typescript-eslint/parser": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.23.0.tgz", - "integrity": "sha512-V06cYUkqcGqpFjb8ttVgzNF53tgbB/KoQT/iB++DOIExKmzI9vBJKjZKt/6FuV9c+zrDsvJKbJ2DOCYwX91cbw==", + "@typescript-eslint/experimental-utils": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz", + "integrity": "sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.23.0", - "@typescript-eslint/types": "5.23.0", - "@typescript-eslint/typescript-estree": "5.23.0", - "debug": "^4.3.2" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.26.0", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/typescript-estree": "4.26.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, - "@typescript-eslint/scope-manager": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.23.0.tgz", - "integrity": "sha512-EhjaFELQHCRb5wTwlGsNMvzK9b8Oco4aYNleeDlNuL6qXWDF47ch4EhVNPh8Rdhf9tmqbN4sWDk/8g+Z/J8JVw==", + "@typescript-eslint/parser": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.0.tgz", + "integrity": "sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.23.0", - "@typescript-eslint/visitor-keys": "5.23.0" + "@typescript-eslint/scope-manager": "4.26.0", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/typescript-estree": "4.26.0", + "debug": "^4.3.1" } }, - "@typescript-eslint/type-utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.23.0.tgz", - "integrity": "sha512-iuI05JsJl/SUnOTXA9f4oI+/4qS/Zcgk+s2ir+lRmXI+80D8GaGwoUqs4p+X+4AxDolPpEpVUdlEH4ADxFy4gw==", + "@typescript-eslint/scope-manager": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", + "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.23.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0" } }, "@typescript-eslint/types": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.23.0.tgz", - "integrity": "sha512-NfBsV/h4dir/8mJwdZz7JFibaKC3E/QdeMEDJhiAE3/eMkoniZ7MjbEMCGXw6MZnZDMN3G9S0mH/6WUIj91dmw==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", + "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.23.0.tgz", - "integrity": "sha512-xE9e0lrHhI647SlGMl+m+3E3CKPF1wzvvOEWnuE3CCjjT7UiRnDGJxmAcVKJIlFgK6DY9RB98eLr1OPigPEOGg==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", + "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.23.0", - "@typescript-eslint/visitor-keys": "5.23.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, - "@typescript-eslint/utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.23.0.tgz", - "integrity": "sha512-dbgaKN21drqpkbbedGMNPCtRPZo1IOUr5EI9Jrrh99r5UW5Q0dz46RKXeSBoPV+56R6dFKpbrdhgUNSJsDDRZA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.23.0", - "@typescript-eslint/types": "5.23.0", - "@typescript-eslint/typescript-estree": "5.23.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, "@typescript-eslint/visitor-keys": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.23.0.tgz", - "integrity": "sha512-Vd4mFNchU62sJB8pX19ZSPog05B0Y0CE2UxAZPT5k4iqhRYjPnqyY3woMxCd0++t9OTqkgjST+1ydLBi7e2Fvg==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", + "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.23.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "4.26.0", + "eslint-visitor-keys": "^2.0.0" } }, "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, "@webpack-cli/configtest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", - "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", + "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", "dev": true, "requires": {} }, "@webpack-cli/info": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", - "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", + "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", - "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", + "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", "dev": true, "requires": {} }, @@ -7274,26 +8543,50 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, - "requires": {} + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } }, "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true, "requires": {} }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -7313,6 +8606,12 @@ "dev": true, "requires": {} }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -7320,6 +8619,14 @@ "dev": true, "requires": { "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, "ansi-regex": { @@ -7348,10 +8655,13 @@ } }, "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, "array-union": { "version": "2.1.0", @@ -7359,43 +8669,80 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "babel-jest": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.0.tgz", - "integrity": "sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.2.tgz", + "integrity": "sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==", "dev": true, "requires": { - "@jest/transform": "^28.1.0", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.0.2", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.0.1", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.4", "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", + "istanbul-lib-instrument": "^4.0.0", "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", - "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", + "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", + "@types/babel__core": "^7.0.0", "@types/babel__traverse": "^7.0.6" } }, @@ -7420,12 +8767,12 @@ } }, "babel-preset-jest": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", - "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", + "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^28.0.2", + "babel-plugin-jest-hoist": "^27.0.1", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -7461,16 +8808,16 @@ "dev": true }, "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "node-releases": "^1.1.71" } }, "bs-logger": { @@ -7510,9 +8857,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001338", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz", - "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==", + "version": "1.0.30001233", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001233.tgz", + "integrity": "sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg==", "dev": true }, "chalk": { @@ -7538,15 +8885,15 @@ "dev": true }, "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", + "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", "dev": true }, "cliui": { @@ -7599,11 +8946,20 @@ "dev": true }, "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -7617,9 +8973,9 @@ "dev": true }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -7636,15 +8992,55 @@ "which": "^2.0.1" } }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" } }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -7663,6 +9059,12 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -7670,9 +9072,9 @@ "dev": true }, "diff-sequences": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", - "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", "dev": true }, "dir-glob": { @@ -7702,16 +9104,33 @@ "urijs": "^1.16.1" } }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", + "version": "1.3.743", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.743.tgz", + "integrity": "sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg==", "dev": true }, "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, "emoji-regex": { @@ -7721,113 +9140,184 @@ "dev": true }, "enhanced-resolve": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", - "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, "envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } } }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, "eslint": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", - "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", + "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.3", - "@humanwhocodes/config-array": "^0.9.2", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.3.2", + "debug": "^4.0.1", "doctrine": "^3.0.0", + "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", + "glob-parent": "^5.0.0", "globals": "^13.6.0", - "ignore": "^5.2.0", + "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true } } }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, "requires": {} }, @@ -7855,31 +9345,31 @@ "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } } }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "esprima": { @@ -7964,52 +9454,51 @@ "dev": true }, "expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", + "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", "dev": true, "requires": { - "@jest/expect-utils": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0" + "@jest/types": "^27.0.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.1", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-regex-util": "^27.0.1" }, "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@types/yargs-parser": "*" } }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", "dev": true } } @@ -8021,27 +9510,17 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", + "glob-parent": "^5.1.0", "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } }, "fast-json-stable-stringify": { @@ -8063,9 +9542,9 @@ "dev": true }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -8124,6 +9603,17 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -8188,12 +9678,12 @@ } }, "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.1" } }, "glob-to-regexp": { @@ -8220,23 +9710,23 @@ } }, "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", "slash": "^3.0.0" } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "has": { @@ -8254,22 +9744,61 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "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" + } + }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, "import-fresh": { @@ -8320,11 +9849,14 @@ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "is-ci": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", + "dev": true, + "requires": { + "ci-info": "^3.1.1" + } }, "is-core-module": { "version": "2.4.0", @@ -8354,9 +9886,9 @@ "dev": true }, "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -8377,12 +9909,24 @@ "isobject": "^3.0.1" } }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -8396,21 +9940,20 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true }, "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", + "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" }, "dependencies": { @@ -8434,9 +9977,9 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "requires": { "debug": "^4.1.1", @@ -8445,9 +9988,9 @@ } }, "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -8455,330 +9998,504 @@ } }, "itty-router": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.6.1.tgz", - "integrity": "sha512-l9gxWe5TOLUESYnBn85Jxd6tIZLWdRX5YKkHIBfSgbNQ7UFPNUGuWihRV+LlEbfJJIzgLmhwAbaWRi5yWJm8kg==" + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.4.10.tgz", + "integrity": "sha512-6z8UO4MoJRCdgLRVU++L6QTHJwU2pCAYFM8+9HjjcneRM5DqYyF5g6tsgIw24xXLFJlpvVrIzVzhjn862ZQZcQ==" }, "jest": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", - "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.3.tgz", + "integrity": "sha512-0G9+QqXFIZWgf5rs3yllpaA+13ZawVHfyuhuCV1EnoFbX++rVMRrYWCAnk+dfhwyv9/VTQvn+XG969u8aPRsBg==", "dev": true, "requires": { - "@jest/core": "^28.1.0", + "@jest/core": "^27.0.3", "import-local": "^3.0.2", - "jest-cli": "^28.1.0" + "jest-cli": "^27.0.3" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "jest-cli": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.3.tgz", + "integrity": "sha512-7bt9Sgv4nWH5pUnyJfdLf8CHWfo4+7lSPxeBwQx4r0vBj9jweJam/piE2U91SXtQI+ckm+TIN97OVnqIYpVhSg==", + "dev": true, + "requires": { + "@jest/core": "^27.0.3", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.0.3", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "prompts": "^2.0.1", + "yargs": "^16.0.3" + } + } } }, "jest-changed-files": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", - "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", + "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", "dev": true, "requires": { + "@jest/types": "^27.0.2", "execa": "^5.0.0", "throat": "^6.0.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "jest-circus": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.0.tgz", - "integrity": "sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.3.tgz", + "integrity": "sha512-tdMfzs7SgD5l7jRcI1iB3vtQi5fHwCgo4RlO8bzZnYc05PZ+tlAOMZeS8eGYkZ2tPaRY/aRLMFWQp/8zXBrolQ==", "dev": true, "requires": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/environment": "^27.0.3", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", + "expect": "^27.0.2", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0", + "jest-each": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-runtime": "^27.0.3", + "jest-snapshot": "^27.0.2", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" - } - }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" } - }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true } } }, - "jest-cli": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", - "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", - "dev": true, - "requires": { - "@jest/core": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, "jest-config": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", - "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.3.tgz", + "integrity": "sha512-zgtI2YQo+ekKsmYNyDlXFY/7w7WWBSJFoj/WRe173WB88CDUrEYWr0sLdbLOQe+sRu6l1Y2S0MCS6BOJm5jkoA==", "dev": true, "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.0", - "@jest/types": "^28.1.0", - "babel-jest": "^28.1.0", + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^27.0.3", + "@jest/types": "^27.0.2", + "babel-jest": "^27.0.2", "chalk": "^4.0.0", - "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.0", - "jest-environment-node": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "is-ci": "^3.0.0", + "jest-circus": "^27.0.3", + "jest-environment-jsdom": "^27.0.3", + "jest-environment-node": "^27.0.3", + "jest-get-type": "^27.0.1", + "jest-jasmine2": "^27.0.3", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.2", + "jest-runner": "^27.0.3", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "pretty-format": "^27.0.2" }, "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, + "jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true + }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" } - }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true } } }, "jest-diff": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", - "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^28.0.2", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - } + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" } }, "jest-docblock": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", - "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", + "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", - "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", + "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0" + "jest-get-type": "^27.0.1", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2" }, "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, + "jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true + }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "requires": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } + } + } + }, + "jest-environment-jsdom": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz", + "integrity": "sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==", + "dev": true, + "requires": { + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", + "@types/node": "*", + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2", + "jsdom": "^16.6.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } } } }, "jest-environment-node": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.0.tgz", - "integrity": "sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.3.tgz", + "integrity": "sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==", "dev": true, "requires": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", "@types/node": "*", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true }, "jest-haste-map": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.0.tgz", - "integrity": "sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.2.tgz", + "integrity": "sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", - "@types/graceful-fs": "^4.1.3", + "@jest/types": "^27.0.2", + "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.0.1", + "jest-serializer": "^27.0.1", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", "micromatch": "^4.0.4", "walker": "^1.0.7" }, "dependencies": { - "jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@types/yargs-parser": "*" } } } }, - "jest-leak-detector": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.0.tgz", - "integrity": "sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA==", + "jest-jasmine2": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.3.tgz", + "integrity": "sha512-odJ2ia8P5c+IsqOcWJPmku4AqbXIfTVLRjYTKHri3TEvbmTdLw0ghy13OAPIl/0v7cVH0TURK7+xFOHKDLvKIA==", "dev": true, "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "@babel/traverse": "^7.1.0", + "@jest/environment": "^27.0.3", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.0.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-runtime": "^27.0.3", + "jest-snapshot": "^27.0.2", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2", + "throat": "^6.0.1" }, "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -8786,22 +10503,74 @@ "dev": true }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" + } + } + } + }, + "jest-leak-detector": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", + "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", + "dev": true, + "requires": { + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" } }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", "dev": true + }, + "pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "requires": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } } } }, @@ -8817,6 +10586,34 @@ "pretty-format": "^27.0.2" }, "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "diff-sequences": { "version": "27.0.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", @@ -8840,26 +10637,69 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", "dev": true + }, + "pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "requires": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } } } }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", + "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^27.0.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -8867,33 +10707,51 @@ "dev": true }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" } - }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true } } }, "jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", + "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "@types/node": "*" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "jest-pnp-resolver": { @@ -8904,226 +10762,379 @@ "requires": {} }, "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", + "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", "dev": true }, "jest-resolve": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.0.tgz", - "integrity": "sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.2.tgz", + "integrity": "sha512-rmfLGyZhwAUR5z3EwPAW7LQTorWAuCYCcsQJoQxT2it+BOgX3zKxa67r1pfpK3ihy2k9TjYD3/lMp5rPm/CL1Q==", "dev": true, "requires": { + "@jest/types": "^27.0.2", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", + "escalade": "^3.1.1", + "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "jest-resolve-dependencies": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.0.tgz", - "integrity": "sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.3.tgz", + "integrity": "sha512-HdjWOvFAgT5CYChF2eiBN2rRKicjaTCCtA3EtH47REIdGzEHGUhYrWYgLahXsiOovvWN6edhcHL5WCa3gbc04A==", "dev": true, "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.0" + "@jest/types": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-snapshot": "^27.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "jest-runner": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", - "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.3.tgz", + "integrity": "sha512-zH23uIIh1ro1JCD7XX1bQ0bQwXEsBzLX2UJVE/AVLsk4YJRmTfyXIzzRzBWRdnMHHg1NWkJ4fGs7eFP15IqZpQ==", "dev": true, "requires": { - "@jest/console": "^28.1.0", - "@jest/environment": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^27.0.2", + "@jest/environment": "^27.0.3", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.0.2", - "jest-environment-node": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-leak-detector": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-resolve": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-util": "^28.1.0", - "jest-watcher": "^28.1.0", - "jest-worker": "^28.1.0", - "source-map-support": "0.5.13", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.0.1", + "jest-haste-map": "^27.0.2", + "jest-leak-detector": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-resolve": "^27.0.2", + "jest-runtime": "^27.0.3", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", + "source-map-support": "^0.5.6", "throat": "^6.0.1" }, "dependencies": { - "jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", "dev": true, "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@types/yargs-parser": "*" } } } }, "jest-runtime": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", - "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/globals": "^28.1.0", - "@jest/source-map": "^28.0.2", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.3.tgz", + "integrity": "sha512-k1Hl2pWWHBkSXdCggX2lyLRuDnnnmMlnJd+DPLb8LmmAeHW87WgGC6TplD377VxY3KQu73sklkhGUIdwFgsRVQ==", + "dev": true, + "requires": { + "@jest/console": "^27.0.2", + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/globals": "^27.0.3", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", + "exit": "^0.1.2", "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-mock": "^27.0.3", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.2", + "jest-snapshot": "^27.0.2", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "strip-bom": "^4.0.0", + "yargs": "^16.0.3" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } + } + }, + "jest-serializer": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", + "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" } }, "jest-snapshot": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", - "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.2.tgz", + "integrity": "sha512-4RcgvZbPrrbEE/hT6XQ4hr+NVVLNrmsgUnYSnZRT6UAvW9Q2yzGMS+tfJh+xlQJAapnnkNJzsMn6vUa+yfiVHA==", "dev": true, "requires": { - "@babel/core": "^7.11.6", + "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", - "@types/babel__traverse": "^7.0.6", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^28.1.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", + "expect": "^27.0.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.0.2", + "jest-get-type": "^27.0.1", + "jest-haste-map": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-resolve": "^27.0.2", + "jest-util": "^27.0.2", "natural-compare": "^1.4.0", - "pretty-format": "^28.1.0", - "semver": "^7.3.5" + "pretty-format": "^27.0.2", + "semver": "^7.3.2" }, "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", + "diff-sequences": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", + "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", + "dev": true + }, + "jest-diff": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", + "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "diff-sequences": "^27.0.1", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.2" } }, + "jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true + }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" + } + } + } + }, + "jest-util": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", + "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", + "dev": true, + "requires": { + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^3.0.0", + "picomatch": "^2.2.3" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } } } }, - "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "jest-validate": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", - "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", + "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^27.0.2", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", + "jest-get-type": "^27.0.1", "leven": "^3.1.0", - "pretty-format": "^28.1.0" + "pretty-format": "^27.0.2" }, "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -9131,45 +11142,68 @@ "dev": true }, "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", "dev": true }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" } - }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true } } }, "jest-watcher": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", - "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", + "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", "dev": true, "requires": { - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.0", + "jest-util": "^27.0.2", "string-length": "^4.0.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } } }, "jest-worker": { @@ -9201,12 +11235,56 @@ "dev": true }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "dev": true + } } }, "jsesc": { @@ -9221,12 +11299,6 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -9240,10 +11312,13 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } }, "kind-of": { "version": "6.0.3", @@ -9273,12 +11348,6 @@ "type-check": "~0.4.0" } }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -9294,12 +11363,24 @@ "p-locate": "^4.1.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "lodash._basefor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -9333,18 +11414,18 @@ "lodash.isarray": "^3.0.0" } }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -9378,12 +11459,12 @@ "dev": true }, "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "requires": { - "tmpl": "1.0.5" + "tmpl": "1.0.x" } }, "merge-stream": { @@ -9399,12 +11480,12 @@ "dev": true }, "micro-stacks": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-0.3.0.tgz", - "integrity": "sha512-RHOMtMaptyAffSQvwR2mvLyN3y72PP0cq3qaTY74sFt/yPzQa4eihQHD2Fbw9eI8uean20mqZ4e+A+nLUmQeYQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-0.2.2.tgz", + "integrity": "sha512-2mZqWcXWkmOXWsb7pShS+9X8XpPdNWZ0HCYYGxdEvHOuWQY4XeAai307xNh5afIFY2aik/OTljFjUmKIvGtU8Q==", "requires": { "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5" + "@noble/secp256k1": "1.5.2" } }, "micromatch": { @@ -9444,14 +11525,26 @@ "dev": true }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -9476,10 +11569,16 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, "normalize-path": { @@ -9497,6 +11596,12 @@ "path-key": "^3.0.0" } }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9529,6 +11634,12 @@ "word-wrap": "^1.2.3" } }, + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -9562,17 +11673,11 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "path-exists": { "version": "4.0.0", @@ -9604,12 +11709,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -9617,10 +11716,13 @@ "dev": true }, "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } }, "pkg-dir": { "version": "4.2.0", @@ -9638,40 +11740,45 @@ "dev": true }, "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", "dev": true }, "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } } }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dev": true, "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -9718,9 +11825,9 @@ } }, "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "require-directory": { @@ -9729,6 +11836,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -9762,12 +11875,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -9798,13 +11905,28 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "@types/json-schema": "^7.0.8", + "@types/json-schema": "^7.0.6", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -9880,9 +12002,9 @@ } }, "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "sisteransi": { @@ -9897,6 +12019,23 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9920,9 +12059,9 @@ "dev": true }, "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -9947,23 +12086,23 @@ } }, "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -10003,6 +12142,46 @@ "supports-color": "^7.0.0" } }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, "tapable": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", @@ -10107,26 +12286,48 @@ "is-number": "^7.0.0" } }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, "ts-jest": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.2.tgz", - "integrity": "sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.2.tgz", + "integrity": "sha512-pozjHOOfm+sbv9kXCvTFVyDntWvuJztzkNFql/akD75hSMZ2jsbidVauOhBRImAopXohqcLtPK/NTTIS8Y49Ug==", "dev": true, "requires": { "bs-logger": "0.x", + "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^28.0.0", + "jest-util": "^27.0.0", "json5": "2.x", - "lodash.memoize": "4.x", + "lodash": "4.x", "make-error": "1.x", + "mkdirp": "1.x", "semver": "7.x", - "yargs-parser": "^20.x" + "yargs-parser": "20.x" } }, "ts-loader": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.0.tgz", - "integrity": "sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.2.tgz", + "integrity": "sha512-hNIhGTQHtNKjOzR2ZtQ2OSVbXPykOae+zostf1IlHCf61Mt41GMJurKNqrYUbzHgpmj6UWRu8eBfb7q0XliV0g==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -10166,15 +12367,30 @@ "dev": true }, "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "uri-js": { @@ -10205,14 +12421,22 @@ "dev": true }, "v8-to-istanbul": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", - "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.7", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } } }, "w3c-hr-time": { @@ -10224,74 +12448,97 @@ "browser-process-hrtime": "^1.0.0" } }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { - "makeerror": "1.0.12" + "makeerror": "1.0.x" } }, "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, "webpack": { - "version": "5.72.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", - "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", + "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.2", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.0.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "dev": true + } } }, "webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", - "colorette": "^2.0.14", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", + "colorette": "^1.2.1", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "dependencies": { @@ -10314,11 +12561,41 @@ } }, "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, + "whatwg-url": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -10358,15 +12635,36 @@ "dev": true }, "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "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==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -10380,26 +12678,18 @@ "dev": true }, "yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^4.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "dependencies": { - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - } + "yargs-parser": "^20.2.2" } }, "yargs-parser": { diff --git a/package.json b/package.json index 2d3adaa..4e7a97c 100644 --- a/package.json +++ b/package.json @@ -19,26 +19,26 @@ ] }, "devDependencies": { - "@cloudflare/workers-types": "^3.9.0", - "@types/jest": "^27.5.0", + "@cloudflare/workers-types": "^3.0.0", + "@types/jest": "^26.0.23", "@types/service-worker-mock": "^2.0.1", - "@typescript-eslint/eslint-plugin": "^5.23.0", - "@typescript-eslint/parser": "^5.23.0", - "eslint": "^8.15.0", - "eslint-config-prettier": "^8.5.0", + "@typescript-eslint/eslint-plugin": "^4.16.1", + "@typescript-eslint/parser": "^4.16.1", + "eslint": "^7.21.0", + "eslint-config-prettier": "^8.1.0", "eslint-config-typescript": "^3.0.0", - "jest": "^28.1.0", - "prettier": "^2.6.2", + "jest": "^27.0.1", + "prettier": "^2.3.0", "service-worker-mock": "^2.0.5", - "ts-jest": "^28.0.2", - "ts-loader": "^9.3.0", - "typescript": "^4.6.4", - "webpack": "^5.72.0", - "webpack-cli": "^4.9.2" + "ts-jest": "^27.0.1", + "ts-loader": "^9.2.2", + "typescript": "^4.3.2", + "webpack": "^5.38.1", + "webpack-cli": "^4.7.0" }, "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", - "itty-router": "^2.6.1", - "micro-stacks": "^0.3.0" + "itty-router": "^2.4.10", + "micro-stacks": "^0.2.2" } } From d9d136e5ca5b94a2c72bc00fb07a3614ea398a2d Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 07:54:04 -0700 Subject: [PATCH 08/51] fix: reorganize router to accept version This also moves the :cityname value to follow the version, before the contract function category and function name. Since every city call involves a city value, this feels cleaner. --- src/handler.ts | 58 +++++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/handler.ts b/src/handler.ts index b9a7736..63049b4 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -44,41 +44,41 @@ router .get('/stacks/get-bns-name/:address', GetBnsName) .get('/stacks/get-stx-balance/:address', GetStxBalance) // Activation functions - .get('/activation/get-activation-block/:cityname', GetActivationBlock) - .get('/activation/get-registered-users-nonce/:cityname', GetRegisteredUsersNonce) - .get('/activation/get-user/:cityname/:userid', GetUser) - .get('/activation/get-user-id/:cityname/:address', GetUserId) + .get(':version/:cityname/activation/get-activation-block', GetActivationBlock) + .get(':version/:cityname/activation/get-registered-users-nonce', GetRegisteredUsersNonce) + .get(':version/:cityname/activation/get-user/:userid', GetUser) + .get(':version/:cityname/activation/get-user-id/:address', GetUserId) // Mining functions - .get('/mining/get-block-winner-id/:cityname/:blockheight', GetBlockWinnerId) - .get('/mining/get-last-high-value-at-block/:cityname/:blockheight', GetLastHighValueAtBlock) - .get('/mining/get-miner-at-block/:cityname/:blockheight/:userid', GetMinerAtBlock) - .get('/mining/get-mining-stats-at-block/:cityname/:blockheight', GetMiningStatsAtBlock) - .get('/mining/has-mined-at-block/:cityname/:blockheight/:userid', HasMinedAtBlock) + .get(':version/:cityname/mining/get-block-winner-id/:blockheight', GetBlockWinnerId) + .get(':version/:cityname/mining/get-last-high-value-at-block/:blockheight', GetLastHighValueAtBlock) + .get(':version/:cityname/mining/get-miner-at-block/:blockheight/:userid', GetMinerAtBlock) + .get(':version/:cityname/mining/get-mining-stats-at-block/:blockheight', GetMiningStatsAtBlock) + .get(':version/:cityname/mining/has-mined-at-block/:blockheight/:userid', HasMinedAtBlock) // Mining claim functions - .get('/mining-claims/can-claim-mining-reward/:cityname/:blockheight/:address', CanClaimMiningReward) - .get('/mining-claims/is-block-winner/:cityname/:blockheight/:address', IsBlockWinner) + .get(':version/:cityname/mining-claims/can-claim-mining-reward/:blockheight/:address', CanClaimMiningReward) + .get(':version/:cityname/mining-claims/is-block-winner/:blockheight/:address', IsBlockWinner) // Stacking functions - .get('/stacking/get-first-stacks-block-in-reward-cycle/:cityname/:cycleid', GetFirstStacksBlockInRewardCycle) - .get('/stacking/get-reward-cycle/:cityname/:blockheight', GetRewardCycle) - .get('/stacking/get-stacker-at-cycle/:cityname/:cycleid/:userid', GetStackerAtCycle) - .get('/stacking/get-stacking-stats-at-cycle/:cityname/:cycleid', GetStackingStatsAtCycle) - .get('/stacking/stacking-active-at-cycle/:cityname/:cycleid', StackingActiveAtCycle) + .get(':version/:cityname/stacking/get-first-stacks-block-in-reward-cycle/:cycleid', GetFirstStacksBlockInRewardCycle) + .get(':version/:cityname/stacking/get-reward-cycle/:blockheight', GetRewardCycle) + .get(':version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid', GetStackerAtCycle) + .get(':version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid', GetStackingStatsAtCycle) + .get(':version/:cityname/stacking/stacking-active-at-cycle/:cycleid', StackingActiveAtCycle) // Stacking claim functions - .get('/stacking-claims/get-stacking-reward/:cityname/:cycleid/:userid', GetStackingReward) + .get(':version/:cityname/stacking-claims/get-stacking-reward/:cycleid/:userid', GetStackingReward) // Token functions - .get('/token/get-balance/:cityname/:address', GetBalance) - .get('/token/get-coinbase-amount/:cityname/:blockheight', GetCoinbaseAmount) - .get('/token/get-coinbase-thresholds/:cityname', GetCoinbaseThresholds) - .get('/token/get-decimals/:cityname', GetDecimals) - .get('/token/get-name/:cityname', GetName) - .get('/token/get-symbol/:cityname', GetSymbol) - .get('/token/get-token-uri/:cityname', GetTokenUri) - .get('/token/get-token-uri-json/:cityname', GetTokenUriJson) - .get('/token/get-total-supply/:cityname', GetTotalSupply) + .get(':version/:cityname/token/get-balance/:address', GetBalance) + .get(':version/:cityname/token/get-coinbase-amount/:blockheight', GetCoinbaseAmount) + .get(':version/:cityname/token/get-coinbase-thresholds', GetCoinbaseThresholds) + .get(':version/:cityname/token/get-decimals', GetDecimals) + .get(':version/:cityname/token/get-name', GetName) + .get(':version/:cityname/token/get-symbol', GetSymbol) + .get(':version/:cityname/token/get-token-uri', GetTokenUri) + .get(':version/:cityname/token/get-token-uri-json', GetTokenUriJson) + .get(':version/:cityname/token/get-total-supply', GetTotalSupply) // Tools - .get('/tools/prices/:cityname/:currency?', GetPrices) - .get('/tools/proof-of-hodl/:cityname/:address', ProofOfHodl) - .get('/tools/proof-of-hold/:cityname/:address', ProofOfHodl) + .get(':version/:cityname/tools/prices/:currency?', GetPrices) + .get(':version/:cityname/tools/proof-of-hodl/:address', ProofOfHodl) + .get(':version/:cityname/tools/proof-of-hold/:address', ProofOfHodl) // Default route .get('*', () => new Response("Resource not found, please check the URL.", { status: 404 })) From 0425a6ab90687cbdf952230218572b881f0ac26b Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 08:21:21 -0700 Subject: [PATCH 09/51] fix: update city interface defs to support versions This adds a version key to each CityConfig option, and updates the getCityConfig() function to accept a version string that will be derived from the new route paths as a parameter (e.g. v1, v2) This also updates the getCityConfig() function to return the version if the version key is found, otherwise throw an error that can be turned into a response for consistency in all handlers. --- src/types/cities.ts | 229 ++++++++++++++++++++++++++++++-------------- 1 file changed, 157 insertions(+), 72 deletions(-) diff --git a/src/types/cities.ts b/src/types/cities.ts index 7a9a613..b4e9f90 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -1,91 +1,176 @@ +// CONFIGURATION + export interface CityConfig { + [version: string]: CityVersion +} + +export interface CityVersion { + cityName: string, + contracts: CityContracts, + status: CityStatus, + token: CityToken, +} + +export interface CityContracts { + auth: string, + core: string, + token: string, deployer: string, - authContract: string, - coreContract: string, - tokenContract: string, - tokenDisplayName: string, - tokenName: string, - tokenSymbol: string, } +export interface CityStatus { + activated: boolean, + startBlock?: number, + deployed: boolean, + shutdown: boolean, + shutdownBlock?: number, +} + +export interface CityToken { + activationBlock?: number, + displayName: string, + name: string, + symbol: string, + decimals: number, + logo: string, + uri: string, +} + +// EMPTY CONFIGURATION + const emptyConfig: CityConfig = { - deployer: '', - authContract: '', - coreContract: '', - tokenContract: '', - tokenDisplayName: '', - tokenName: '', - tokenSymbol: '', + 'v0': { + cityName: '', + contracts: { + auth: '', + core: '', + token: '', + deployer: '', + }, + status: { + activated: false, + deployed: false, + shutdown: false, + }, + token: { + displayName: '', + name: '', + symbol: '', + decimals: 0, + logo: '', + uri: '', + } + } } -/* -const miaConfig: CityConfig = { - deployer: "SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27", - authContract: "miamicoin-auth", - coreContract: "miamicoin-core-v1", - tokenContract: "miamicoin-token", - tokenDisplayName: "MiamiCoin", - tokenName: "miamicoin", - tokenSymbol: "MIA", -}; -*/ +// MIAMICOIN const miaConfig: CityConfig = { - deployer: "SP1H1733V5MZ3SZ9XRW9FKYGEZT0JDGEB8Y634C7R", - authContract: "miamicoin-auth-v2", - coreContract: "miamicoin-core-v2", - tokenContract: "miamicoin-token-v2", - tokenDisplayName: "MiamiCoin", - tokenName: "miamicoin", - tokenSymbol: "MIA", -}; + 'v1': { + cityName: 'Miami', + contracts: { + auth: 'miamicoin-auth', + core: 'miamicoin-core-v1', + token: 'miamicoin-token', + deployer: 'SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27', + }, + status: { + activated: false, + deployed: false, + shutdown: false, + }, + token: { + displayName: 'MiamiCoin', + name: 'miamicoin', + symbol: 'MIA', + decimals: 0, + logo: 'https://cdn.citycoins.co/logos/miamicoin.png', + uri: 'https://cdn.citycoins.co/metadata/miamicoin.json', + } + }, + 'v2': { + cityName: 'Miami', + contracts: { + auth: 'miamicoin-auth-v2', + core: 'miamicoin-core-v2', + token: 'miamicoin-token-v2', + deployer: 'SP1H1733V5MZ3SZ9XRW9FKYGEZT0JDGEB8Y634C7R', + }, + status: { + activated: false, + deployed: false, + shutdown: false, + }, + token: { + displayName: 'MiamiCoin', + name: 'miamicoin', + symbol: 'MIA', + decimals: 6, + logo: 'https://cdn.citycoins.co/logos/miamicoin.png', + uri: 'https://cdn.citycoins.co/metadata/miamicoin.json', + } + } +} -/* -const nycConfig: CityConfig = { - deployer: "SP2H8PY27SEZ03MWRKS5XABZYQN17ETGQS3527SA5", - authContract: "newyorkcitycoin-auth", - coreContract: "newyorkcitycoin-core-v1", - tokenContract: "newyorkcitycoin-token", - tokenDisplayName: "NewYorkCityCoin", - tokenName: "newyorkcitycoin", - tokenSymbol: "NYC", -}; -*/ +// NEWYORKCITYCOIN const nycConfig: CityConfig = { - deployer: "SPSCWDV3RKV5ZRN1FQD84YE1NQFEDJ9R1F4DYQ11", - authContract: "newyorkcitycoin-auth-v2", - coreContract: "newyorkcitycoin-core-v2", - tokenContract: "newyorkcitycoin-token-v2", - tokenDisplayName: "NewYorkCityCoin", - tokenName: "newyorkcitycoin", - tokenSymbol: "NYC", -}; + 'v1': { + cityName: 'New York City', + contracts: { + auth: 'newyorkcitycoin-auth', + core: 'newyorkcitycoin-core-v1', + token: 'newyorkcitycoin-token', + deployer: 'SP2H8PY27SEZ03MWRKS5XABZYQN17ETGQS3527SA5', + }, + status: { + activated: false, + deployed: false, + shutdown: false, + }, + token: { + displayName: 'NewYorkCityCoin', + name: 'newyorkcitycoin', + symbol: 'NYC', + decimals: 0, + logo: '', + uri: '', + } + }, + 'v2': { + cityName: 'New York City', + contracts: { + auth: 'newyorkcitycoin-auth-v2', + core: 'newyorkcitycoin-core-v2', + token: 'newyorkcitycoin-token-v2', + deployer: 'SPSCWDV3RKV5ZRN1FQD84YE1NQFEDJ9R1F4DYQ11', + }, + status: { + activated: false, + deployed: false, + shutdown: false, + }, + token: { + displayName: 'NewYorkCityCoin', + name: 'newyorkcitycoin', + symbol: 'NYC', + decimals: 6, + logo: '', + uri: '', + } + } +} -export async function getCityConfig(city: string): Promise { +export async function getCityConfig(city: string, version: string): Promise { + version = version.toLowerCase() switch (city.toLowerCase()) { case "mia": - return miaConfig + if (Object.prototype.hasOwnProperty.call(miaConfig, version)) return miaConfig[version] + throw new Error(`Invalid city name or version ${city} ${version}`) case "nyc": - return nycConfig + if (Object.prototype.hasOwnProperty.call(nycConfig, version)) return nycConfig[version] + throw new Error(`Invalid city name or version ${city} ${version}`) default: - return emptyConfig + throw new Error(`Invalid city name or version ${city} ${version}`) } } - -/* IDEAS - -interface CitySettings { - config: CityConfig, - cityName: string; - cityWallet: string; - deployed: boolean; - activated: boolean; - startBlock?: number; -} -// cityLogo: imported SVG? -// https://stackoverflow.com/questions/44717164/unable-to-import-svg-files-in-typescript - -// another name: CityDetails - -*/ \ No newline at end of file From 812911c62edeb8989a2a3281f0a02bf9ca769373 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 08:21:44 -0700 Subject: [PATCH 10/51] chore: remove unused code --- src/types/cities.ts | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/types/cities.ts b/src/types/cities.ts index b4e9f90..9ad7e07 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -36,33 +36,6 @@ export interface CityToken { uri: string, } -// EMPTY CONFIGURATION - -const emptyConfig: CityConfig = { - 'v0': { - cityName: '', - contracts: { - auth: '', - core: '', - token: '', - deployer: '', - }, - status: { - activated: false, - deployed: false, - shutdown: false, - }, - token: { - displayName: '', - name: '', - symbol: '', - decimals: 0, - logo: '', - uri: '', - } - } -} - // MIAMICOIN const miaConfig: CityConfig = { From e4b5edbbf4dfdeaa2b14a28fb349d29878267de6 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 08:40:08 -0700 Subject: [PATCH 11/51] fix: update citycoins library to use new types This updates the main functions to accept a CityVersion instead of CityConfig, and to use the new naming structure for calilng ccontract functions. --- src/lib/citycoins.ts | 204 +++++++++++++++++++++---------------------- 1 file changed, 102 insertions(+), 102 deletions(-) diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index c99f34e..1dc9f6c 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -1,6 +1,6 @@ import { fetchReadOnlyFunction } from 'micro-stacks/api' import { standardPrincipalCV, uintCV } from 'micro-stacks/clarity' -import { CityConfig } from '../types/cities' +import { CityVersion } from '../types/cities' import { MinerAtBlock, MiningStatsAtBlock } from '../types/mining' import { StackerAtCycle, StackingStatsAtCycle } from '../types/stacking' import { CoinbaseThresholds } from '../types/token' @@ -11,47 +11,47 @@ import { getStacksBlockHeight } from './stacks' // ACTIVATION FUNCTIONS ////////////////////////////////////////////////// -export async function getActivationBlock(cityConfig: CityConfig): Promise { +export async function getActivationBlock(cityConfig: CityVersion): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-activation-block', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer + senderAddress: cityConfig.contracts.deployer }, true) } -export async function getRegisteredUsersNonce(cityConfig: CityConfig): Promise { +export async function getRegisteredUsersNonce(cityConfig: CityVersion): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-registered-users-nonce', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer + senderAddress: cityConfig.contracts.deployer }, true) } -export async function getUser(cityConfig: CityConfig, id: string): Promise { +export async function getUser(cityConfig: CityVersion, id: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-user', functionArgs: [uintCV(id)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getUserId(cityConfig: CityConfig, address: string): Promise { +export async function getUserId(cityConfig: CityVersion, address: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-user-id', functionArgs: [standardPrincipalCV(address)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } @@ -59,58 +59,58 @@ export async function getUserId(cityConfig: CityConfig, address: string): Promis // MINING FUNCTIONS ////////////////////////////////////////////////// -export async function getBlockWinnerId(cityConfig: CityConfig, blockHeight: string): Promise { +export async function getBlockWinnerId(cityConfig: CityVersion, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-block-winner-id', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getMiningStatsAtBlock(cityConfig: CityConfig, blockHeight: string): Promise { +export async function getMiningStatsAtBlock(cityConfig: CityVersion, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-mining-stats-at-block', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getMinerAtBlock(cityConfig: CityConfig, blockHeight: string, userId: string): Promise { +export async function getMinerAtBlock(cityConfig: CityVersion, blockHeight: string, userId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-miner-at-block', functionArgs: [uintCV(blockHeight), uintCV(userId)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getLastHighValueAtBlock(cityConfig: CityConfig, blockHeight: string): Promise { +export async function getLastHighValueAtBlock(cityConfig: CityVersion, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-last-high-value-at-block', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function hasMinedAtBlock(cityConfig: CityConfig, blockHeight: string, userId: string): Promise { +export async function hasMinedAtBlock(cityConfig: CityVersion, blockHeight: string, userId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'has-mined-at-block', functionArgs: [uintCV(blockHeight), uintCV(userId)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } @@ -118,25 +118,25 @@ export async function hasMinedAtBlock(cityConfig: CityConfig, blockHeight: strin // MINING CLAIM FUNCTIONS ////////////////////////////////////////////////// -export async function canClaimMiningReward(cityConfig: CityConfig, address: string, blockHeight: string): Promise { +export async function canClaimMiningReward(cityConfig: CityVersion, address: string, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'can-claim-mining-reward', functionArgs: [standardPrincipalCV(address), uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function isBlockWinner(cityConfig: CityConfig, address: string, blockHeight: string): Promise { +export async function isBlockWinner(cityConfig: CityVersion, address: string, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'is-block-winner', functionArgs: [standardPrincipalCV(address), uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } @@ -144,58 +144,58 @@ export async function isBlockWinner(cityConfig: CityConfig, address: string, blo // STACKING FUNCTIONS ////////////////////////////////////////////////// -export async function getStackingStatsAtCycle(cityConfig: CityConfig, cycleId: string): Promise { +export async function getStackingStatsAtCycle(cityConfig: CityVersion, cycleId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-stacking-stats-at-cycle', functionArgs: [uintCV(cycleId)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getStackerAtCycle(cityConfig: CityConfig, cycleId: string, userId: string): Promise { +export async function getStackerAtCycle(cityConfig: CityVersion, cycleId: string, userId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-stacker-at-cycle', functionArgs: [uintCV(cycleId), uintCV(userId)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getRewardCycle(cityConfig: CityConfig, blockHeight: string): Promise { +export async function getRewardCycle(cityConfig: CityVersion, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-reward-cycle', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getFirstStacksBlockInRewardCycle(cityConfig: CityConfig, cycleId: string): Promise { +export async function getFirstStacksBlockInRewardCycle(cityConfig: CityVersion, cycleId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-first-stacks-block-in-reward-cycle', functionArgs: [uintCV(cycleId)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function stackingActiveAtCycle(cityConfig: CityConfig, cycleId: string): Promise { +export async function stackingActiveAtCycle(cityConfig: CityVersion, cycleId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'stacking-active-at-cycle', functionArgs: [uintCV(cycleId)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } @@ -203,14 +203,14 @@ export async function stackingActiveAtCycle(cityConfig: CityConfig, cycleId: str // STACKING CLAIM FUNCTIONS ////////////////////////////////////////////////// -export async function getStackingReward(cityConfig: CityConfig, cycleId: string, userId: string): Promise { +export async function getStackingReward(cityConfig: CityVersion, cycleId: string, userId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-stacking-reward', functionArgs: [uintCV(userId), uintCV(cycleId)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } @@ -218,91 +218,91 @@ export async function getStackingReward(cityConfig: CityConfig, cycleId: string, // TOKEN FUNCTIONS ////////////////////////////////////////////////// -export async function getCoinbaseThresholds(cityConfig: CityConfig): Promise { +export async function getCoinbaseThresholds(cityConfig: CityVersion): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.tokenContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.token, functionName: 'get-coinbase-thresholds', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getCoinbaseAmount(cityConfig: CityConfig, blockHeight: string): Promise { +export async function getCoinbaseAmount(cityConfig: CityVersion, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.coreContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.core, functionName: 'get-coinbase-amount', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getName(cityConfig: CityConfig): Promise { +export async function getName(cityConfig: CityVersion): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.tokenContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.token, functionName: 'get-name', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getSymbol(cityConfig: CityConfig): Promise { +export async function getSymbol(cityConfig: CityVersion): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.tokenContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.token, functionName: 'get-symbol', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getDecimals(cityConfig: CityConfig): Promise { +export async function getDecimals(cityConfig: CityVersion): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.tokenContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.token, functionName: 'get-decimals', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getBalance(cityConfig: CityConfig, address: string): Promise { +export async function getBalance(cityConfig: CityVersion, address: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.tokenContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.token, functionName: 'get-balance', functionArgs: [standardPrincipalCV(address)], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getTotalSupply(cityConfig: CityConfig): Promise { +export async function getTotalSupply(cityConfig: CityVersion): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.tokenContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.token, functionName: 'get-total-supply', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } -export async function getTokenUri(cityConfig: CityConfig): Promise { +export async function getTokenUri(cityConfig: CityVersion): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.tokenContract, + contractAddress: cityConfig.contracts.deployer, + contractName: cityConfig.contracts.token, functionName: 'get-token-uri', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, + senderAddress: cityConfig.contracts.deployer, }, true) } @@ -310,7 +310,7 @@ export async function getTokenUri(cityConfig: CityConfig): Promise { // UTILITY FUNCTIONS ////////////////////////////////////////////////// -export async function getProofOfHodl(cityConfig: CityConfig, address: string): Promise { +export async function getProofOfHodl(cityConfig: CityVersion, address: string): Promise { // check if the user has a balance // if so, return true const balance = await getBalance(cityConfig, address) From beb6d767cb5b670d14091bef2bdd12f8fc6e3d08 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 08:54:04 -0700 Subject: [PATCH 12/51] fix: refactor single endpoint as an example This implements a try/catch over then/catch format for the async call, allowing for directly returning the response rather than convoluting up the types. This will need to be applied to all handlers. --- src/handlers/token/gettotalsupply.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/handlers/token/gettotalsupply.ts b/src/handlers/token/gettotalsupply.ts index 9e3be7e..1dfd88f 100644 --- a/src/handlers/token/gettotalsupply.ts +++ b/src/handlers/token/gettotalsupply.ts @@ -5,15 +5,19 @@ import { getCityConfig } from '../../types/cities' import { SingleValue } from '../../types/common' const GetTotalSupply = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get total supply const totalSupply: string = await getTotalSupply(cityConfig) From 886079d2fdda1da577180847ba7810c4bf1d9f34 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 09:31:56 -0700 Subject: [PATCH 13/51] fix: refactor data to follow protocol/contract data Third time's a charm! By separating out the variables by contract type (auth/core/token) it allows us to grab the relevant value to a contract (is auth activated?) as well as infer where to look for the data if there is a discrepancy. This could also allow defining objects for the v1/v2/vN contracts that could be reused say, if the same auth/token contracts are used in a new version alongside a different core contract. --- src/types/cities.ts | 158 +++++++++++++++++++++++++++----------------- 1 file changed, 97 insertions(+), 61 deletions(-) diff --git a/src/types/cities.ts b/src/types/cities.ts index 9ad7e07..35398cf 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -1,35 +1,52 @@ // CONFIGURATION -export interface CityConfig { - [version: string]: CityVersion +// cityName: New York City +// status: ContractStatus + // deployed: true + // deployer: SPSCWDV3RKV5ZRN1FQD84YE1NQFEDJ9R1F4DYQ11 +// auth: AuthContract + // name: newyorkcitycoin-auth-v2 + // initialized: boolean +// core: CoreContract + // name: newyorkcitycoin-core-v2 + // activated + // shutdown +// token: TokenContract + // name: newyorkcitycoin-token-v2 + // activated: boolean + +export interface CityVersions { + [version: string]: CityConfig } -export interface CityVersion { +export interface CityConfig { cityName: string, - contracts: CityContracts, - status: CityStatus, - token: CityToken, + deployed: boolean, + deployer?: string, + auth: AuthContract, + core: CoreContract, + token: TokenContract, } -export interface CityContracts { - auth: string, - core: string, - token: string, - deployer: string, +export interface AuthContract { + name: string, + initialized: boolean, } -export interface CityStatus { +export interface CoreContract { + name: string, activated: boolean, startBlock?: number, - deployed: boolean, shutdown: boolean, shutdownBlock?: number, } -export interface CityToken { +export interface TokenContract { + name: string, + activated: true, activationBlock?: number, displayName: string, - name: string, + tokenName: string, symbol: string, decimals: number, logo: string, @@ -38,102 +55,121 @@ export interface CityToken { // MIAMICOIN -const miaConfig: CityConfig = { +const miaConfig: CityVersions = { 'v1': { cityName: 'Miami', - contracts: { - auth: 'miamicoin-auth', - core: 'miamicoin-core-v1', - token: 'miamicoin-token', - deployer: 'SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27', + deployed: true, + deployer: 'SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27', + auth: { + name: 'miamicoin-auth', + initialized: true, }, - status: { + core: { + name: 'miamicoin-core-v1', activated: false, - deployed: false, - shutdown: false, + startBlock: 24497, + shutdown: true, + shutdownBlock: 58917, }, token: { + name: 'miamicoin-token', + activated: true, + activationBlock: 24497, displayName: 'MiamiCoin', - name: 'miamicoin', + tokenName: 'miamicoin', symbol: 'MIA', decimals: 0, logo: 'https://cdn.citycoins.co/logos/miamicoin.png', uri: 'https://cdn.citycoins.co/metadata/miamicoin.json', - } + }, }, 'v2': { cityName: 'Miami', - contracts: { - auth: 'miamicoin-auth-v2', - core: 'miamicoin-core-v2', - token: 'miamicoin-token-v2', - deployer: 'SP1H1733V5MZ3SZ9XRW9FKYGEZT0JDGEB8Y634C7R', + deployed: true, + deployer: 'SP1H1733V5MZ3SZ9XRW9FKYGEZT0JDGEB8Y634C7R', + auth: { + name: 'miamicoin-auth-v2', + initialized: true, }, - status: { - activated: false, - deployed: false, + core: { + name: 'miamicoin-core-v2', + activated: true, + startBlock: 58921, shutdown: false, }, token: { + name: 'miamicoin-token-v2', + activated: true, + activationBlock: 24497, displayName: 'MiamiCoin', - name: 'miamicoin', + tokenName: 'miamicoin', symbol: 'MIA', decimals: 6, logo: 'https://cdn.citycoins.co/logos/miamicoin.png', uri: 'https://cdn.citycoins.co/metadata/miamicoin.json', - } + }, } } // NEWYORKCITYCOIN -const nycConfig: CityConfig = { +const nycConfig: CityVersions = { 'v1': { cityName: 'New York City', - contracts: { - auth: 'newyorkcitycoin-auth', - core: 'newyorkcitycoin-core-v1', - token: 'newyorkcitycoin-token', - deployer: 'SP2H8PY27SEZ03MWRKS5XABZYQN17ETGQS3527SA5', + deployed: true, + deployer: 'SP2H8PY27SEZ03MWRKS5XABZYQN17ETGQS3527SA5', + auth: { + name: 'newyorkcitycoin-auth', + initialized: true, }, - status: { + core: { + name: 'newyorkcitycoin-core-v1', activated: false, - deployed: false, - shutdown: false, + startBlock: 37449, + shutdown: true, + shutdownBlock: 58922, }, token: { + name: 'newyorkcitycoin-token', + activated: true, + activationBlock: 37449, displayName: 'NewYorkCityCoin', - name: 'newyorkcitycoin', + tokenName: 'newyorkcitycoin', symbol: 'NYC', decimals: 0, - logo: '', - uri: '', - } + logo: 'https://cdn.citycoins.co/logos/newyorkcitycoin.png', + uri: 'https://cdn.citycoins.co/metadata/newyorkcitycoin.json', + }, }, 'v2': { cityName: 'New York City', - contracts: { - auth: 'newyorkcitycoin-auth-v2', - core: 'newyorkcitycoin-core-v2', - token: 'newyorkcitycoin-token-v2', - deployer: 'SPSCWDV3RKV5ZRN1FQD84YE1NQFEDJ9R1F4DYQ11', + deployed: true, + deployer: 'SPSCWDV3RKV5ZRN1FQD84YE1NQFEDJ9R1F4DYQ11', + auth: { + name: 'newyorkcitycoin-auth-v2', + initialized: true, }, - status: { - activated: false, - deployed: false, + core: { + name: 'newyorkcitycoin-core-v2', + activated: true, + startBlock: 58925, shutdown: false, }, token: { + name: 'newyorkcitycoin-token-v2', + activated: true, + activationBlock: 37449, displayName: 'NewYorkCityCoin', - name: 'newyorkcitycoin', + tokenName: 'newyorkcitycoin', symbol: 'NYC', decimals: 6, - logo: '', - uri: '', - } + logo: 'https://cdn.citycoins.co/logos/newyorkcitycoin.png', + uri: 'https://cdn.citycoins.co/metadata/newyorkcitycoin.json', + }, } } + export async function getCityConfig(city: string, version: string): Promise { version = version.toLowerCase() switch (city.toLowerCase()) { From efe3cd2efe098dd18252d00780ed9d4e07689ece Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 09:38:43 -0700 Subject: [PATCH 14/51] fix: apply new data format to citycoins lib This also fixes the getCityConfig function to return the correct type --- src/lib/citycoins.ts | 204 +++++++++++++++++++++---------------------- src/types/cities.ts | 4 +- 2 files changed, 104 insertions(+), 104 deletions(-) diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index 1dc9f6c..dbcfc1e 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -1,6 +1,6 @@ import { fetchReadOnlyFunction } from 'micro-stacks/api' import { standardPrincipalCV, uintCV } from 'micro-stacks/clarity' -import { CityVersion } from '../types/cities' +import { CityConfig } from '../types/cities' import { MinerAtBlock, MiningStatsAtBlock } from '../types/mining' import { StackerAtCycle, StackingStatsAtCycle } from '../types/stacking' import { CoinbaseThresholds } from '../types/token' @@ -11,47 +11,47 @@ import { getStacksBlockHeight } from './stacks' // ACTIVATION FUNCTIONS ////////////////////////////////////////////////// -export async function getActivationBlock(cityConfig: CityVersion): Promise { +export async function getActivationBlock(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-activation-block', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer + senderAddress: cityConfig.deployer }, true) } -export async function getRegisteredUsersNonce(cityConfig: CityVersion): Promise { +export async function getRegisteredUsersNonce(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-registered-users-nonce', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer + senderAddress: cityConfig.deployer }, true) } -export async function getUser(cityConfig: CityVersion, id: string): Promise { +export async function getUser(cityConfig: CityConfig, id: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-user', functionArgs: [uintCV(id)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getUserId(cityConfig: CityVersion, address: string): Promise { +export async function getUserId(cityConfig: CityConfig, address: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-user-id', functionArgs: [standardPrincipalCV(address)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } @@ -59,58 +59,58 @@ export async function getUserId(cityConfig: CityVersion, address: string): Promi // MINING FUNCTIONS ////////////////////////////////////////////////// -export async function getBlockWinnerId(cityConfig: CityVersion, blockHeight: string): Promise { +export async function getBlockWinnerId(cityConfig: CityConfig, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-block-winner-id', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getMiningStatsAtBlock(cityConfig: CityVersion, blockHeight: string): Promise { +export async function getMiningStatsAtBlock(cityConfig: CityConfig, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-mining-stats-at-block', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getMinerAtBlock(cityConfig: CityVersion, blockHeight: string, userId: string): Promise { +export async function getMinerAtBlock(cityConfig: CityConfig, blockHeight: string, userId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-miner-at-block', functionArgs: [uintCV(blockHeight), uintCV(userId)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getLastHighValueAtBlock(cityConfig: CityVersion, blockHeight: string): Promise { +export async function getLastHighValueAtBlock(cityConfig: CityConfig, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-last-high-value-at-block', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function hasMinedAtBlock(cityConfig: CityVersion, blockHeight: string, userId: string): Promise { +export async function hasMinedAtBlock(cityConfig: CityConfig, blockHeight: string, userId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'has-mined-at-block', functionArgs: [uintCV(blockHeight), uintCV(userId)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } @@ -118,25 +118,25 @@ export async function hasMinedAtBlock(cityConfig: CityVersion, blockHeight: stri // MINING CLAIM FUNCTIONS ////////////////////////////////////////////////// -export async function canClaimMiningReward(cityConfig: CityVersion, address: string, blockHeight: string): Promise { +export async function canClaimMiningReward(cityConfig: CityConfig, address: string, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'can-claim-mining-reward', functionArgs: [standardPrincipalCV(address), uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function isBlockWinner(cityConfig: CityVersion, address: string, blockHeight: string): Promise { +export async function isBlockWinner(cityConfig: CityConfig, address: string, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'is-block-winner', functionArgs: [standardPrincipalCV(address), uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } @@ -144,58 +144,58 @@ export async function isBlockWinner(cityConfig: CityVersion, address: string, bl // STACKING FUNCTIONS ////////////////////////////////////////////////// -export async function getStackingStatsAtCycle(cityConfig: CityVersion, cycleId: string): Promise { +export async function getStackingStatsAtCycle(cityConfig: CityConfig, cycleId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-stacking-stats-at-cycle', functionArgs: [uintCV(cycleId)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getStackerAtCycle(cityConfig: CityVersion, cycleId: string, userId: string): Promise { +export async function getStackerAtCycle(cityConfig: CityConfig, cycleId: string, userId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-stacker-at-cycle', functionArgs: [uintCV(cycleId), uintCV(userId)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getRewardCycle(cityConfig: CityVersion, blockHeight: string): Promise { +export async function getRewardCycle(cityConfig: CityConfig, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-reward-cycle', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getFirstStacksBlockInRewardCycle(cityConfig: CityVersion, cycleId: string): Promise { +export async function getFirstStacksBlockInRewardCycle(cityConfig: CityConfig, cycleId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-first-stacks-block-in-reward-cycle', functionArgs: [uintCV(cycleId)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function stackingActiveAtCycle(cityConfig: CityVersion, cycleId: string): Promise { +export async function stackingActiveAtCycle(cityConfig: CityConfig, cycleId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'stacking-active-at-cycle', functionArgs: [uintCV(cycleId)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } @@ -203,14 +203,14 @@ export async function stackingActiveAtCycle(cityConfig: CityVersion, cycleId: st // STACKING CLAIM FUNCTIONS ////////////////////////////////////////////////// -export async function getStackingReward(cityConfig: CityVersion, cycleId: string, userId: string): Promise { +export async function getStackingReward(cityConfig: CityConfig, cycleId: string, userId: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-stacking-reward', functionArgs: [uintCV(userId), uintCV(cycleId)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } @@ -218,91 +218,91 @@ export async function getStackingReward(cityConfig: CityVersion, cycleId: string // TOKEN FUNCTIONS ////////////////////////////////////////////////// -export async function getCoinbaseThresholds(cityConfig: CityVersion): Promise { +export async function getCoinbaseThresholds(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.token, + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, functionName: 'get-coinbase-thresholds', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getCoinbaseAmount(cityConfig: CityVersion, blockHeight: string): Promise { +export async function getCoinbaseAmount(cityConfig: CityConfig, blockHeight: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.core, + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, functionName: 'get-coinbase-amount', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getName(cityConfig: CityVersion): Promise { +export async function getName(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.token, + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, functionName: 'get-name', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getSymbol(cityConfig: CityVersion): Promise { +export async function getSymbol(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.token, + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, functionName: 'get-symbol', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getDecimals(cityConfig: CityVersion): Promise { +export async function getDecimals(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.token, + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, functionName: 'get-decimals', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getBalance(cityConfig: CityVersion, address: string): Promise { +export async function getBalance(cityConfig: CityConfig, address: string): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.token, + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, functionName: 'get-balance', functionArgs: [standardPrincipalCV(address)], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getTotalSupply(cityConfig: CityVersion): Promise { +export async function getTotalSupply(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.token, + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, functionName: 'get-total-supply', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } -export async function getTokenUri(cityConfig: CityVersion): Promise { +export async function getTokenUri(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ - contractAddress: cityConfig.contracts.deployer, - contractName: cityConfig.contracts.token, + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, functionName: 'get-token-uri', functionArgs: [], network: STACKS_NETWORK, - senderAddress: cityConfig.contracts.deployer, + senderAddress: cityConfig.deployer, }, true) } @@ -310,7 +310,7 @@ export async function getTokenUri(cityConfig: CityVersion): Promise { // UTILITY FUNCTIONS ////////////////////////////////////////////////// -export async function getProofOfHodl(cityConfig: CityVersion, address: string): Promise { +export async function getProofOfHodl(cityConfig: CityConfig, address: string): Promise { // check if the user has a balance // if so, return true const balance = await getBalance(cityConfig, address) diff --git a/src/types/cities.ts b/src/types/cities.ts index 35398cf..9bc20c8 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -22,7 +22,7 @@ export interface CityVersions { export interface CityConfig { cityName: string, deployed: boolean, - deployer?: string, + deployer: string, auth: AuthContract, core: CoreContract, token: TokenContract, @@ -170,7 +170,7 @@ const nycConfig: CityVersions = { } -export async function getCityConfig(city: string, version: string): Promise { +export async function getCityConfig(city: string, version: string): Promise { version = version.toLowerCase() switch (city.toLowerCase()) { case "mia": From 7aefed39039f0d51a71d16bcfc2af02949a2c9b4 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 09:39:10 -0700 Subject: [PATCH 15/51] chore: code cleanup --- src/types/cities.ts | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/types/cities.ts b/src/types/cities.ts index 9bc20c8..719c99e 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -1,20 +1,5 @@ // CONFIGURATION -// cityName: New York City -// status: ContractStatus - // deployed: true - // deployer: SPSCWDV3RKV5ZRN1FQD84YE1NQFEDJ9R1F4DYQ11 -// auth: AuthContract - // name: newyorkcitycoin-auth-v2 - // initialized: boolean -// core: CoreContract - // name: newyorkcitycoin-core-v2 - // activated - // shutdown -// token: TokenContract - // name: newyorkcitycoin-token-v2 - // activated: boolean - export interface CityVersions { [version: string]: CityConfig } @@ -169,7 +154,6 @@ const nycConfig: CityVersions = { } } - export async function getCityConfig(city: string, version: string): Promise { version = version.toLowerCase() switch (city.toLowerCase()) { From 0be6ad7baadcbef91f59753bb08544fd61e45c4f Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 10:10:37 -0700 Subject: [PATCH 16/51] fix: refactor handlers to use new data formats Also adds the try/catch for cityConfig to all handlers, and removes extra type annotations where values can easily be inferred. --- src/handlers/activation/getactivationblock.ts | 15 ++++++++------ .../activation/getregisteredusersnonce.ts | 15 ++++++++------ src/handlers/activation/getuser.ts | 15 ++++++++------ src/handlers/activation/getuserid.ts | 15 ++++++++------ src/handlers/mining/getblockwinnerid.ts | 15 ++++++++------ .../mining/getlasthighvalueatblock.ts | 15 ++++++++------ src/handlers/mining/getmineratblock.ts | 15 ++++++++------ src/handlers/mining/getminingstatsatblock.ts | 15 ++++++++------ src/handlers/mining/hasminedatblock.ts | 15 ++++++++------ .../miningclaims/canclaimminingreward.ts | 15 ++++++++------ src/handlers/miningclaims/isblockwinner.ts | 15 ++++++++------ .../getfirststacksblockinrewardcycle.ts | 17 +++++++++------- src/handlers/stacking/getrewardcycle.ts | 17 +++++++++------- src/handlers/stacking/getstackeratcycle.ts | 15 ++++++++------ .../stacking/getstackingstatsatcycle.ts | 15 ++++++++------ .../stacking/stackingactiveatcycle.ts | 15 ++++++++------ .../stackingclaims/getstackingreward.ts | 15 ++++++++------ src/handlers/stacks/getbnsname.ts | 5 ++--- src/handlers/stacks/getstacksblockheight.ts | 5 ++--- src/handlers/stacks/getstxbalance.ts | 5 ++--- src/handlers/token/getbalance.ts | 15 ++++++++------ src/handlers/token/getcoinbaseamount.ts | 15 ++++++++------ src/handlers/token/getcoinbasethresholds.ts | 15 ++++++++------ src/handlers/token/getdecimals.ts | 17 +++++++++------- src/handlers/token/getname.ts | 17 +++++++++------- src/handlers/token/getsymbol.ts | 17 +++++++++------- src/handlers/token/gettokenuri.ts | 17 +++++++++------- src/handlers/token/gettokenurijson.ts | 17 +++++++++------- src/handlers/token/gettotalsupply.ts | 5 ++--- src/handlers/tools/getprices.ts | 20 ++++++++++--------- src/handlers/tools/proofofhodl.ts | 15 ++++++++------ 31 files changed, 260 insertions(+), 184 deletions(-) diff --git a/src/handlers/activation/getactivationblock.ts b/src/handlers/activation/getactivationblock.ts index 89d0fef..1b8aef2 100644 --- a/src/handlers/activation/getactivationblock.ts +++ b/src/handlers/activation/getactivationblock.ts @@ -2,23 +2,26 @@ import { Request as IttyRequest } from 'itty-router' import { getActivationBlock } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetActivationBlock = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get activation block const activationBlock = await getActivationBlock(cityConfig) // return response - const response: SingleValue = await createSingleValue(activationBlock) + const response = await createSingleValue(activationBlock) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/activation/getregisteredusersnonce.ts b/src/handlers/activation/getregisteredusersnonce.ts index 5deddd7..ca99cdf 100644 --- a/src/handlers/activation/getregisteredusersnonce.ts +++ b/src/handlers/activation/getregisteredusersnonce.ts @@ -2,23 +2,26 @@ import { Request as IttyRequest } from 'itty-router' import { getRegisteredUsersNonce } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetRegisteredUsersNonce = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get registered users const registeredUsers = await getRegisteredUsersNonce(cityConfig) // return response - const response: SingleValue = await createSingleValue(registeredUsers) + const response = await createSingleValue(registeredUsers) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/activation/getuser.ts b/src/handlers/activation/getuser.ts index 9af86a6..973d608 100644 --- a/src/handlers/activation/getuser.ts +++ b/src/handlers/activation/getuser.ts @@ -2,19 +2,22 @@ import { Request as IttyRequest } from 'itty-router' import { getUser } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetUser = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const userId = request.params?.userid ?? undefined - if (city === undefined || userId === undefined) { + if (version === undefined || city === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // verify user ID is valid if (!isStringAllDigits(userId)) { @@ -26,7 +29,7 @@ const GetUser = async (request: IttyRequest): Promise => { return new Response(`User ID not found: ${userId}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(userAddress) + const response = await createSingleValue(userAddress) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/activation/getuserid.ts b/src/handlers/activation/getuserid.ts index d3d50cc..9aea668 100644 --- a/src/handlers/activation/getuserid.ts +++ b/src/handlers/activation/getuserid.ts @@ -2,19 +2,22 @@ import { Request as IttyRequest } from 'itty-router' import { getUserId } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetUserId = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const user = request.params?.address ?? undefined - if (city === undefined || user === undefined) { + if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get user ID const userId = await getUserId(cityConfig, user) @@ -22,7 +25,7 @@ const GetUserId = async (request: IttyRequest): Promise => { return new Response(`User not found: ${user}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(userId) + const response = await createSingleValue(userId) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/mining/getblockwinnerid.ts b/src/handlers/mining/getblockwinnerid.ts index 4120016..901be0d 100644 --- a/src/handlers/mining/getblockwinnerid.ts +++ b/src/handlers/mining/getblockwinnerid.ts @@ -3,19 +3,22 @@ import { getBlockWinnerId } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetBlockWinnerId = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (city === undefined || blockHeight === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current block height if specified if (blockHeight === 'current') { @@ -32,7 +35,7 @@ const GetBlockWinnerId = async (request: IttyRequest): Promise => { return new Response(`Block winner ID not found at block height: ${blockHeight}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(winnerId) + const response = await createSingleValue(winnerId) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/mining/getlasthighvalueatblock.ts b/src/handlers/mining/getlasthighvalueatblock.ts index 2474095..4cba66b 100644 --- a/src/handlers/mining/getlasthighvalueatblock.ts +++ b/src/handlers/mining/getlasthighvalueatblock.ts @@ -3,19 +3,22 @@ import { getLastHighValueAtBlock } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetLastHighValueAtBlock = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (city === undefined || blockHeight === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current block height if specified if (blockHeight === 'current') { @@ -32,7 +35,7 @@ const GetLastHighValueAtBlock = async (request: IttyRequest): Promise return new Response(`High value not found at block height: ${blockHeight}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(highValue) + const response = await createSingleValue(highValue) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/mining/getmineratblock.ts b/src/handlers/mining/getmineratblock.ts index b380c38..4cc1400 100644 --- a/src/handlers/mining/getmineratblock.ts +++ b/src/handlers/mining/getmineratblock.ts @@ -3,20 +3,23 @@ import { getMinerAtBlock } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { MinerAtBlock } from '../../types/mining' const GetMinerAtBlock = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined const userId = request.params?.userid ?? undefined - if (city === undefined || blockHeight === undefined || userId === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current block height if specified if (blockHeight === 'current') { @@ -32,7 +35,7 @@ const GetMinerAtBlock = async (request: IttyRequest): Promise => { return new Response(`User ID not specified or invalid`, { status: 400 }) } // get miner info at block height - const minerAtBlock: MinerAtBlock = await getMinerAtBlock(cityConfig, blockHeight, userId) + const minerAtBlock = await getMinerAtBlock(cityConfig, blockHeight, userId) if (minerAtBlock === null) { return new Response(`Miner ${userId} not found at block height: ${blockHeight}`, { status: 404 }) } diff --git a/src/handlers/mining/getminingstatsatblock.ts b/src/handlers/mining/getminingstatsatblock.ts index d42d496..5a23ff8 100644 --- a/src/handlers/mining/getminingstatsatblock.ts +++ b/src/handlers/mining/getminingstatsatblock.ts @@ -3,19 +3,22 @@ import { getMiningStatsAtBlock } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { MiningStatsAtBlock } from '../../types/mining' const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (city === undefined || blockHeight === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current block height if specified if (blockHeight === 'current') { @@ -27,7 +30,7 @@ const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => } } // get mining stats at block height - const miningStatsAtBlock: MiningStatsAtBlock = await getMiningStatsAtBlock(cityConfig, blockHeight) + const miningStatsAtBlock = await getMiningStatsAtBlock(cityConfig, blockHeight) if (miningStatsAtBlock === null) { return new Response(`Mining stats not found at block height: ${blockHeight}`, { status: 404 }) } diff --git a/src/handlers/mining/hasminedatblock.ts b/src/handlers/mining/hasminedatblock.ts index 8108b12..5fccae0 100644 --- a/src/handlers/mining/hasminedatblock.ts +++ b/src/handlers/mining/hasminedatblock.ts @@ -3,20 +3,23 @@ import { hasMinedAtBlock } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const HasMinedAtBlock = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined const userId = request.params?.userid ?? undefined - if (city === undefined || blockHeight === undefined || userId === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current block height if specified if (blockHeight === 'current') { @@ -37,7 +40,7 @@ const HasMinedAtBlock = async (request: IttyRequest): Promise => { return new Response(`Mining record for ${userId} not found at block height: ${blockHeight}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(minedAtBlock) + const response = await createSingleValue(minedAtBlock) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/miningclaims/canclaimminingreward.ts b/src/handlers/miningclaims/canclaimminingreward.ts index f8830fb..b748005 100644 --- a/src/handlers/miningclaims/canclaimminingreward.ts +++ b/src/handlers/miningclaims/canclaimminingreward.ts @@ -3,20 +3,23 @@ import { canClaimMiningReward } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const CanClaimMiningReward = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const blockHeight = request.params?.blockheight ?? undefined const user = request.params?.address ?? undefined - if (city === undefined || blockHeight === undefined || user === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // verify block height is valid value if (!isStringAllDigits(blockHeight) && blockHeight !== 'current') { @@ -32,7 +35,7 @@ const CanClaimMiningReward = async (request: IttyRequest): Promise => // check if user won at given block height and can claim reward const canClaimReward = await canClaimMiningReward(cityConfig, user, blockHeight) // return response - const response: SingleValue = await createSingleValue(canClaimReward) + const response = await createSingleValue(canClaimReward) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/miningclaims/isblockwinner.ts b/src/handlers/miningclaims/isblockwinner.ts index 8e7a163..c058749 100644 --- a/src/handlers/miningclaims/isblockwinner.ts +++ b/src/handlers/miningclaims/isblockwinner.ts @@ -3,20 +3,23 @@ import { isBlockWinner } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const IsBlockWinner = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const blockHeight = request.params?.blockheight ?? undefined const user = request.params?.address ?? undefined - if (city === undefined || blockHeight === undefined || user === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // verify block height is valid value if (!isStringAllDigits(blockHeight) && blockHeight !== 'current') { @@ -32,7 +35,7 @@ const IsBlockWinner = async (request: IttyRequest): Promise => { // check if user won at given block height const blockWinner = await isBlockWinner(cityConfig, user, blockHeight) // return response - const response: SingleValue = await createSingleValue(blockWinner) + const response = await createSingleValue(blockWinner) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/stacking/getfirststacksblockinrewardcycle.ts b/src/handlers/stacking/getfirststacksblockinrewardcycle.ts index 91bd11b..992aa25 100644 --- a/src/handlers/stacking/getfirststacksblockinrewardcycle.ts +++ b/src/handlers/stacking/getfirststacksblockinrewardcycle.ts @@ -3,19 +3,22 @@ import { getFirstStacksBlockInRewardCycle, getRewardCycle } from '../../lib/city import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetFirstStacksBlockInRewardCycle = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let cycle = request.params?.cycleid ?? undefined - if (city === undefined || cycle === undefined) { + if (version === undefined || city === undefined || cycle === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current reward cycle if specified if (cycle === 'current') { @@ -28,12 +31,12 @@ const GetFirstStacksBlockInRewardCycle = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (city === undefined || blockHeight === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current block height if specified if (blockHeight === 'current') { @@ -27,12 +30,12 @@ const GetRewardCycle = async (request: IttyRequest): Promise => { } } // get reward cycle at block height - const rewardCycle: string = await getRewardCycle(cityConfig, blockHeight) + const rewardCycle = await getRewardCycle(cityConfig, blockHeight) if (rewardCycle === null) { return new Response(`Reward cycle not found at block height: ${blockHeight}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(rewardCycle) + const response = await createSingleValue(rewardCycle) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/stacking/getstackeratcycle.ts b/src/handlers/stacking/getstackeratcycle.ts index 8615e73..3cd3ddd 100644 --- a/src/handlers/stacking/getstackeratcycle.ts +++ b/src/handlers/stacking/getstackeratcycle.ts @@ -3,20 +3,23 @@ import { getRewardCycle, getStackerAtCycle } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { StackerAtCycle } from '../../types/stacking' const GetStackerAtCycle = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let cycle = request.params?.cycleid ?? undefined const userId = request.params?.userid ?? undefined - if (city === undefined || cycle === undefined || userId === undefined) { + if (version === undefined || city === undefined || cycle === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current reward cycle if specified if (cycle === 'current') { @@ -33,7 +36,7 @@ const GetStackerAtCycle = async (request: IttyRequest): Promise => { return new Response(`User ID not specified or invalid`, { status: 400 }) } // get stacker stats at cycle - const stackerAtCycle: StackerAtCycle = await getStackerAtCycle(cityConfig, cycle, userId) + const stackerAtCycle = await getStackerAtCycle(cityConfig, cycle, userId) if (stackerAtCycle === null) { return new Response(`Stacker ${userId} not found at reward cycle: ${cycle}`, { status: 404 }) } diff --git a/src/handlers/stacking/getstackingstatsatcycle.ts b/src/handlers/stacking/getstackingstatsatcycle.ts index 2fcb7d5..0cf84c2 100644 --- a/src/handlers/stacking/getstackingstatsatcycle.ts +++ b/src/handlers/stacking/getstackingstatsatcycle.ts @@ -3,19 +3,22 @@ import { getRewardCycle, getStackingStatsAtCycle } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { StackingStatsAtCycle } from '../../types/stacking' const GetStackingStatsAtCycle = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let cycle = request.params?.cycleid ?? undefined - if (city === undefined || cycle === undefined) { + if (version === undefined || city === undefined || cycle === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current reward cycle if specified if (cycle === 'current') { @@ -28,7 +31,7 @@ const GetStackingStatsAtCycle = async (request: IttyRequest): Promise } } // get stacking stats at cycle - const stackingStatsAtCycle: StackingStatsAtCycle = await getStackingStatsAtCycle(cityConfig, cycle) + const stackingStatsAtCycle = await getStackingStatsAtCycle(cityConfig, cycle) if (stackingStatsAtCycle === null) { return new Response(`Stacking stats not found at reward cycle: ${cycle}`, { status: 404 }) } diff --git a/src/handlers/stacking/stackingactiveatcycle.ts b/src/handlers/stacking/stackingactiveatcycle.ts index bb3fbed..347e74b 100644 --- a/src/handlers/stacking/stackingactiveatcycle.ts +++ b/src/handlers/stacking/stackingactiveatcycle.ts @@ -3,19 +3,22 @@ import { getRewardCycle, stackingActiveAtCycle } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const StackingActiveAtCycle = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let cycle = request.params?.cycleid ?? undefined - if (city === undefined || cycle === undefined) { + if (version === undefined || city === undefined || cycle === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current reward cycle if specified if (cycle === 'current') { @@ -33,7 +36,7 @@ const StackingActiveAtCycle = async (request: IttyRequest): Promise => return new Response(`Stacking info not found at cycle: ${cycle}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(activeAtCycle) + const response = await createSingleValue(activeAtCycle) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/stackingclaims/getstackingreward.ts b/src/handlers/stackingclaims/getstackingreward.ts index 5cccfbd..1f388d3 100644 --- a/src/handlers/stackingclaims/getstackingreward.ts +++ b/src/handlers/stackingclaims/getstackingreward.ts @@ -3,20 +3,23 @@ import { getRewardCycle, getStackingReward } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetStackingReward = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const cycle = request.params?.cycleid ?? undefined const userId = request.params?.userid ?? undefined - if (city === undefined || cycle === undefined || userId === undefined) { + if (version === undefined || city === undefined || cycle === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // verify target cycle is a valid value if (!isStringAllDigits(cycle) && cycle !== 'current') { @@ -36,7 +39,7 @@ const GetStackingReward = async (request: IttyRequest): Promise => { // get stacking reward for user at cycle const stackingReward = await getStackingReward(cityConfig, cycle, userId) // return response - const response: SingleValue = await createSingleValue(stackingReward) + const response = await createSingleValue(stackingReward) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/stacks/getbnsname.ts b/src/handlers/stacks/getbnsname.ts index 767801e..0508a2a 100644 --- a/src/handlers/stacks/getbnsname.ts +++ b/src/handlers/stacks/getbnsname.ts @@ -1,7 +1,6 @@ import { Request as IttyRequest } from 'itty-router' import { createSingleValue } from '../../lib/common' import { getBnsName } from '../../lib/stacks' -import { SingleValue } from '../../types/common' const GetBnsName = async (request: IttyRequest): Promise => { // check inputs @@ -10,13 +9,13 @@ const GetBnsName = async (request: IttyRequest): Promise => { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get Stacks block height from API - const bnsNames: string = await getBnsName(address) + const bnsNames = await getBnsName(address) .catch(() => { return '' }) if (bnsNames === '' || bnsNames === 'undefined') { return new Response(`BNS name(s) not found for address: ${address}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(bnsNames) + const response = await createSingleValue(bnsNames) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/stacks/getstacksblockheight.ts b/src/handlers/stacks/getstacksblockheight.ts index 51333aa..9530bb0 100644 --- a/src/handlers/stacks/getstacksblockheight.ts +++ b/src/handlers/stacks/getstacksblockheight.ts @@ -1,16 +1,15 @@ import { createSingleValue } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { SingleValue } from '../../types/common' const GetStacksBlockHeight = async (): Promise => { // get Stacks block height from API - const currentBlockHeight: string = await getStacksBlockHeight() + const currentBlockHeight = await getStacksBlockHeight() .catch(() => { return '' }) if (currentBlockHeight === '') { return new Response(`Stacks block height not found, please try again`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(currentBlockHeight) + const response = await createSingleValue(currentBlockHeight) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/stacks/getstxbalance.ts b/src/handlers/stacks/getstxbalance.ts index 34889d5..0deb241 100644 --- a/src/handlers/stacks/getstxbalance.ts +++ b/src/handlers/stacks/getstxbalance.ts @@ -1,7 +1,6 @@ import { Request as IttyRequest } from 'itty-router' import { createSingleValue } from '../../lib/common' import { getStxBalance } from '../../lib/stacks' -import { SingleValue } from '../../types/common' const GetStxBalance = async (request: IttyRequest): Promise => { // check inputs @@ -10,13 +9,13 @@ const GetStxBalance = async (request: IttyRequest): Promise => { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get Stacks balance in uSTX from API - const stxBalance: string = await getStxBalance(address) + const stxBalance = await getStxBalance(address) .catch(() => { return '' }) if (stxBalance === '') { return new Response(`Stacks balance not found for address: ${address}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(stxBalance) + const response = await createSingleValue(stxBalance) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/token/getbalance.ts b/src/handlers/token/getbalance.ts index 235e9d4..258cc14 100644 --- a/src/handlers/token/getbalance.ts +++ b/src/handlers/token/getbalance.ts @@ -2,19 +2,22 @@ import { Request as IttyRequest } from 'itty-router' import { getBalance } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetBalance = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const user = request.params?.address ?? undefined - if (city === undefined || user === undefined) { + if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get CityCoin balance const balance = await getBalance(cityConfig, user) @@ -23,7 +26,7 @@ const GetBalance = async (request: IttyRequest): Promise => { return new Response(`User not found: ${user}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(balance) + const response = await createSingleValue(balance) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/token/getcoinbaseamount.ts b/src/handlers/token/getcoinbaseamount.ts index 1e9dbaa..8390ba9 100644 --- a/src/handlers/token/getcoinbaseamount.ts +++ b/src/handlers/token/getcoinbaseamount.ts @@ -3,19 +3,22 @@ import { getCoinbaseAmount } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetCoinbaseAmount = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (city === undefined || blockHeight === undefined) { + if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get current block height if specified if (blockHeight === 'current') { @@ -32,7 +35,7 @@ const GetCoinbaseAmount = async (request: IttyRequest): Promise => { return new Response(`Coinbase amount not found at block height: ${blockHeight}`, { status: 404 }) } // return response - const response: SingleValue = await createSingleValue(coinbaseAmount) + const response = await createSingleValue(coinbaseAmount) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/token/getcoinbasethresholds.ts b/src/handlers/token/getcoinbasethresholds.ts index 4f21a5d..f7a020a 100644 --- a/src/handlers/token/getcoinbasethresholds.ts +++ b/src/handlers/token/getcoinbasethresholds.ts @@ -1,21 +1,24 @@ import { Request as IttyRequest } from 'itty-router' import { getCoinbaseThresholds } from '../../lib/citycoins' import { getCityConfig } from '../../types/cities' -import { CoinbaseThresholds } from '../../types/token' const GetCoinbaseThresholds = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get coinbase thresholds - const coinbaseThresholds: CoinbaseThresholds = await getCoinbaseThresholds(cityConfig) + const coinbaseThresholds = await getCoinbaseThresholds(cityConfig) if (coinbaseThresholds === null) { return new Response(`Coinbase thresholds not found for city: ${city}`, { status: 404 }) } diff --git a/src/handlers/token/getdecimals.ts b/src/handlers/token/getdecimals.ts index b27c170..b283020 100644 --- a/src/handlers/token/getdecimals.ts +++ b/src/handlers/token/getdecimals.ts @@ -2,23 +2,26 @@ import { Request as IttyRequest } from 'itty-router' import { getDecimals } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetDecimals = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get SIP-010 decimals - const decimals: string = await getDecimals(cityConfig) + const decimals = await getDecimals(cityConfig) // return response - const response: SingleValue = await createSingleValue(decimals) + const response = await createSingleValue(decimals) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/token/getname.ts b/src/handlers/token/getname.ts index 2bdc3c9..4dbb990 100644 --- a/src/handlers/token/getname.ts +++ b/src/handlers/token/getname.ts @@ -2,23 +2,26 @@ import { Request as IttyRequest } from 'itty-router' import { getName } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetName = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get SIP-010 name - const name: string = await getName(cityConfig) + const name = await getName(cityConfig) // return response - const response: SingleValue = await createSingleValue(name) + const response = await createSingleValue(name) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/token/getsymbol.ts b/src/handlers/token/getsymbol.ts index e0438d3..b3102ef 100644 --- a/src/handlers/token/getsymbol.ts +++ b/src/handlers/token/getsymbol.ts @@ -2,23 +2,26 @@ import { Request as IttyRequest } from 'itty-router' import { getSymbol } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetSymbol = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get SIP-010 symbol - const symbol: string = await getSymbol(cityConfig) + const symbol = await getSymbol(cityConfig) // return response - const response: SingleValue = await createSingleValue(symbol) + const response = await createSingleValue(symbol) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/token/gettokenuri.ts b/src/handlers/token/gettokenuri.ts index 6e4d8c8..7cd6598 100644 --- a/src/handlers/token/gettokenuri.ts +++ b/src/handlers/token/gettokenuri.ts @@ -2,23 +2,26 @@ import { Request as IttyRequest } from 'itty-router' import { getTokenUri } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetTokenUri = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get SIP-010 token uri - const tokenUri: string = await getTokenUri(cityConfig) + const tokenUri = await getTokenUri(cityConfig) // return response - const response: SingleValue = await createSingleValue(tokenUri) + const response = await createSingleValue(tokenUri) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/token/gettokenurijson.ts b/src/handlers/token/gettokenurijson.ts index d57657a..c7a470e 100644 --- a/src/handlers/token/gettokenurijson.ts +++ b/src/handlers/token/gettokenurijson.ts @@ -1,23 +1,26 @@ import { Request as IttyRequest } from 'itty-router' import { getTokenUri } from '../../lib/citycoins' import { getCityConfig } from '../../types/cities' -import { TokenUri } from '../../types/token' const GetTokenUriJson = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // get SIP-010 token uri URL - const tokenUri: string = await getTokenUri(cityConfig) + const tokenUri = await getTokenUri(cityConfig) // get JSON from URL - const tokenUriJson: TokenUri = await fetch(tokenUri).then(res => res.json()) + const tokenUriJson = await fetch(tokenUri).then(res => res.json()) // return response const headers = { 'Access-Control-Allow-Origin': '*', diff --git a/src/handlers/token/gettotalsupply.ts b/src/handlers/token/gettotalsupply.ts index 1dfd88f..0aa6b79 100644 --- a/src/handlers/token/gettotalsupply.ts +++ b/src/handlers/token/gettotalsupply.ts @@ -2,7 +2,6 @@ import { Request as IttyRequest } from 'itty-router' import { getTotalSupply } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const GetTotalSupply = async (request: IttyRequest): Promise => { let cityConfig @@ -20,9 +19,9 @@ const GetTotalSupply = async (request: IttyRequest): Promise => { return new Response(String(err), { status: 404 }) } // get total supply - const totalSupply: string = await getTotalSupply(cityConfig) + const totalSupply = await getTotalSupply(cityConfig) // return response - const response: SingleValue = await createSingleValue(totalSupply) + const response = await createSingleValue(totalSupply) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', diff --git a/src/handlers/tools/getprices.ts b/src/handlers/tools/getprices.ts index 0f7920d..8eeffe3 100644 --- a/src/handlers/tools/getprices.ts +++ b/src/handlers/tools/getprices.ts @@ -1,15 +1,15 @@ import { Request as IttyRequest } from 'itty-router' import { getCGPrice } from '../../lib/prices' import { getCityConfig } from '../../types/cities' -import { Prices } from '../../types/common' const GetPrices = async (request: IttyRequest): Promise => { + let cityConfig + let tokenName // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const currency = request.params?.currency ?? undefined - let cityConfig - let tokenName - if (city === undefined) { + if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // hack to allow for stx @@ -17,14 +17,16 @@ const GetPrices = async (request: IttyRequest): Promise => { tokenName = 'blockstack' } else { // get city configuration object - cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } - tokenName = cityConfig.tokenName + tokenName = cityConfig.token.tokenName } // get CoinGecko price - const prices: Prices = await getCGPrice(tokenName, currency) + const prices = await getCGPrice(tokenName, currency) .catch(() => { return { "coingecko": 0, }}) diff --git a/src/handlers/tools/proofofhodl.ts b/src/handlers/tools/proofofhodl.ts index 839fb5e..cdd64b2 100644 --- a/src/handlers/tools/proofofhodl.ts +++ b/src/handlers/tools/proofofhodl.ts @@ -2,24 +2,27 @@ import { Request as IttyRequest } from 'itty-router' import { getProofOfHodl } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' import { getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' const ProofOfHodl = async (request: IttyRequest): Promise => { + let cityConfig // check inputs + const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const user = request.params?.address ?? undefined - if (city === undefined || user === undefined) { + if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } // get city configuration object - const cityConfig = await getCityConfig(city) - if (cityConfig.deployer === '') { - return new Response(`City name not found: ${city}`, { status: 404 }) + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // check if user is hodling const hodl = await getProofOfHodl(cityConfig, user) // return response - const response: SingleValue = await createSingleValue(hodl) + const response = await createSingleValue(hodl) const headers = { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json', From 684dd5d121ef539adb16f85a353cd49e94b4b82d Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 10:28:22 -0700 Subject: [PATCH 17/51] fix: add leading slash to all routes This also updates the 404 catch all to include the specified URL in the error text. --- src/handler.ts | 60 +++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/handler.ts b/src/handler.ts index 63049b4..859f514 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -44,42 +44,42 @@ router .get('/stacks/get-bns-name/:address', GetBnsName) .get('/stacks/get-stx-balance/:address', GetStxBalance) // Activation functions - .get(':version/:cityname/activation/get-activation-block', GetActivationBlock) - .get(':version/:cityname/activation/get-registered-users-nonce', GetRegisteredUsersNonce) - .get(':version/:cityname/activation/get-user/:userid', GetUser) - .get(':version/:cityname/activation/get-user-id/:address', GetUserId) + .get('/:version/:cityname/activation/get-activation-block', GetActivationBlock) + .get('/:version/:cityname/activation/get-registered-users-nonce', GetRegisteredUsersNonce) + .get('/:version/:cityname/activation/get-user/:userid', GetUser) + .get('/:version/:cityname/activation/get-user-id/:address', GetUserId) // Mining functions - .get(':version/:cityname/mining/get-block-winner-id/:blockheight', GetBlockWinnerId) - .get(':version/:cityname/mining/get-last-high-value-at-block/:blockheight', GetLastHighValueAtBlock) - .get(':version/:cityname/mining/get-miner-at-block/:blockheight/:userid', GetMinerAtBlock) - .get(':version/:cityname/mining/get-mining-stats-at-block/:blockheight', GetMiningStatsAtBlock) - .get(':version/:cityname/mining/has-mined-at-block/:blockheight/:userid', HasMinedAtBlock) + .get('/:version/:cityname/mining/get-block-winner-id/:blockheight', GetBlockWinnerId) + .get('/:version/:cityname/mining/get-last-high-value-at-block/:blockheight', GetLastHighValueAtBlock) + .get('/:version/:cityname/mining/get-miner-at-block/:blockheight/:userid', GetMinerAtBlock) + .get('/:version/:cityname/mining/get-mining-stats-at-block/:blockheight', GetMiningStatsAtBlock) + .get('/:version/:cityname/mining/has-mined-at-block/:blockheight/:userid', HasMinedAtBlock) // Mining claim functions - .get(':version/:cityname/mining-claims/can-claim-mining-reward/:blockheight/:address', CanClaimMiningReward) - .get(':version/:cityname/mining-claims/is-block-winner/:blockheight/:address', IsBlockWinner) + .get('/:version/:cityname/mining-claims/can-claim-mining-reward/:blockheight/:address', CanClaimMiningReward) + .get('/:version/:cityname/mining-claims/is-block-winner/:blockheight/:address', IsBlockWinner) // Stacking functions - .get(':version/:cityname/stacking/get-first-stacks-block-in-reward-cycle/:cycleid', GetFirstStacksBlockInRewardCycle) - .get(':version/:cityname/stacking/get-reward-cycle/:blockheight', GetRewardCycle) - .get(':version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid', GetStackerAtCycle) - .get(':version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid', GetStackingStatsAtCycle) - .get(':version/:cityname/stacking/stacking-active-at-cycle/:cycleid', StackingActiveAtCycle) + .get('/:version/:cityname/stacking/get-first-stacks-block-in-reward-cycle/:cycleid', GetFirstStacksBlockInRewardCycle) + .get('/:version/:cityname/stacking/get-reward-cycle/:blockheight', GetRewardCycle) + .get('/:version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid', GetStackerAtCycle) + .get('/:version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid', GetStackingStatsAtCycle) + .get('/:version/:cityname/stacking/stacking-active-at-cycle/:cycleid', StackingActiveAtCycle) // Stacking claim functions - .get(':version/:cityname/stacking-claims/get-stacking-reward/:cycleid/:userid', GetStackingReward) + .get('/:version/:cityname/stacking-claims/get-stacking-reward/:cycleid/:userid', GetStackingReward) // Token functions - .get(':version/:cityname/token/get-balance/:address', GetBalance) - .get(':version/:cityname/token/get-coinbase-amount/:blockheight', GetCoinbaseAmount) - .get(':version/:cityname/token/get-coinbase-thresholds', GetCoinbaseThresholds) - .get(':version/:cityname/token/get-decimals', GetDecimals) - .get(':version/:cityname/token/get-name', GetName) - .get(':version/:cityname/token/get-symbol', GetSymbol) - .get(':version/:cityname/token/get-token-uri', GetTokenUri) - .get(':version/:cityname/token/get-token-uri-json', GetTokenUriJson) - .get(':version/:cityname/token/get-total-supply', GetTotalSupply) + .get('/:version/:cityname/token/get-balance/:address', GetBalance) + .get('/:version/:cityname/token/get-coinbase-amount/:blockheight', GetCoinbaseAmount) + .get('/:version/:cityname/token/get-coinbase-thresholds', GetCoinbaseThresholds) + .get('/:version/:cityname/token/get-decimals', GetDecimals) + .get('/:version/:cityname/token/get-name', GetName) + .get('/:version/:cityname/token/get-symbol', GetSymbol) + .get('/:version/:cityname/token/get-token-uri', GetTokenUri) + .get('/:version/:cityname/token/get-token-uri-json', GetTokenUriJson) + .get('/:version/:cityname/token/get-total-supply', GetTotalSupply) // Tools - .get(':version/:cityname/tools/prices/:currency?', GetPrices) - .get(':version/:cityname/tools/proof-of-hodl/:address', ProofOfHodl) - .get(':version/:cityname/tools/proof-of-hold/:address', ProofOfHodl) + .get('/:version/:cityname/tools/prices/:currency?', GetPrices) + .get('/:version/:cityname/tools/proof-of-hodl/:address', ProofOfHodl) + .get('/:version/:cityname/tools/proof-of-hold/:address', ProofOfHodl) // Default route - .get('*', () => new Response("Resource not found, please check the URL.", { status: 404 })) + .get('*', (request) => new Response(`Resource not found, please check the URL: ${request.url}`, { status: 404 })) export const handleRequest = (request: Request):Response => router.handle(request) From 7ec8b9c23ce1f6bc31570f33e7152cb10185369b Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 13:00:31 -0700 Subject: [PATCH 18/51] fix: update README with new route format and procedures --- README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 74029e7..a55e04a 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,12 @@ CF Workers + IttyRouter + micro-stacks + TypeScript ## Things to Note - uses simple typed responses and provides detailed error messages -- all `:cityname` routes accept three letter city names, e.g. mia, nyc -- all `:blockheight` routes always follow `:cityname` routes when required -- all additional parameters follow `:cityname` and `:blockheight` routes +- all CityCoin contract routes start with `:version` and `:cityname` + - e.g. `/v1/mia/mining/get-mining-stats-at-block/57934` +- `:version` accepts the major CityCoins contract version, e.g. v1, v2 +- `:cityname` routes accept three letter city names, e.g. mia, nyc +- all additional parameters follow the order of operations below + - `:blockheight > :cycleid > :userid > :address` - routes are structured the same as the contract functions and documentation ## Implementation @@ -47,7 +50,8 @@ The API is divided into three main sections: - (optional) add new getters in `/lib` - (optional) add new types in `/types` - add new handler file and route to `/src/handler.ts` - - Order of Operations: `:cityname > :blockheight > :cycleid > :userid > :address` + - if querying city data, starts with: `:version/:cityname/` + - order of operations: `:blockheight > :cycleid > :userid > :address` - add new endpoint to `/static/openapi.yml` - routes get added to the corresponding section - routes get tagged by their category (matches directory) @@ -81,9 +85,9 @@ A full list of routes and responses can be found in the [OpenAPI documentation]( Some quick examples: - [Get the current Stacks block height](https://api.citycoins.co/stacks/get-block-height) -- [Get the activation block height for MIA](https://api.citycoins.co/activation/get-activation-block/mia) -- [Get the mining stats at block 49000 for MIA](https://api.citycoins.co/mining/get-mining-stats-at-block/mia/49000) -- [Get the total supply for MIA](https://api.citycoins.co/token/get-total-supply/mia) +- [Get the activation block height for MIA](https://api.citycoins.co/v1/mia/activation/get-activation-block) +- [Get the mining stats at block 49000 for MIA](https://api.citycoins.co/v1/mia/mining/get-mining-stats-at-block/49000) +- [Get the total supply for MIA](https://api.citycoins.co/v2/mia/token/get-total-supply) > “Continuous effort, not strength or intelligence > is the key to unlocking our potential.” From 0d093f3ec3e132c86f4953b4d3aa02f4a696b220 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 13:31:01 -0700 Subject: [PATCH 19/51] fix: update landing page with latest README contents --- src/handlers/landing.ts | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/handlers/landing.ts b/src/handlers/landing.ts index bc0ba7e..b29fc3e 100644 --- a/src/handlers/landing.ts +++ b/src/handlers/landing.ts @@ -47,6 +47,14 @@ const landingHtml = ` + CityCoins API Logo @@ -56,9 +64,16 @@ const landingHtml = `

Things to Note

  • uses simple typed responses and provides detailed error messages
  • -
  • all :cityname routes accept three letter city names, e.g. mia, nyc
  • -
  • all :blockheight routes always follow :cityname routes when required
  • -
  • all additional parameters follow :cityname and :blockheight routes
  • +
  • + all CityCoin contract routes start with :version and :cityname
    + e.g. /v1/mia/mining/get-mining-stats-at-block/57934 +
  • +
  • :version accepts the major CityCoins contract version, e.g. v1, v2
  • +
  • :cityname routes accept three letter city names, e.g. mia, nyc
  • +
  • + all additional parameters follow the order of operations below
    + :blockheight > :cycleid > :userid > :address +
  • routes are structured the same as the contract functions and documentation

If you want to use this for your project, build a copy for yourself, or have any questions, please join the CityCoins Discord or file a GitHub Issue and reach out!

@@ -66,11 +81,11 @@ const landingHtml = `

A full list of routes and responses can be found in the OpenAPI documentation.


From 1de94aefcba7d7205a30f4b0e55eda66f7d78e19 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 13:50:56 -0700 Subject: [PATCH 20/51] fix: update openapi spec with new data formats --- static/openapi.yml | 93 +++++++++++++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 29 deletions(-) diff --git a/static/openapi.yml b/static/openapi.yml index 0563889..fcbd799 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -2,7 +2,7 @@ openapi: 3.0.2 info: title: CityCoins API description: A simple API to interact with Stacks and CityCoins data. See the [CityCoins documentation site](https://docs.citycoins.co/developer-resources/api) or [GitHub for more info.](https://github.com/citycoins/api) - version: 1.1.0 + version: 2.0.0 servers: - url: https://api.citycoins.co description: Main @@ -91,13 +91,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /activation/get-activation-block/{cityname}: + /{version}/{cityname}/activation/get-activation-block: get: summary: Get Activation Block description: Get the Stacks block height the core contract was activated at for a given CityCoin tags: - Activation parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: "200": @@ -107,13 +108,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /activation/get-registered-users-nonce/{cityname}: + /{version}/{cityname}/activation/get-registered-users-nonce: get: summary: Get Registered Users description: Get the total number of users assigned an ID from the core contract for a given CityCoin tags: - Activation parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: "200": @@ -123,13 +125,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /activation/get-user/{cityname}/{userid}: + /{version}/{cityname}/activation/get-user/{userid}: get: summary: Get User description: Get the Stacks address for a given CityCoin and user ID tags: - Activation parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/userid' responses: @@ -140,13 +143,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /activation/get-user-id/{cityname}/{address}: + /{version}/{cityname}/activation/get-user-id/{address}: get: summary: Get User ID description: Get the CityCoins user ID from the core contract for a given CityCoin and Stacks address tags: - Activation parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/address' responses: @@ -157,13 +161,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /mining/get-block-winner-id/{cityname}/{blockheight}: + /{version}/{cityname}/mining/get-block-winner-id/{blockheight}: get: summary: Get Block Winner ID description: Gets the winning user ID for a given blockheight only *after the miner claims the reward* tags: - Mining parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' responses: @@ -174,13 +179,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /mining/get-mining-stats-at-block/{cityname}/{blockheight}: + /{version}/{cityname}/mining/get-mining-stats-at-block/{blockheight}: get: summary: Get Mining Stats description: Get the mining stats for a given CityCoin and Stacks block height tags: - Mining parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' responses: @@ -214,13 +220,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /mining/get-miner-at-block/{cityname}/{blockheight}/{userid}: + /{version}/{cityname}/mining/get-miner-at-block/{blockheight}/{userid}: get: summary: Get Miner Info description: Get the miner details for a given CityCoin, Stacks block height, and user ID. tags: - Mining parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' - $ref: '#/components/parameters/userid' @@ -252,13 +259,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /mining/get-last-high-value-at-block/{cityname}/{blockheight}: + /{version}/{cityname}/mining/get-last-high-value-at-block//{blockheight}: get: summary: Get Last High Value at Block description: Gets the last high value at the specified block used to determine the winner by the VRF, and increases with each miner commitment. tags: - Mining parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' responses: @@ -269,13 +277,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /mining/has-mined-at-block/{cityname}/{blockheight}/{userid}: + /{version}/{cityname}/mining/has-mined-at-block/{blockheight}/{userid}: get: summary: Has Mined at Block description: Check if a the user has mined with a given CityCoin, Stacks block height, and user ID. tags: - Mining parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' - $ref: '#/components/parameters/userid' @@ -287,13 +296,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /mining-claims/can-claim-mining-reward/{cityname}/{blockheight}/{address}: + /{version}/{cityname}/mining-claims/can-claim-mining-reward/{blockheight}/{address}: get: summary: Can Claim Mining Reward description: Returns a boolean value indicating if the user's principal won and is eligible to claim the block reward at a given block height. tags: - Mining Claims parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' - $ref: '#/components/parameters/address' @@ -305,13 +315,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /mining-claims/is-block-winner/{cityname}/{blockheight}/{address}: + /{version}/{cityname}/mining-claims/is-block-winner/{blockheight}/{address}: get: summary: Is Block Winner description: Returns a boolean value indicating if the user's principal won at a given block height. tags: - Mining Claims parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' - $ref: '#/components/parameters/address' @@ -323,13 +334,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /stacking/get-stacking-stats-at-cycle/{cityname}/{cycleid}: + /{version}/{cityname}/stacking/get-stacking-stats-at-cycle/{cycleid}: get: summary: Get Stacking Stats description: Get the stacking stats for a given CityCoin and reward cycle ID tags: - Stacking parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' responses: @@ -354,13 +366,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /stacking/get-stacker-at-cycle/{cityname}/{cycleid}/{userid}: + /{version}/{cityname}/stacking/get-stacker-at-cycle/{cycleid}/{userid}: get: summary: Get Stacker Info description: Get the amount stacked and amount to return for a given CityCoin, reward cycle ID, and user ID. tags: - Stacking parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' - $ref: '#/components/parameters/userid' @@ -386,13 +399,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /stacking/get-reward-cycle/{cityname}/{blockheight}: + /{version}/{cityname}/stacking/get-reward-cycle/{blockheight}: get: summary: Get Reward Cycle description: Get the reward cycle for a given CityCoin and Stacks block height tags: - Stacking parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' responses: @@ -403,13 +417,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /stacking/get-first-stacks-block-in-reward-cycle/{cityname}/{cycleid}: + /{version}/{cityname}/stacking/get-first-stacks-block-in-reward-cycle/{cycleid}: get: summary: Get First Block In Reward Cycle description: Get the first Stacks block in a reward cycle for the given CityCoin and reward cycle ID tags: - Stacking parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' responses: @@ -420,13 +435,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /stacking/stacking-active-at-cycle/{cityname}/{cycleid}: + /{version}/{cityname}/stacking/stacking-active-at-cycle/{cycleid}: get: summary: Stacking Active at Cycle description: Returns a boolean value indicating if stacking is active at a given reward cycle, meaning a positive number of CityCoins are Stacked for that cycle. tags: - Stacking parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' responses: @@ -437,7 +453,7 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /stacking-claims/get-stacking-reward/{cityname}/{cycleid}/{userid}: + /{version}/{cityname}/stacking-claims/get-stacking-reward/{cycleid}/{userid}: get: summary: Get Stacking Reward description: | @@ -448,6 +464,7 @@ paths: tags: - Stacking Claims parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' - $ref: '#/components/parameters/userid' @@ -459,13 +476,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-coinbase-amount/{cityname}/{blockheight}: + /{version}/{cityname}/token/get-coinbase-amount/{blockheight}: get: summary: Get Coinbase Amount description: Get the coinbase amount for a given CityCoin and Stacks block height tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' responses: @@ -476,13 +494,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-coinbase-thresholds/{cityname}: + /{version}/{cityname}/token/get-coinbase-thresholds: get: summary: Get Coinbase Thresholds description: Get the coinbase thresholds (Stacks block heights) for a given CityCoin tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' responses: @@ -516,13 +535,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-name/{cityname}: + /{version}/{cityname}/token/get-name: get: summary: Get Token Name description: Get the SIP-010 name for a given CityCoin tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: "200": @@ -532,13 +552,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-symbol/{cityname}: + /{versions}/{cityname}/token/get-symbol: get: summary: Get Token Symbol description: Get the SIP-010 symbol for a given CityCoin tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: "200": @@ -548,13 +569,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-decimals/{cityname}: + /{version}/{cityname}/token/get-decimals: get: summary: Get Token Decimals description: Get the SIP-010 decimals for a given CityCoin tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: "200": @@ -564,13 +586,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-balance/{cityname}/{address}: + /{version}/{cityname}/token/get-balance/{address}: get: summary: Get Token Balance description: Get the token balance for a given CityCoin and Stacks address tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/address' responses: @@ -581,13 +604,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-total-supply/{cityname}: + /{version}/{cityname}/token/get-total-supply: get: summary: Get Total Supply description: Get the SIP-010 total supply for a given CityCoin tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: "200": @@ -597,13 +621,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-token-uri/{cityname}: + /{version}/{cityname}/token/get-token-uri: get: summary: Get Token URI description: Get the token URI URL for a given CityCoin tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: "200": @@ -613,13 +638,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /token/get-token-uri-json/{cityname}: + /{version}/{cityname}/token/get-token-uri-json: get: summary: Get Token URI JSON description: Get the contents of the token URI URL for a given CityCoin tags: - Token parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: "200": @@ -646,7 +672,7 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /tools/prices/{cityname}/{currency}: + /{version}/{cityname}/tools/prices/{currency}: get: summary: Get Prices description: | @@ -656,6 +682,7 @@ paths: tags: - Tools parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/currency' responses: @@ -677,13 +704,14 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /tools/proof-of-hodl/{cityname}/{address}: + /{version}/{cityname}/tools/proof-of-hodl/{address}: get: summary: Check Proof of Hodl description: Check whether the user is holding or stacking a given CityCoin at a given address tags: - Tools parameters: + - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/address' responses: @@ -743,6 +771,13 @@ components: schema: type: string description: The user ID stored in a CityCoins core contract for a Stacks address + version: + in: path + name: version + required: true + schema: + type: string + description: The major CityCoins contract version, e.g. v1, v2 #------------------------------- # Reusable responses #------------------------------- From ac848fb4228c46e8f6409d7ffb7661e19ccf5c37 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 13:51:41 -0700 Subject: [PATCH 21/51] fix: update package.json version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e7a97c..290c3b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "citycoins-api", - "version": "1.1.0", + "version": "2.0.0", "description": "A simple API to interact with Stacks and CityCoins data.", "main": "dist/worker.js", "scripts": { From 4b78702be09884b1acaf0374c86212b8d7da8589 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 15:17:44 -0700 Subject: [PATCH 22/51] feat: add /tools/get-city-configuration endpoint --- package-lock.json | 4 +- src/handler.ts | 2 + src/handlers/tools/getcityconfiguration.ts | 27 +++++++ static/openapi.yml | 94 ++++++++++++++++++++++ 4 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 src/handlers/tools/getcityconfiguration.ts diff --git a/package-lock.json b/package-lock.json index b0e2a72..6905d47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "citycoins-api", - "version": "1.1.0", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "citycoins-api", - "version": "1.1.0", + "version": "2.0.0", "license": "MIT OR Apache-2.0", "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", diff --git a/src/handler.ts b/src/handler.ts index 859f514..89b8a19 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -30,6 +30,7 @@ import GetName from './handlers/token/getname' import GetSymbol from './handlers/token/getsymbol' import GetTokenUri from './handlers/token/gettokenuri' import GetTokenUriJson from './handlers/token/gettokenurijson' +import GetCityConfiguration from './handlers/tools/getcityconfiguration' import GetPrices from './handlers/tools/getprices' import ProofOfHodl from './handlers/tools/proofofhodl' @@ -76,6 +77,7 @@ router .get('/:version/:cityname/token/get-token-uri-json', GetTokenUriJson) .get('/:version/:cityname/token/get-total-supply', GetTotalSupply) // Tools + .get('/:version/:cityname/tools/get-city-configuration', GetCityConfiguration) .get('/:version/:cityname/tools/prices/:currency?', GetPrices) .get('/:version/:cityname/tools/proof-of-hodl/:address', ProofOfHodl) .get('/:version/:cityname/tools/proof-of-hold/:address', ProofOfHodl) diff --git a/src/handlers/tools/getcityconfiguration.ts b/src/handlers/tools/getcityconfiguration.ts new file mode 100644 index 0000000..a03edd7 --- /dev/null +++ b/src/handlers/tools/getcityconfiguration.ts @@ -0,0 +1,27 @@ +import { Request as IttyRequest } from 'itty-router' +import { CityConfig, getCityConfig } from '../../types/cities' + +const GetCityConfiguration = async (request: IttyRequest): Promise => { + let cityConfig: CityConfig + // check inputs + const version = request.params?.version ?? undefined + const city = request.params?.cityname ?? undefined + if (version === undefined || city === undefined) { + return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + } + // get city configuration object + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(cityConfig), { headers }) +} + +export default GetCityConfiguration diff --git a/static/openapi.yml b/static/openapi.yml index fcbd799..954f2f3 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -672,6 +672,100 @@ paths: "404": $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/tools/get-city-configuration: + get: + summary: Get City Configuration + description: Get the city configuration file depending on the select version and city name. + tags: + - Tools + parameters: + - $ref: '#/components/parameters/version' + - $ref: '#/components/parameters/cityname' + responses: + "200": + description: Success + content: + application/json: + schema: + type: object + properties: + cityName: + type: string + deployed: + type: boolean + deployer: + type: string + auth: + type: object + properties: + name: + type: string + initialized: + type: boolean + core: + type: object + properties: + name: + type: string + activated: + type: boolean + startBlock: + type: number + shutdown: + type: boolean + shutdownBlock: + type: number + token: + type: object + properties: + name: + type: string + activated: + type: boolean + activationBlock: + type: number + displayName: + type: string + tokenName: + type: string + symbol: + type: string + decimals: + type: number + logo: + type: string + uri: + type: string + examples: + "0": + value: + cityName: "Miami" + deployed: true + deployer: "SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27" + auth: + name: "miamicoin-auth" + initialized: true + core: + name: "miamicoin-core-v1" + activated: false + startBlock: 24497 + shutdown: true + shutdownBlock: 58917 + token: + name: "miamicoin-token" + activated: true + activationBlock: 24497 + displayName: "MiamiCoin" + tokenName: "miamicoin" + symbol: "MIA" + decimals: 0 + logo: "https://cdn.citycoins.co/logos/miamicoin.png" + uri: "https://cdn.citycoins.co/metadata/miamicoin.json" + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/tools/prices/{currency}: get: summary: Get Prices From 500c4580f530bee770048cb39efc8a1a5dfff234 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 11 May 2022 15:44:42 -0700 Subject: [PATCH 23/51] feat: add /stacks/get-date-at-block endpoint --- src/handler.ts | 2 ++ src/handlers/stacks/getdateatblock.ts | 37 +++++++++++++++++++++++++++ src/lib/stacks.ts | 12 +++++++++ static/openapi.yml | 16 ++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 src/handlers/stacks/getdateatblock.ts diff --git a/src/handler.ts b/src/handler.ts index 89b8a19..fd50408 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -4,6 +4,7 @@ import Documentation from './handlers/documentation' import GetStacksBlockHeight from './handlers/stacks/getstacksblockheight' import GetBnsName from './handlers/stacks/getbnsname' import GetStxBalance from './handlers/stacks/getstxbalance' +import GetDateAtBlock from './handlers/stacks/getdateatblock' import GetActivationBlock from './handlers/activation/getactivationblock' import GetRegisteredUsersNonce from './handlers/activation/getregisteredusersnonce' import GetUser from './handlers/activation/getuser' @@ -44,6 +45,7 @@ router .get('/stacks/get-block-height', GetStacksBlockHeight) .get('/stacks/get-bns-name/:address', GetBnsName) .get('/stacks/get-stx-balance/:address', GetStxBalance) + .get('/stacks/get-date-at-block/:blockHeight', GetDateAtBlock) // Activation functions .get('/:version/:cityname/activation/get-activation-block', GetActivationBlock) .get('/:version/:cityname/activation/get-registered-users-nonce', GetRegisteredUsersNonce) diff --git a/src/handlers/stacks/getdateatblock.ts b/src/handlers/stacks/getdateatblock.ts new file mode 100644 index 0000000..9db9e7c --- /dev/null +++ b/src/handlers/stacks/getdateatblock.ts @@ -0,0 +1,37 @@ +import { Request as IttyRequest } from 'itty-router' +import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { getDateAtBlock, getStacksBlockHeight } from '../../lib/stacks' + +const GetDateAtBlock = async (request: IttyRequest): Promise => { + let dateAtBlock: string + // check inputs + let blockHeight = request.params?.blockHeight ?? undefined + if (blockHeight === undefined) { + return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + } + // get current block height if specified + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + // verify block height is valid number + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } + // get date at block height + try { + dateAtBlock = await getDateAtBlock(blockHeight) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const response = await createSingleValue(dateAtBlock) + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(response), { headers }) +} + +export default GetDateAtBlock \ No newline at end of file diff --git a/src/lib/stacks.ts b/src/lib/stacks.ts index dca40e3..b1c71ae 100644 --- a/src/lib/stacks.ts +++ b/src/lib/stacks.ts @@ -35,3 +35,15 @@ export async function getBnsName(address: string): Promise { }) .then(data => { return String(data.names[0]) }) } + +export async function getDateAtBlock(blockHeight: string): Promise { + const url = `${STACKS_NETWORK.getCoreApiUrl()}/extended/v1/block/by_height/${blockHeight}` + return fetch(url) + .then(response => { + if (!response.ok) { + throw new Error(`${response.status} ${response.statusText}`) + } + return response.json() as Promise<{ burn_block_time_iso: string }> + }) + .then(data => { return data.burn_block_time_iso }) +} \ No newline at end of file diff --git a/static/openapi.yml b/static/openapi.yml index 954f2f3..7e2d097 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -91,6 +91,22 @@ paths: "404": $ref: '#/components/responses/404NotFound' + /stacks/get-date-at-block/{blockheight}: + get: + summary: Get Date at Block Height + description: Get the ISO-formatted date for a given Stacks block height + tags: + - Stacks + parameters: + - $ref: '#/components/parameters/blockheight' + responses: + "200": + $ref: '#/components/responses/200SuccessJsonString' + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/activation/get-activation-block: get: summary: Get Activation Block From a4c3c0fb96026586ec60d13838d11b1b3efccbb0 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 12 May 2022 06:32:15 -0700 Subject: [PATCH 24/51] feat: add /token/get-coinbase-amounts endpoint --- src/handler.ts | 2 ++ src/handlers/token/getcoinbaseamounts.ts | 36 +++++++++++++++++++ src/lib/citycoins.ts | 13 ++++++- src/types/token.ts | 10 ++++++ static/openapi.yml | 46 ++++++++++++++++++++++++ 5 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/handlers/token/getcoinbaseamounts.ts diff --git a/src/handler.ts b/src/handler.ts index fd50408..0b9f529 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -24,6 +24,7 @@ import StackingActiveAtCycle from './handlers/stacking/stackingactiveatcycle' import GetStackingReward from './handlers/stackingclaims/getstackingreward' import GetBalance from './handlers/token/getbalance' import GetCoinbaseAmount from './handlers/token/getcoinbaseamount' +import GetCoinbaseAmounts from './handlers/token/getcoinbaseamounts' import GetCoinbaseThresholds from './handlers/token/getcoinbasethresholds' import GetTotalSupply from './handlers/token/gettotalsupply' import GetDecimals from './handlers/token/getdecimals' @@ -71,6 +72,7 @@ router // Token functions .get('/:version/:cityname/token/get-balance/:address', GetBalance) .get('/:version/:cityname/token/get-coinbase-amount/:blockheight', GetCoinbaseAmount) + .get('/:version/:cityname/token/get-coinbase-amounts', GetCoinbaseAmounts) .get('/:version/:cityname/token/get-coinbase-thresholds', GetCoinbaseThresholds) .get('/:version/:cityname/token/get-decimals', GetDecimals) .get('/:version/:cityname/token/get-name', GetName) diff --git a/src/handlers/token/getcoinbaseamounts.ts b/src/handlers/token/getcoinbaseamounts.ts new file mode 100644 index 0000000..f8b68a8 --- /dev/null +++ b/src/handlers/token/getcoinbaseamounts.ts @@ -0,0 +1,36 @@ +import { Request as IttyRequest } from 'itty-router' +import { getCoinbaseAmounts } from '../../lib/citycoins' +import { getCityConfig } from '../../types/cities' + +const GetCoinbaseAmounts = async (request: IttyRequest): Promise => { + let cityConfig + let coinbaseAmounts + // check inputs + const version = request.params?.version ?? undefined + const city = request.params?.cityname ?? undefined + if (version === undefined || city === undefined) { + return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + } + // get city configuration object + try { + cityConfig = await getCityConfig(city, version) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // get coinbase amounts + try { + coinbaseAmounts = await getCoinbaseAmounts(cityConfig) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 400 }) + return new Response(String(err), { status: 400 }) + } + // return response + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(coinbaseAmounts), { headers }) +} + +export default GetCoinbaseAmounts diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index dbcfc1e..3638b30 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -3,7 +3,7 @@ import { standardPrincipalCV, uintCV } from 'micro-stacks/clarity' import { CityConfig } from '../types/cities' import { MinerAtBlock, MiningStatsAtBlock } from '../types/mining' import { StackerAtCycle, StackingStatsAtCycle } from '../types/stacking' -import { CoinbaseThresholds } from '../types/token' +import { CoinbaseAmounts, CoinbaseThresholds } from '../types/token' import { STACKS_NETWORK } from './common' import { getStacksBlockHeight } from './stacks' @@ -218,6 +218,17 @@ export async function getStackingReward(cityConfig: CityConfig, cycleId: string, // TOKEN FUNCTIONS ////////////////////////////////////////////////// +export async function getCoinbaseAmounts(cityConfig: CityConfig): Promise { + return fetchReadOnlyFunction({ + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-coinbase-amounts', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, true) +} + export async function getCoinbaseThresholds(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, diff --git a/src/types/token.ts b/src/types/token.ts index 9d523ac..42d4097 100644 --- a/src/types/token.ts +++ b/src/types/token.ts @@ -1,4 +1,14 @@ +export interface CoinbaseAmounts { + coinbaseAmount1: number, + coinbaseAmount2: number, + coinbaseAmount3: number, + coinbaseAmount4: number, + coinbaseAmount5: number, + coinbaseAmountBonus: number, + coinbaseAmountDefault: number, +} + export interface CoinbaseThresholds { coinbaseThreshold1: number, coinbaseThreshold2: number, diff --git a/static/openapi.yml b/static/openapi.yml index 7e2d097..4aecee5 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -510,6 +510,52 @@ paths: "404": $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/token/get-coinbase-amounts: + get: + summary: Get Coinbase Amounts + description: Gets the coinbase amounts for each coinbase threshold for a given CityCoin + tags: + - Token + parameters: + - $ref: '#/components/parameters/version' + - $ref: '#/components/parameters/cityname' + responses: + "200": + description: Success + content: + application/json: + schema: + type: object + properties: + coinbaseAmount1: + type: string + coinbaseAmount2: + type: string + coinbaseAmount3: + type: string + coinbaseAmount4: + type: string + coinbaseAmount5: + type: string + coinbaseAmountBonus: + type: string + coinbaseAmountDefault: + type: string + examples: + "0": + value: + coinbaseAmount1: "100000000000" + coinbaseAmount2: "50000000000" + coinbaseAmount3: "25000000000" + coinbaseAmount4: "12500000000" + coinbaseAmount5: "6250000000" + coinbaseAmountBonus: "250000000000" + coinbaseAmountDefault: "3125000000" + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/token/get-coinbase-thresholds: get: summary: Get Coinbase Thresholds From f258911e2328d08c881828fc01e50f66c571b48a Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 12 May 2022 06:35:09 -0700 Subject: [PATCH 25/51] fix: update coinbase thresholds to v2 numbers in example --- static/openapi.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/static/openapi.yml b/static/openapi.yml index 4aecee5..424ce7f 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -587,11 +587,11 @@ paths: examples: "0": value: - coinbaseThreshold1: "234497" - coinbaseThreshold2: "444497" - coinbaseThreshold3: "654497" - coinbaseThreshold4: "864497" - coinbaseThreshold5: "1074497" + coinbaseThreshold1: "59497" + coinbaseThreshold2: "109497" + coinbaseThreshold3: "209497" + coinbaseThreshold4: "409497" + coinbaseThreshold5: "809497" "400": $ref: '#/components/responses/400BadRequest' "404": From 67df2bd866a83b2d88355feb4d81dac782f5f191 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 12 May 2022 06:53:46 -0700 Subject: [PATCH 26/51] feat: add /activation/get-activation-target endpoint --- src/handler.ts | 2 ++ .../activation/getactivationtarget.ts | 31 +++++++++++++++++++ src/lib/citycoins.ts | 11 +++++++ static/openapi.yml | 17 ++++++++++ 4 files changed, 61 insertions(+) create mode 100644 src/handlers/activation/getactivationtarget.ts diff --git a/src/handler.ts b/src/handler.ts index 0b9f529..273eaf9 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -6,6 +6,7 @@ import GetBnsName from './handlers/stacks/getbnsname' import GetStxBalance from './handlers/stacks/getstxbalance' import GetDateAtBlock from './handlers/stacks/getdateatblock' import GetActivationBlock from './handlers/activation/getactivationblock' +import GetActivationTarget from './handlers/activation/getactivationtarget' import GetRegisteredUsersNonce from './handlers/activation/getregisteredusersnonce' import GetUser from './handlers/activation/getuser' import GetUserId from './handlers/activation/getuserid' @@ -49,6 +50,7 @@ router .get('/stacks/get-date-at-block/:blockHeight', GetDateAtBlock) // Activation functions .get('/:version/:cityname/activation/get-activation-block', GetActivationBlock) + .get('/:version/:cityname/activation/get-activation-target', GetActivationTarget) .get('/:version/:cityname/activation/get-registered-users-nonce', GetRegisteredUsersNonce) .get('/:version/:cityname/activation/get-user/:userid', GetUser) .get('/:version/:cityname/activation/get-user-id/:address', GetUserId) diff --git a/src/handlers/activation/getactivationtarget.ts b/src/handlers/activation/getactivationtarget.ts new file mode 100644 index 0000000..65fb610 --- /dev/null +++ b/src/handlers/activation/getactivationtarget.ts @@ -0,0 +1,31 @@ +import { Request as IttyRequest } from 'itty-router' +import { getActivationTarget } from '../../lib/citycoins' +import { createSingleValue } from '../../lib/common' +import { getCityConfig } from '../../types/cities' + +const GetActivationTarget = async (request: IttyRequest): Promise => { + let cityConfig + let activationTarget + // check inputs + const version = request.params?.version ?? undefined + const city = request.params?.cityname ?? undefined + if (version === undefined || city === undefined) { + return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + } + try { + cityConfig = await getCityConfig(city, version) + activationTarget = await getActivationTarget(cityConfig) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const response = await createSingleValue(activationTarget) + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(response), { headers }) +} + +export default GetActivationTarget diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index 3638b30..af8c855 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -22,6 +22,17 @@ export async function getActivationBlock(cityConfig: CityConfig): Promise { + return fetchReadOnlyFunction({ + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-activation-target', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer + }, true) +} + export async function getRegisteredUsersNonce(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, diff --git a/static/openapi.yml b/static/openapi.yml index 424ce7f..95d2ba4 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -110,6 +110,23 @@ paths: /{version}/{cityname}/activation/get-activation-block: get: summary: Get Activation Block + description: Get the Stacks block height the token contract was activated at for a given CityCoin + tags: + - Activation + parameters: + - $ref: '#/components/parameters/version' + - $ref: '#/components/parameters/cityname' + responses: + "200": + $ref: '#/components/responses/200SuccessJsonString' + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + + /{version}/{cityname}/activation/get-activation-target: + get: + summary: Get Activation Target description: Get the Stacks block height the core contract was activated at for a given CityCoin tags: - Activation From fa2c8b9170c90da1891436887a67aa456bbc34df Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 12 May 2022 07:35:07 -0700 Subject: [PATCH 27/51] fix: refactored getPrices to use new errors This was needed to accept/workaround the STX hack, and shows the CoinGecko error directly versus leaving an undefined variable. (429 too many requests, etc) --- src/handler.ts | 2 +- src/handlers/tools/getprices.ts | 12 ++++++------ src/lib/prices.ts | 2 +- static/openapi.yml | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/handler.ts b/src/handler.ts index 273eaf9..36d56ec 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -84,7 +84,7 @@ router .get('/:version/:cityname/token/get-total-supply', GetTotalSupply) // Tools .get('/:version/:cityname/tools/get-city-configuration', GetCityConfiguration) - .get('/:version/:cityname/tools/prices/:currency?', GetPrices) + .get('/:version/:cityname/tools/get-prices/:currency?', GetPrices) .get('/:version/:cityname/tools/proof-of-hodl/:address', ProofOfHodl) .get('/:version/:cityname/tools/proof-of-hold/:address', ProofOfHodl) // Default route diff --git a/src/handlers/tools/getprices.ts b/src/handlers/tools/getprices.ts index 8eeffe3..baa0463 100644 --- a/src/handlers/tools/getprices.ts +++ b/src/handlers/tools/getprices.ts @@ -5,6 +5,7 @@ import { getCityConfig } from '../../types/cities' const GetPrices = async (request: IttyRequest): Promise => { let cityConfig let tokenName + let prices // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -26,12 +27,11 @@ const GetPrices = async (request: IttyRequest): Promise => { tokenName = cityConfig.token.tokenName } // get CoinGecko price - const prices = await getCGPrice(tokenName, currency) - .catch(() => { return { - "coingecko": 0, - }}) - if (prices.coingecko === 0 || prices.coingecko === undefined) { - return new Response(`CoinGecko price not found for city: ${city} and currency: ${currency}`, { status: 404 }) + try { + prices = await getCGPrice(tokenName, currency) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // return response const headers = { diff --git a/src/lib/prices.ts b/src/lib/prices.ts index 6a52457..bba8b4a 100644 --- a/src/lib/prices.ts +++ b/src/lib/prices.ts @@ -7,7 +7,7 @@ export async function getCGPrice(tokenName: string, currency?: string): Promise< const url = `https://api.coingecko.com/api/v3/simple/price?ids=${tokenId}&vs_currencies=${currency}` const response = await fetch(url) if (!response.ok) { - throw new Error(`${response.status} ${response.statusText}`) + throw new Error(`CoinGecko: ${response.status} ${response.statusText}`) } const json: CGSimplePrice = await response.json() const prices: Prices = { diff --git a/static/openapi.yml b/static/openapi.yml index 95d2ba4..c8d532b 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -845,7 +845,7 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /{version}/{cityname}/tools/prices/{currency}: + /{version}/{cityname}/tools/get-prices/{currency}: get: summary: Get Prices description: | From 078804845ee4ee80425ee4669ed17786655c7580 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 12 May 2022 07:57:07 -0700 Subject: [PATCH 28/51] fix: update getUserId to validate stacks address --- src/handlers/activation/getuserid.ts | 8 ++------ src/lib/citycoins.ts | 5 +++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/handlers/activation/getuserid.ts b/src/handlers/activation/getuserid.ts index 9aea668..b504e42 100644 --- a/src/handlers/activation/getuserid.ts +++ b/src/handlers/activation/getuserid.ts @@ -5,6 +5,7 @@ import { getCityConfig } from '../../types/cities' const GetUserId = async (request: IttyRequest): Promise => { let cityConfig + let userId // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -12,18 +13,13 @@ const GetUserId = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object try { cityConfig = await getCityConfig(city, version) + userId = await getUserId(cityConfig, user) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get user ID - const userId = await getUserId(cityConfig, user) - if (userId === null) { - return new Response(`User not found: ${user}`, { status: 404 }) - } // return response const response = await createSingleValue(userId) const headers = { diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index af8c855..6a7b62e 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -1,4 +1,5 @@ import { fetchReadOnlyFunction } from 'micro-stacks/api' +import { validateStacksAddress } from "micro-stacks/crypto" import { standardPrincipalCV, uintCV } from 'micro-stacks/clarity' import { CityConfig } from '../types/cities' import { MinerAtBlock, MiningStatsAtBlock } from '../types/mining' @@ -56,6 +57,10 @@ export async function getUser(cityConfig: CityConfig, id: string): Promise { + console.log(`getUserId: ${address}`) + if (!validateStacksAddress(address)) { + throw new Error(`Invalid Stacks address: ${address}`) + } return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, contractName: cityConfig.core.name, From a8127baefc283c737b1f27c38f2869d9177db4e0 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 12 May 2022 08:10:13 -0700 Subject: [PATCH 29/51] fix: validate stacks addresses when submitted --- src/handlers/miningclaims/canclaimminingreward.ts | 8 +++++++- src/handlers/miningclaims/isblockwinner.ts | 8 +++++++- src/handlers/token/getbalance.ts | 11 ++++------- src/handlers/tools/proofofhodl.ts | 7 ++++--- src/lib/citycoins.ts | 13 ++++++++++++- 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/handlers/miningclaims/canclaimminingreward.ts b/src/handlers/miningclaims/canclaimminingreward.ts index b748005..9d04dca 100644 --- a/src/handlers/miningclaims/canclaimminingreward.ts +++ b/src/handlers/miningclaims/canclaimminingreward.ts @@ -6,6 +6,7 @@ import { getCityConfig } from '../../types/cities' const CanClaimMiningReward = async (request: IttyRequest): Promise => { let cityConfig + let canClaimReward // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -33,7 +34,12 @@ const CanClaimMiningReward = async (request: IttyRequest): Promise => return new Response(`Invalid request, maturity window of 100 blocks has not passed`, { status: 400 }) } // check if user won at given block height and can claim reward - const canClaimReward = await canClaimMiningReward(cityConfig, user, blockHeight) + try { + canClaimReward = await canClaimMiningReward(cityConfig, user, blockHeight) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } // return response const response = await createSingleValue(canClaimReward) const headers = { diff --git a/src/handlers/miningclaims/isblockwinner.ts b/src/handlers/miningclaims/isblockwinner.ts index c058749..ad9a5d7 100644 --- a/src/handlers/miningclaims/isblockwinner.ts +++ b/src/handlers/miningclaims/isblockwinner.ts @@ -6,6 +6,7 @@ import { getCityConfig } from '../../types/cities' const IsBlockWinner = async (request: IttyRequest): Promise => { let cityConfig + let blockWinner // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -33,7 +34,12 @@ const IsBlockWinner = async (request: IttyRequest): Promise => { return new Response(`Invalid request, maturity window of 100 blocks has not passed`, { status: 400 }) } // check if user won at given block height - const blockWinner = await isBlockWinner(cityConfig, user, blockHeight) + try { + blockWinner = await isBlockWinner(cityConfig, user, blockHeight) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } // return response const response = await createSingleValue(blockWinner) const headers = { diff --git a/src/handlers/token/getbalance.ts b/src/handlers/token/getbalance.ts index 258cc14..2acb964 100644 --- a/src/handlers/token/getbalance.ts +++ b/src/handlers/token/getbalance.ts @@ -5,6 +5,7 @@ import { getCityConfig } from '../../types/cities' const GetBalance = async (request: IttyRequest): Promise => { let cityConfig + let balance // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -12,19 +13,15 @@ const GetBalance = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object try { + // get city configuration object cityConfig = await getCityConfig(city, version) + // get CityCoin balance + balance = await getBalance(cityConfig, user) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get CityCoin balance - const balance = await getBalance(cityConfig, user) - .catch(() => { return '' }) - if (balance === '') { - return new Response(`User not found: ${user}`, { status: 404 }) - } // return response const response = await createSingleValue(balance) const headers = { diff --git a/src/handlers/tools/proofofhodl.ts b/src/handlers/tools/proofofhodl.ts index cdd64b2..84fac56 100644 --- a/src/handlers/tools/proofofhodl.ts +++ b/src/handlers/tools/proofofhodl.ts @@ -5,6 +5,7 @@ import { getCityConfig } from '../../types/cities' const ProofOfHodl = async (request: IttyRequest): Promise => { let cityConfig + let hodl // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -12,15 +13,15 @@ const ProofOfHodl = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object try { + // get city configuration object cityConfig = await getCityConfig(city, version) + // check if user is hodling + hodl = await getProofOfHodl(cityConfig, user) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // check if user is hodling - const hodl = await getProofOfHodl(cityConfig, user) // return response const response = await createSingleValue(hodl) const headers = { diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index 6a7b62e..019c64a 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -57,7 +57,6 @@ export async function getUser(cityConfig: CityConfig, id: string): Promise { - console.log(`getUserId: ${address}`) if (!validateStacksAddress(address)) { throw new Error(`Invalid Stacks address: ${address}`) } @@ -135,6 +134,9 @@ export async function hasMinedAtBlock(cityConfig: CityConfig, blockHeight: strin ////////////////////////////////////////////////// export async function canClaimMiningReward(cityConfig: CityConfig, address: string, blockHeight: string): Promise { + if (!validateStacksAddress(address)) { + throw new Error(`Invalid Stacks address: ${address}`) + } return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, contractName: cityConfig.core.name, @@ -146,6 +148,9 @@ export async function canClaimMiningReward(cityConfig: CityConfig, address: stri } export async function isBlockWinner(cityConfig: CityConfig, address: string, blockHeight: string): Promise { + if (!validateStacksAddress(address)) { + throw new Error(`Invalid Stacks address: ${address}`) + } return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, contractName: cityConfig.core.name, @@ -301,6 +306,9 @@ export async function getDecimals(cityConfig: CityConfig): Promise { } export async function getBalance(cityConfig: CityConfig, address: string): Promise { + if (!validateStacksAddress(address)) { + throw new Error(`Invalid Stacks address: ${address}`) + } return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, contractName: cityConfig.token.name, @@ -338,6 +346,9 @@ export async function getTokenUri(cityConfig: CityConfig): Promise { ////////////////////////////////////////////////// export async function getProofOfHodl(cityConfig: CityConfig, address: string): Promise { + if (!validateStacksAddress(address)) { + throw new Error(`Invalid Stacks address: ${address}`) + } // check if the user has a balance // if so, return true const balance = await getBalance(cityConfig, address) From a2d0f39cdc5287b94fab7854115179e8dfdb2245 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Thu, 12 May 2022 11:20:34 -0700 Subject: [PATCH 30/51] fix: update all remaining error handling This consolidates a lot of the function calls into a single try/catch statement, where errors from upstream functions can be returned as a 404 Response. In addition each endpoint follows a simple three part structure: check inputs, get/calculate data, return response --- src/handlers/activation/getactivationblock.ts | 10 ++--- .../activation/getactivationtarget.ts | 7 ++-- .../activation/getregisteredusersnonce.ts | 11 ++--- src/handlers/activation/getuser.ts | 23 +++++----- src/handlers/activation/getuserid.ts | 10 +++-- src/handlers/mining/getblockwinnerid.ts | 32 +++++++------- .../mining/getlasthighvalueatblock.ts | 35 ++++++++-------- src/handlers/mining/getmineratblock.ts | 40 +++++++++--------- src/handlers/mining/getminingstatsatblock.ts | 33 +++++++-------- src/handlers/mining/hasminedatblock.ts | 39 ++++++++--------- .../miningclaims/canclaimminingreward.ts | 34 ++++++--------- src/handlers/miningclaims/isblockwinner.ts | 34 ++++++--------- .../getfirststacksblockinrewardcycle.ts | 34 +++++++-------- src/handlers/stacking/getrewardcycle.ts | 32 +++++++------- src/handlers/stacking/getstackeratcycle.ts | 42 +++++++++---------- .../stacking/getstackingstatsatcycle.ts | 35 ++++++++-------- .../stacking/stackingactiveatcycle.ts | 32 +++++++------- .../stackingclaims/getstackingreward.ts | 36 +++++++--------- src/handlers/stacks/getbnsname.ts | 15 ++++--- src/handlers/stacks/getdateatblock.ts | 18 ++++---- src/handlers/token/getbalance.ts | 9 ++-- src/handlers/token/getcoinbaseamount.ts | 35 ++++++++-------- src/handlers/token/getcoinbaseamounts.ts | 17 +++----- src/handlers/token/getcoinbasethresholds.ts | 17 ++++---- src/handlers/token/getdecimals.ts | 10 ++--- src/handlers/token/getname.ts | 10 ++--- src/handlers/token/getsymbol.ts | 10 ++--- src/handlers/token/gettokenuri.ts | 10 ++--- src/handlers/token/gettokenurijson.ts | 14 +++---- src/handlers/token/gettotalsupply.ts | 10 ++--- src/handlers/tools/getcityconfiguration.ts | 2 +- src/handlers/tools/getprices.ts | 28 +++++-------- src/handlers/tools/proofofhodl.ts | 1 + src/lib/citycoins.ts | 29 +++++++------ src/lib/stacks.ts | 9 +++- 35 files changed, 368 insertions(+), 395 deletions(-) diff --git a/src/handlers/activation/getactivationblock.ts b/src/handlers/activation/getactivationblock.ts index 1b8aef2..bce19a9 100644 --- a/src/handlers/activation/getactivationblock.ts +++ b/src/handlers/activation/getactivationblock.ts @@ -1,25 +1,25 @@ import { Request as IttyRequest } from 'itty-router' import { getActivationBlock } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetActivationBlock = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let activationBlock: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + activationBlock = await getActivationBlock(cityConfig) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get activation block - const activationBlock = await getActivationBlock(cityConfig) // return response const response = await createSingleValue(activationBlock) const headers = { diff --git a/src/handlers/activation/getactivationtarget.ts b/src/handlers/activation/getactivationtarget.ts index 65fb610..3c59849 100644 --- a/src/handlers/activation/getactivationtarget.ts +++ b/src/handlers/activation/getactivationtarget.ts @@ -1,17 +1,18 @@ import { Request as IttyRequest } from 'itty-router' import { getActivationTarget } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetActivationTarget = async (request: IttyRequest): Promise => { - let cityConfig - let activationTarget + let cityConfig: CityConfig + let activationTarget: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } + // get/calculate response try { cityConfig = await getCityConfig(city, version) activationTarget = await getActivationTarget(cityConfig) diff --git a/src/handlers/activation/getregisteredusersnonce.ts b/src/handlers/activation/getregisteredusersnonce.ts index ca99cdf..956f58b 100644 --- a/src/handlers/activation/getregisteredusersnonce.ts +++ b/src/handlers/activation/getregisteredusersnonce.ts @@ -1,25 +1,26 @@ import { Request as IttyRequest } from 'itty-router' import { getRegisteredUsersNonce } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetRegisteredUsersNonce = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let registeredUsers: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + // get registered users + registeredUsers = await getRegisteredUsersNonce(cityConfig) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get registered users - const registeredUsers = await getRegisteredUsersNonce(cityConfig) // return response const response = await createSingleValue(registeredUsers) const headers = { diff --git a/src/handlers/activation/getuser.ts b/src/handlers/activation/getuser.ts index 973d608..6bd897d 100644 --- a/src/handlers/activation/getuser.ts +++ b/src/handlers/activation/getuser.ts @@ -1,10 +1,11 @@ import { Request as IttyRequest } from 'itty-router' import { getUser } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetUser = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let userAddress: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -12,22 +13,20 @@ const GetUser = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (!isStringAllDigits(userId)) { + return new Response(`User ID not specified or invalid`, { status: 400 }) + } + userAddress = await getUser(cityConfig, userId) + if (userAddress === null) { + return new Response(`User ID not found: ${userId}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // verify user ID is valid - if (!isStringAllDigits(userId)) { - return new Response(`User ID not specified or invalid`, { status: 400 }) - } - // get user STX address - const userAddress = await getUser(cityConfig, userId) - if (userAddress === null) { - return new Response(`User ID not found: ${userId}`, { status: 404 }) - } // return response const response = await createSingleValue(userAddress) const headers = { diff --git a/src/handlers/activation/getuserid.ts b/src/handlers/activation/getuserid.ts index b504e42..1d2c58c 100644 --- a/src/handlers/activation/getuserid.ts +++ b/src/handlers/activation/getuserid.ts @@ -1,11 +1,11 @@ import { Request as IttyRequest } from 'itty-router' import { getUserId } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetUserId = async (request: IttyRequest): Promise => { - let cityConfig - let userId + let cityConfig: CityConfig + let userId: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,9 +13,13 @@ const GetUserId = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } + // get/calculate response try { cityConfig = await getCityConfig(city, version) userId = await getUserId(cityConfig, user) + if (userId === null) { + return new Response(`Address not found: ${user}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) diff --git a/src/handlers/mining/getblockwinnerid.ts b/src/handlers/mining/getblockwinnerid.ts index 901be0d..56bd74f 100644 --- a/src/handlers/mining/getblockwinnerid.ts +++ b/src/handlers/mining/getblockwinnerid.ts @@ -2,10 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { getBlockWinnerId } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetBlockWinnerId = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let winnerId: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,27 +14,24 @@ const GetBlockWinnerId = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } + winnerId = await getBlockWinnerId(cityConfig, blockHeight) + if (winnerId === null) { + return new Response(`Block winner ID not found at block height: ${blockHeight}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current block height if specified - if (blockHeight === 'current') { - blockHeight = await getStacksBlockHeight() - } else { - // verify block height is valid number - if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - } - // get the block winner ID - const winnerId = await getBlockWinnerId(cityConfig, blockHeight) - if (winnerId === null) { - return new Response(`Block winner ID not found at block height: ${blockHeight}`, { status: 404 }) - } // return response const response = await createSingleValue(winnerId) const headers = { diff --git a/src/handlers/mining/getlasthighvalueatblock.ts b/src/handlers/mining/getlasthighvalueatblock.ts index 4cba66b..e206e6c 100644 --- a/src/handlers/mining/getlasthighvalueatblock.ts +++ b/src/handlers/mining/getlasthighvalueatblock.ts @@ -2,10 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { getLastHighValueAtBlock } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetLastHighValueAtBlock = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let highValue: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,27 +14,27 @@ const GetLastHighValueAtBlock = async (request: IttyRequest): Promise if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + // get current block height if specified + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + // verify block height is valid number + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } + // get last high value at block height + highValue = await getLastHighValueAtBlock(cityConfig, blockHeight) + if (highValue === null) { + return new Response(`High value not found at block height: ${blockHeight}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current block height if specified - if (blockHeight === 'current') { - blockHeight = await getStacksBlockHeight() - } else { - // verify block height is valid number - if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - } - // get last high value at block height - const highValue = await getLastHighValueAtBlock(cityConfig, blockHeight) - if (highValue === null) { - return new Response(`High value not found at block height: ${blockHeight}`, { status: 404 }) - } // return response const response = await createSingleValue(highValue) const headers = { diff --git a/src/handlers/mining/getmineratblock.ts b/src/handlers/mining/getmineratblock.ts index 4cc1400..82670e7 100644 --- a/src/handlers/mining/getmineratblock.ts +++ b/src/handlers/mining/getmineratblock.ts @@ -2,10 +2,12 @@ import { Request as IttyRequest } from 'itty-router' import { getMinerAtBlock } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' +import { MinerAtBlock } from '../../types/mining' const GetMinerAtBlock = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let minerAtBlock: MinerAtBlock // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -14,31 +16,27 @@ const GetMinerAtBlock = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || blockHeight === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } + if (!isStringAllDigits(userId)) { + return new Response(`User ID not specified or invalid`, { status: 400 }) + } + minerAtBlock = await getMinerAtBlock(cityConfig, blockHeight, userId) + if (minerAtBlock === null) { + return new Response(`Miner ${userId} not found at block height: ${blockHeight}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current block height if specified - if (blockHeight === 'current') { - blockHeight = await getStacksBlockHeight() - } else { - // verify block height is valid number - if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - } - // verify user ID is valid - if (!isStringAllDigits(userId)) { - return new Response(`User ID not specified or invalid`, { status: 400 }) - } - // get miner info at block height - const minerAtBlock = await getMinerAtBlock(cityConfig, blockHeight, userId) - if (minerAtBlock === null) { - return new Response(`Miner ${userId} not found at block height: ${blockHeight}`, { status: 404 }) - } // return response const headers = { 'Access-Control-Allow-Origin': '*', diff --git a/src/handlers/mining/getminingstatsatblock.ts b/src/handlers/mining/getminingstatsatblock.ts index 5a23ff8..e1eb326 100644 --- a/src/handlers/mining/getminingstatsatblock.ts +++ b/src/handlers/mining/getminingstatsatblock.ts @@ -2,10 +2,12 @@ import { Request as IttyRequest } from 'itty-router' import { getMiningStatsAtBlock } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' +import { MiningStatsAtBlock } from '../../types/mining' const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let miningStatsAtBlock: MiningStatsAtBlock // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,27 +15,24 @@ const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } + miningStatsAtBlock = await getMiningStatsAtBlock(cityConfig, blockHeight) + if (miningStatsAtBlock === null) { + return new Response(`Mining stats not found at block height: ${blockHeight}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current block height if specified - if (blockHeight === 'current') { - blockHeight = await getStacksBlockHeight() - } else { - // verify block height is valid number - if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - } - // get mining stats at block height - const miningStatsAtBlock = await getMiningStatsAtBlock(cityConfig, blockHeight) - if (miningStatsAtBlock === null) { - return new Response(`Mining stats not found at block height: ${blockHeight}`, { status: 404 }) - } // return response const headers = { 'Access-Control-Allow-Origin': '*', diff --git a/src/handlers/mining/hasminedatblock.ts b/src/handlers/mining/hasminedatblock.ts index 5fccae0..c29a89d 100644 --- a/src/handlers/mining/hasminedatblock.ts +++ b/src/handlers/mining/hasminedatblock.ts @@ -2,10 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { hasMinedAtBlock } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const HasMinedAtBlock = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let minedAtBlock: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -14,31 +15,27 @@ const HasMinedAtBlock = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || blockHeight === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } + if (!isStringAllDigits(userId)) { + return new Response(`User ID not specified or invalid`, { status: 400 }) + } + minedAtBlock = await hasMinedAtBlock(cityConfig, blockHeight, userId) + if (minedAtBlock === null) { + return new Response(`Mining record for ${userId} not found at block height: ${blockHeight}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current block height if specified - if (blockHeight === 'current') { - blockHeight = await getStacksBlockHeight() - } else { - // verify block height is valid number - if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - } - // verify user ID is valid - if (!isStringAllDigits(userId)) { - return new Response(`User ID not specified or invalid`, { status: 400 }) - } - // check if user mined at block - const minedAtBlock = await hasMinedAtBlock(cityConfig, blockHeight, userId) - if (minedAtBlock === null) { - return new Response(`Mining record for ${userId} not found at block height: ${blockHeight}`, { status: 404 }) - } // return response const response = await createSingleValue(minedAtBlock) const headers = { diff --git a/src/handlers/miningclaims/canclaimminingreward.ts b/src/handlers/miningclaims/canclaimminingreward.ts index 9d04dca..06edfe1 100644 --- a/src/handlers/miningclaims/canclaimminingreward.ts +++ b/src/handlers/miningclaims/canclaimminingreward.ts @@ -2,11 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { canClaimMiningReward } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const CanClaimMiningReward = async (request: IttyRequest): Promise => { - let cityConfig - let canClaimReward + let cityConfig: CityConfig + let canClaimReward: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -15,26 +15,18 @@ const CanClaimMiningReward = async (request: IttyRequest): Promise => if (version === undefined || city === undefined || blockHeight === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) - } catch (err) { - if (err instanceof Error) return new Response(err.message, { status: 404 }) - return new Response(String(err), { status: 404 }) - } - // verify block height is valid value - if (!isStringAllDigits(blockHeight) && blockHeight !== 'current') { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - // get current block height - const currentBlockHeight = await getStacksBlockHeight() - // check that maturity window has passed - // or will default to false regardless of status - if (+blockHeight > +currentBlockHeight - 100 || blockHeight === 'current') { - return new Response(`Invalid request, maturity window of 100 blocks has not passed`, { status: 400 }) - } - // check if user won at given block height and can claim reward - try { + if (!isStringAllDigits(blockHeight) && blockHeight !== 'current') { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + const currentBlockHeight = await getStacksBlockHeight() + // check that maturity window has passed + // or will default to false regardless of status + if (+blockHeight > +currentBlockHeight - 100 || blockHeight === 'current') { + return new Response(`Invalid request, maturity window of 100 blocks has not passed`, { status: 400 }) + } canClaimReward = await canClaimMiningReward(cityConfig, user, blockHeight) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/miningclaims/isblockwinner.ts b/src/handlers/miningclaims/isblockwinner.ts index ad9a5d7..4caf18e 100644 --- a/src/handlers/miningclaims/isblockwinner.ts +++ b/src/handlers/miningclaims/isblockwinner.ts @@ -2,11 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { isBlockWinner } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const IsBlockWinner = async (request: IttyRequest): Promise => { - let cityConfig - let blockWinner + let cityConfig: CityConfig + let blockWinner: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -15,26 +15,18 @@ const IsBlockWinner = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || blockHeight === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) - } catch (err) { - if (err instanceof Error) return new Response(err.message, { status: 404 }) - return new Response(String(err), { status: 404 }) - } - // verify block height is valid value - if (!isStringAllDigits(blockHeight) && blockHeight !== 'current') { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - // get current block height - const currentBlockHeight = await getStacksBlockHeight() - // check that maturity window has passed - // or will default to false regardless of status - if (+blockHeight > +currentBlockHeight - 100 || blockHeight === 'current') { - return new Response(`Invalid request, maturity window of 100 blocks has not passed`, { status: 400 }) - } - // check if user won at given block height - try { + if (!isStringAllDigits(blockHeight) && blockHeight !== 'current') { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + const currentBlockHeight = await getStacksBlockHeight() + // check that maturity window has passed + // or will default to false regardless of status + if (+blockHeight > +currentBlockHeight - 100 || blockHeight === 'current') { + return new Response(`Invalid request, maturity window of 100 blocks has not passed`, { status: 400 }) + } blockWinner = await isBlockWinner(cityConfig, user, blockHeight) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/stacking/getfirststacksblockinrewardcycle.ts b/src/handlers/stacking/getfirststacksblockinrewardcycle.ts index 992aa25..eb193f1 100644 --- a/src/handlers/stacking/getfirststacksblockinrewardcycle.ts +++ b/src/handlers/stacking/getfirststacksblockinrewardcycle.ts @@ -2,10 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { getFirstStacksBlockInRewardCycle, getRewardCycle } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetFirstStacksBlockInRewardCycle = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let firstBlockInCycle: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,28 +14,25 @@ const GetFirstStacksBlockInRewardCycle = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let rewardCycle: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,27 +14,24 @@ const GetRewardCycle = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } + rewardCycle = await getRewardCycle(cityConfig, blockHeight) + if (rewardCycle === null) { + return new Response(`Reward cycle not found at block height: ${blockHeight}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current block height if specified - if (blockHeight === 'current') { - blockHeight = await getStacksBlockHeight() - } else { - // verify block height is valid number - if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - } - // get reward cycle at block height - const rewardCycle = await getRewardCycle(cityConfig, blockHeight) - if (rewardCycle === null) { - return new Response(`Reward cycle not found at block height: ${blockHeight}`, { status: 404 }) - } // return response const response = await createSingleValue(rewardCycle) const headers = { diff --git a/src/handlers/stacking/getstackeratcycle.ts b/src/handlers/stacking/getstackeratcycle.ts index 3cd3ddd..a350bd1 100644 --- a/src/handlers/stacking/getstackeratcycle.ts +++ b/src/handlers/stacking/getstackeratcycle.ts @@ -2,10 +2,12 @@ import { Request as IttyRequest } from 'itty-router' import { getRewardCycle, getStackerAtCycle } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' +import { StackerAtCycle } from '../../types/stacking' const GetStackerAtCycle = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let stackerAtCycle: StackerAtCycle // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -14,32 +16,28 @@ const GetStackerAtCycle = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || cycle === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (cycle === 'current') { + const blockHeight = await getStacksBlockHeight() + cycle = await getRewardCycle(cityConfig, blockHeight) + } else { + if (!isStringAllDigits(cycle)) { + return new Response(`Target cycle not specified or invalid`, { status: 400 }) + } + } + if (!isStringAllDigits(userId)) { + return new Response(`User ID not specified or invalid`, { status: 400 }) + } + stackerAtCycle = await getStackerAtCycle(cityConfig, cycle, userId) + if (stackerAtCycle === null) { + return new Response(`Stacker ${userId} not found at reward cycle: ${cycle}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current reward cycle if specified - if (cycle === 'current') { - const blockHeight = await getStacksBlockHeight() - cycle = await getRewardCycle(cityConfig, blockHeight) - } else { - // verify target cycle is valid - if (!isStringAllDigits(cycle)) { - return new Response(`Target cycle not specified or invalid`, { status: 400 }) - } - } - // verify user ID is valid - if (!isStringAllDigits(userId)) { - return new Response(`User ID not specified or invalid`, { status: 400 }) - } - // get stacker stats at cycle - const stackerAtCycle = await getStackerAtCycle(cityConfig, cycle, userId) - if (stackerAtCycle === null) { - return new Response(`Stacker ${userId} not found at reward cycle: ${cycle}`, { status: 404 }) - } // return response const headers = { 'Access-Control-Allow-Origin': '*', diff --git a/src/handlers/stacking/getstackingstatsatcycle.ts b/src/handlers/stacking/getstackingstatsatcycle.ts index 0cf84c2..b42028d 100644 --- a/src/handlers/stacking/getstackingstatsatcycle.ts +++ b/src/handlers/stacking/getstackingstatsatcycle.ts @@ -2,10 +2,12 @@ import { Request as IttyRequest } from 'itty-router' import { getRewardCycle, getStackingStatsAtCycle } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' +import { StackingStatsAtCycle } from '../../types/stacking' const GetStackingStatsAtCycle = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let stackingStatsAtCycle: StackingStatsAtCycle // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,28 +15,25 @@ const GetStackingStatsAtCycle = async (request: IttyRequest): Promise if (version === undefined || city === undefined || cycle === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (cycle === 'current') { + const blockHeight = await getStacksBlockHeight() + cycle = await getRewardCycle(cityConfig, blockHeight) + } else { + if (!isStringAllDigits(cycle)) { + return new Response(`Target cycle not specified or invalid`, { status: 400 }) + } + } + stackingStatsAtCycle = await getStackingStatsAtCycle(cityConfig, cycle) + if (stackingStatsAtCycle === null) { + return new Response(`Stacking stats not found at reward cycle: ${cycle}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current reward cycle if specified - if (cycle === 'current') { - const blockHeight = await getStacksBlockHeight() - cycle = await getRewardCycle(cityConfig, blockHeight) - } else { - // verify target cycle is valid - if (!isStringAllDigits(cycle)) { - return new Response(`Target cycle not specified or invalid`, { status: 400 }) - } - } - // get stacking stats at cycle - const stackingStatsAtCycle = await getStackingStatsAtCycle(cityConfig, cycle) - if (stackingStatsAtCycle === null) { - return new Response(`Stacking stats not found at reward cycle: ${cycle}`, { status: 404 }) - } // return response const headers = { 'Access-Control-Allow-Origin': '*', diff --git a/src/handlers/stacking/stackingactiveatcycle.ts b/src/handlers/stacking/stackingactiveatcycle.ts index 347e74b..fe8a3ab 100644 --- a/src/handlers/stacking/stackingactiveatcycle.ts +++ b/src/handlers/stacking/stackingactiveatcycle.ts @@ -2,10 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { getRewardCycle, stackingActiveAtCycle } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const StackingActiveAtCycle = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let activeAtCycle: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -16,25 +17,22 @@ const StackingActiveAtCycle = async (request: IttyRequest): Promise => // get city configuration object try { cityConfig = await getCityConfig(city, version) + if (cycle === 'current') { + const blockHeight = await getStacksBlockHeight() + cycle = await getRewardCycle(cityConfig, blockHeight) + } else { + if (!isStringAllDigits(cycle)) { + return new Response(`Target cycle not specified or invalid`, { status: 400 }) + } + } + activeAtCycle = await stackingActiveAtCycle(cityConfig, cycle) + if (activeAtCycle === null) { + return new Response(`Stacking info not found at cycle: ${cycle}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current reward cycle if specified - if (cycle === 'current') { - const blockHeight = await getStacksBlockHeight() - cycle = await getRewardCycle(cityConfig, blockHeight) - } else { - // verify target cycle is valid - if (!isStringAllDigits(cycle)) { - return new Response(`Target cycle not specified or invalid`, { status: 400 }) - } - } - // check if stacking is active at cycle - const activeAtCycle = await stackingActiveAtCycle(cityConfig, cycle) - if (activeAtCycle === null) { - return new Response(`Stacking info not found at cycle: ${cycle}`, { status: 404 }) - } // return response const response = await createSingleValue(activeAtCycle) const headers = { diff --git a/src/handlers/stackingclaims/getstackingreward.ts b/src/handlers/stackingclaims/getstackingreward.ts index 1f388d3..a5f81c0 100644 --- a/src/handlers/stackingclaims/getstackingreward.ts +++ b/src/handlers/stackingclaims/getstackingreward.ts @@ -2,10 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { getRewardCycle, getStackingReward } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetStackingReward = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let stackingReward: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -14,30 +15,25 @@ const GetStackingReward = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || cycle === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + if (!isStringAllDigits(cycle) && cycle !== 'current') { + return new Response(`Cycle ID not specified or invalid`, { status: 400 }) + } + const currentBlockHeight = await getStacksBlockHeight() + const currentCycle = await getRewardCycle(cityConfig, currentBlockHeight) + if ((+cycle >= +currentCycle || cycle === 'current') && !cityConfig.core.shutdown) { + return new Response(`Invalid request, cycle still active or in future`, { status: 400 }) + } + if (!isStringAllDigits(userId)) { + return new Response(`User ID not specified or invalid`, { status: 400 }) + } + stackingReward = await getStackingReward(cityConfig, cycle, userId) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // verify target cycle is a valid value - if (!isStringAllDigits(cycle) && cycle !== 'current') { - return new Response(`Cycle ID not specified or invalid`, { status: 400 }) - } - // get current cycle - const currentBlockHeight = await getStacksBlockHeight() - const currentCycle = await getRewardCycle(cityConfig, currentBlockHeight) - // check that cycle is in the past - if (+cycle >= +currentCycle || cycle === 'current') { - return new Response(`Invalid request, cycle still active or in future`, { status: 400 }) - } - // verify user ID is valid - if (!isStringAllDigits(userId)) { - return new Response(`User ID not specified or invalid`, { status: 400 }) - } - // get stacking reward for user at cycle - const stackingReward = await getStackingReward(cityConfig, cycle, userId) // return response const response = await createSingleValue(stackingReward) const headers = { diff --git a/src/handlers/stacks/getbnsname.ts b/src/handlers/stacks/getbnsname.ts index 0508a2a..2cea07d 100644 --- a/src/handlers/stacks/getbnsname.ts +++ b/src/handlers/stacks/getbnsname.ts @@ -3,16 +3,21 @@ import { createSingleValue } from '../../lib/common' import { getBnsName } from '../../lib/stacks' const GetBnsName = async (request: IttyRequest): Promise => { + let bnsNames: string // check inputs const address = request.params?.address ?? undefined if (address === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get Stacks block height from API - const bnsNames = await getBnsName(address) - .catch(() => { return '' }) - if (bnsNames === '' || bnsNames === 'undefined') { - return new Response(`BNS name(s) not found for address: ${address}`, { status: 404 }) + // get/calculate response + try { + bnsNames = await getBnsName(address) + if (bnsNames === 'undefined') { + return new Response(`BNS name(s) not found for address: ${address}`, { status: 404 }) + } + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // return response const response = await createSingleValue(bnsNames) diff --git a/src/handlers/stacks/getdateatblock.ts b/src/handlers/stacks/getdateatblock.ts index 9db9e7c..e3aaf61 100644 --- a/src/handlers/stacks/getdateatblock.ts +++ b/src/handlers/stacks/getdateatblock.ts @@ -9,17 +9,15 @@ const GetDateAtBlock = async (request: IttyRequest): Promise => { if (blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get current block height if specified - if (blockHeight === 'current') { - blockHeight = await getStacksBlockHeight() - } else { - // verify block height is valid number - if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - } - // get date at block height + // get/calculate response try { + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } dateAtBlock = await getDateAtBlock(blockHeight) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/token/getbalance.ts b/src/handlers/token/getbalance.ts index 2acb964..f9bb1e9 100644 --- a/src/handlers/token/getbalance.ts +++ b/src/handlers/token/getbalance.ts @@ -1,11 +1,11 @@ import { Request as IttyRequest } from 'itty-router' import { getBalance } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetBalance = async (request: IttyRequest): Promise => { - let cityConfig - let balance + let cityConfig: CityConfig + let balance: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,10 +13,9 @@ const GetBalance = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } + // get/calculate response try { - // get city configuration object cityConfig = await getCityConfig(city, version) - // get CityCoin balance balance = await getBalance(cityConfig, user) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/token/getcoinbaseamount.ts b/src/handlers/token/getcoinbaseamount.ts index 8390ba9..1e627fa 100644 --- a/src/handlers/token/getcoinbaseamount.ts +++ b/src/handlers/token/getcoinbaseamount.ts @@ -2,10 +2,11 @@ import { Request as IttyRequest } from 'itty-router' import { getCoinbaseAmount } from '../../lib/citycoins' import { createSingleValue, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetCoinbaseAmount = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let coinbaseAmount: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,27 +14,27 @@ const GetCoinbaseAmount = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + // get current block height if specified + if (blockHeight === 'current') { + blockHeight = await getStacksBlockHeight() + } else { + // verify block height is valid number + if (!isStringAllDigits(blockHeight)) { + return new Response(`Block height not specified or invalid`, { status: 400 }) + } + } + // get coinbase thresholds + coinbaseAmount = await getCoinbaseAmount(cityConfig, blockHeight) + if (coinbaseAmount === null) { + return new Response(`Coinbase amount not found at block height: ${blockHeight}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get current block height if specified - if (blockHeight === 'current') { - blockHeight = await getStacksBlockHeight() - } else { - // verify block height is valid number - if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) - } - } - // get coinbase thresholds - const coinbaseAmount: string = await getCoinbaseAmount(cityConfig, blockHeight) - if (coinbaseAmount === null) { - return new Response(`Coinbase amount not found at block height: ${blockHeight}`, { status: 404 }) - } // return response const response = await createSingleValue(coinbaseAmount) const headers = { diff --git a/src/handlers/token/getcoinbaseamounts.ts b/src/handlers/token/getcoinbaseamounts.ts index f8b68a8..c2cf5ae 100644 --- a/src/handlers/token/getcoinbaseamounts.ts +++ b/src/handlers/token/getcoinbaseamounts.ts @@ -1,30 +1,25 @@ import { Request as IttyRequest } from 'itty-router' import { getCoinbaseAmounts } from '../../lib/citycoins' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' +import { CoinbaseAmounts } from '../../types/token' const GetCoinbaseAmounts = async (request: IttyRequest): Promise => { - let cityConfig - let coinbaseAmounts + let cityConfig: CityConfig + let coinbaseAmounts: CoinbaseAmounts // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + coinbaseAmounts = await getCoinbaseAmounts(cityConfig) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get coinbase amounts - try { - coinbaseAmounts = await getCoinbaseAmounts(cityConfig) - } catch (err) { - if (err instanceof Error) return new Response(err.message, { status: 400 }) - return new Response(String(err), { status: 400 }) - } // return response const headers = { 'Access-Control-Allow-Origin': '*', diff --git a/src/handlers/token/getcoinbasethresholds.ts b/src/handlers/token/getcoinbasethresholds.ts index f7a020a..4ae5be1 100644 --- a/src/handlers/token/getcoinbasethresholds.ts +++ b/src/handlers/token/getcoinbasethresholds.ts @@ -1,27 +1,28 @@ import { Request as IttyRequest } from 'itty-router' import { getCoinbaseThresholds } from '../../lib/citycoins' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' +import { CoinbaseThresholds } from '../../types/token' const GetCoinbaseThresholds = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let coinbaseThresholds: CoinbaseThresholds // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + coinbaseThresholds = await getCoinbaseThresholds(cityConfig) + if (coinbaseThresholds === null) { + return new Response(`Coinbase thresholds not found for city: ${city}`, { status: 404 }) + } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get coinbase thresholds - const coinbaseThresholds = await getCoinbaseThresholds(cityConfig) - if (coinbaseThresholds === null) { - return new Response(`Coinbase thresholds not found for city: ${city}`, { status: 404 }) - } // return response const headers = { 'Access-Control-Allow-Origin': '*', diff --git a/src/handlers/token/getdecimals.ts b/src/handlers/token/getdecimals.ts index b283020..b34261b 100644 --- a/src/handlers/token/getdecimals.ts +++ b/src/handlers/token/getdecimals.ts @@ -1,25 +1,25 @@ import { Request as IttyRequest } from 'itty-router' import { getDecimals } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetDecimals = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let decimals: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + decimals = await getDecimals(cityConfig) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get SIP-010 decimals - const decimals = await getDecimals(cityConfig) // return response const response = await createSingleValue(decimals) const headers = { diff --git a/src/handlers/token/getname.ts b/src/handlers/token/getname.ts index 4dbb990..84d3c09 100644 --- a/src/handlers/token/getname.ts +++ b/src/handlers/token/getname.ts @@ -1,25 +1,25 @@ import { Request as IttyRequest } from 'itty-router' import { getName } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetName = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let name: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + name = await getName(cityConfig) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get SIP-010 name - const name = await getName(cityConfig) // return response const response = await createSingleValue(name) const headers = { diff --git a/src/handlers/token/getsymbol.ts b/src/handlers/token/getsymbol.ts index b3102ef..a37a545 100644 --- a/src/handlers/token/getsymbol.ts +++ b/src/handlers/token/getsymbol.ts @@ -1,25 +1,25 @@ import { Request as IttyRequest } from 'itty-router' import { getSymbol } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetSymbol = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let symbol: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + symbol = await getSymbol(cityConfig) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get SIP-010 symbol - const symbol = await getSymbol(cityConfig) // return response const response = await createSingleValue(symbol) const headers = { diff --git a/src/handlers/token/gettokenuri.ts b/src/handlers/token/gettokenuri.ts index 7cd6598..cb73947 100644 --- a/src/handlers/token/gettokenuri.ts +++ b/src/handlers/token/gettokenuri.ts @@ -1,25 +1,25 @@ import { Request as IttyRequest } from 'itty-router' import { getTokenUri } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetTokenUri = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let tokenUri: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + tokenUri = await getTokenUri(cityConfig) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get SIP-010 token uri - const tokenUri = await getTokenUri(cityConfig) // return response const response = await createSingleValue(tokenUri) const headers = { diff --git a/src/handlers/token/gettokenurijson.ts b/src/handlers/token/gettokenurijson.ts index c7a470e..6030974 100644 --- a/src/handlers/token/gettokenurijson.ts +++ b/src/handlers/token/gettokenurijson.ts @@ -1,26 +1,26 @@ import { Request as IttyRequest } from 'itty-router' import { getTokenUri } from '../../lib/citycoins' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetTokenUriJson = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let tokenUri: string + let tokenUriJson: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + tokenUri = await getTokenUri(cityConfig) + tokenUriJson = await fetch(tokenUri).then(res => res.json()) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get SIP-010 token uri URL - const tokenUri = await getTokenUri(cityConfig) - // get JSON from URL - const tokenUriJson = await fetch(tokenUri).then(res => res.json()) // return response const headers = { 'Access-Control-Allow-Origin': '*', diff --git a/src/handlers/token/gettotalsupply.ts b/src/handlers/token/gettotalsupply.ts index 0aa6b79..45ed0db 100644 --- a/src/handlers/token/gettotalsupply.ts +++ b/src/handlers/token/gettotalsupply.ts @@ -1,25 +1,25 @@ import { Request as IttyRequest } from 'itty-router' import { getTotalSupply } from '../../lib/citycoins' import { createSingleValue } from '../../lib/common' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' const GetTotalSupply = async (request: IttyRequest): Promise => { - let cityConfig + let cityConfig: CityConfig + let totalSupply: string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) + totalSupply = await getTotalSupply(cityConfig) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } - // get total supply - const totalSupply = await getTotalSupply(cityConfig) // return response const response = await createSingleValue(totalSupply) const headers = { diff --git a/src/handlers/tools/getcityconfiguration.ts b/src/handlers/tools/getcityconfiguration.ts index a03edd7..ef2210a 100644 --- a/src/handlers/tools/getcityconfiguration.ts +++ b/src/handlers/tools/getcityconfiguration.ts @@ -9,7 +9,7 @@ const GetCityConfiguration = async (request: IttyRequest): Promise => if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // get city configuration object + // get/calculate response try { cityConfig = await getCityConfig(city, version) } catch (err) { diff --git a/src/handlers/tools/getprices.ts b/src/handlers/tools/getprices.ts index baa0463..d0b3a7f 100644 --- a/src/handlers/tools/getprices.ts +++ b/src/handlers/tools/getprices.ts @@ -1,11 +1,12 @@ import { Request as IttyRequest } from 'itty-router' import { getCGPrice } from '../../lib/prices' -import { getCityConfig } from '../../types/cities' +import { CityConfig, getCityConfig } from '../../types/cities' +import { Prices } from '../../types/common' const GetPrices = async (request: IttyRequest): Promise => { - let cityConfig - let tokenName - let prices + let cityConfig: CityConfig + let tokenName: string + let prices: Prices // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined @@ -13,21 +14,14 @@ const GetPrices = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } - // hack to allow for stx - if (city === 'stx') { - tokenName = 'blockstack' - } else { - // get city configuration object - try { + // get/calculate response + try { + if (city === 'stx') { + tokenName = 'blockstack' + } else { cityConfig = await getCityConfig(city, version) - } catch (err) { - if (err instanceof Error) return new Response(err.message, { status: 404 }) - return new Response(String(err), { status: 404 }) + tokenName = cityConfig.token.tokenName } - tokenName = cityConfig.token.tokenName - } - // get CoinGecko price - try { prices = await getCGPrice(tokenName, currency) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/tools/proofofhodl.ts b/src/handlers/tools/proofofhodl.ts index 84fac56..6879647 100644 --- a/src/handlers/tools/proofofhodl.ts +++ b/src/handlers/tools/proofofhodl.ts @@ -13,6 +13,7 @@ const ProofOfHodl = async (request: IttyRequest): Promise => { if (version === undefined || city === undefined || user === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } + // get/calculate response try { // get city configuration object cityConfig = await getCityConfig(city, version) diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index 019c64a..46daf08 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -346,24 +346,27 @@ export async function getTokenUri(cityConfig: CityConfig): Promise { ////////////////////////////////////////////////// export async function getProofOfHodl(cityConfig: CityConfig, address: string): Promise { + let userId: string + let balance: string + let stacker: StackerAtCycle if (!validateStacksAddress(address)) { throw new Error(`Invalid Stacks address: ${address}`) } - // check if the user has a balance - // if so, return true - const balance = await getBalance(cityConfig, address) - .catch(() => { return '' }) - if (+balance > 0) { - return true - } else { - // check if the user is stacking in the current cycle - // if so, return true - const userId = await getUserId(cityConfig, address) - .catch(() => { return '' }) - if (userId === null || userId === '') { return false } + try { + // check if user has a balance + userId = await getUserId(cityConfig, address) + if (userId === null) { + throw new Error(`Address not found: ${address}`) + } + balance = await getBalance(cityConfig, address) + if (+balance > 0) return true const currentBlock = await getStacksBlockHeight() const currentCycle = await getRewardCycle(cityConfig, currentBlock) - const stacker = await getStackerAtCycle(cityConfig, currentCycle, userId) + // check if user is stacking at current cycle + stacker = await getStackerAtCycle(cityConfig, currentCycle, userId) if (stacker === null) { return false } else { return true } + } catch (err) { + if (err instanceof Error) throw new Error(err.message) + throw new Error(String(err)) } } diff --git a/src/lib/stacks.ts b/src/lib/stacks.ts index b1c71ae..3222abc 100644 --- a/src/lib/stacks.ts +++ b/src/lib/stacks.ts @@ -1,4 +1,5 @@ import { STACKS_NETWORK } from './common' +import { validateStacksAddress } from "micro-stacks/crypto" export async function getStacksBlockHeight(): Promise { const url = `${STACKS_NETWORK.getCoreApiUrl()}/v2/info` @@ -13,6 +14,9 @@ export async function getStacksBlockHeight(): Promise { } export async function getStxBalance(address: string): Promise { + if (!validateStacksAddress(address)) { + throw new Error(`Invalid Stacks address: ${address}`) + } const url = `${STACKS_NETWORK.getCoreApiUrl()}/extended/v1/address/${address}/stx` return fetch(url) .then(response => { @@ -25,6 +29,9 @@ export async function getStxBalance(address: string): Promise { } export async function getBnsName(address: string): Promise { + if (!validateStacksAddress(address)) { + throw new Error(`Invalid Stacks address: ${address}`) + } const url = `${STACKS_NETWORK.getCoreApiUrl()}/v1/addresses/stacks/${address}` return fetch(url) .then(response => { @@ -46,4 +53,4 @@ export async function getDateAtBlock(blockHeight: string): Promise { return response.json() as Promise<{ burn_block_time_iso: string }> }) .then(data => { return data.burn_block_time_iso }) -} \ No newline at end of file +} From 3a632ae4a974f56c277c9f24f6c3e1d9bb863058 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 13 May 2022 08:52:05 -0700 Subject: [PATCH 31/51] feat: add /tools/get-full-city-configuration endpoint Also generalizes the cityConfig object structure in a component schema for the OpenAPI spec fixes #64 --- src/handler.ts | 2 + .../tools/getfullcityconfiguration.ts | 26 +++ src/types/cities.ts | 16 +- static/openapi.yml | 175 +++++++++++++----- 4 files changed, 168 insertions(+), 51 deletions(-) create mode 100644 src/handlers/tools/getfullcityconfiguration.ts diff --git a/src/handler.ts b/src/handler.ts index 36d56ec..a58d4cf 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -34,6 +34,7 @@ import GetSymbol from './handlers/token/getsymbol' import GetTokenUri from './handlers/token/gettokenuri' import GetTokenUriJson from './handlers/token/gettokenurijson' import GetCityConfiguration from './handlers/tools/getcityconfiguration' +import GetFullCityConfiguration from './handlers/tools/getfullcityconfiguration' import GetPrices from './handlers/tools/getprices' import ProofOfHodl from './handlers/tools/proofofhodl' @@ -84,6 +85,7 @@ router .get('/:version/:cityname/token/get-total-supply', GetTotalSupply) // Tools .get('/:version/:cityname/tools/get-city-configuration', GetCityConfiguration) + .get('/:cityname/tools/get-full-city-configuration', GetFullCityConfiguration) .get('/:version/:cityname/tools/get-prices/:currency?', GetPrices) .get('/:version/:cityname/tools/proof-of-hodl/:address', ProofOfHodl) .get('/:version/:cityname/tools/proof-of-hold/:address', ProofOfHodl) diff --git a/src/handlers/tools/getfullcityconfiguration.ts b/src/handlers/tools/getfullcityconfiguration.ts new file mode 100644 index 0000000..8a27a0e --- /dev/null +++ b/src/handlers/tools/getfullcityconfiguration.ts @@ -0,0 +1,26 @@ +import { Request as IttyRequest } from 'itty-router' +import { CityVersions, getFullCityConfig } from '../../types/cities' + +const GetFullCityConfiguration = async (request: IttyRequest): Promise => { + let cityConfig: CityVersions + // check inputs + const city = request.params?.cityname ?? undefined + if (city === undefined) { + return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + } + // get/calculate response + try { + cityConfig = await getFullCityConfig(city) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(cityConfig), { headers }) +} + +export default GetFullCityConfiguration diff --git a/src/types/cities.ts b/src/types/cities.ts index 719c99e..15e0ca2 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -159,11 +159,21 @@ export async function getCityConfig(city: string, version: string): Promise { + switch (city.toLowerCase()) { + case "mia": + return miaConfig + case "nyc": + return nycConfig default: - throw new Error(`Invalid city name or version ${city} ${version}`) + throw new Error(`Invalid city name ${city}`) } } diff --git a/static/openapi.yml b/static/openapi.yml index c8d532b..6533fa3 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -767,54 +767,8 @@ paths: application/json: schema: type: object - properties: - cityName: - type: string - deployed: - type: boolean - deployer: - type: string - auth: - type: object - properties: - name: - type: string - initialized: - type: boolean - core: - type: object - properties: - name: - type: string - activated: - type: boolean - startBlock: - type: number - shutdown: - type: boolean - shutdownBlock: - type: number - token: - type: object - properties: - name: - type: string - activated: - type: boolean - activationBlock: - type: number - displayName: - type: string - tokenName: - type: string - symbol: - type: string - decimals: - type: number - logo: - type: string - uri: - type: string + items: + $ref: '#/components/schemas/cityconfig' examples: "0": value: @@ -845,6 +799,79 @@ paths: "404": $ref: '#/components/responses/404NotFound' + /{cityname}/tools/get-full-city-configuration: + get: + summary: Get Full City Configuration + description: Gets the full city configuration file including all versions depending on the select city name. + tags: + - Tools + parameters: + - $ref: '#/components/parameters/cityname' + responses: + "200": + description: Success + content: + application/json: + schema: + type: object + properties: + version: + type: string + additionalProperties: + $ref: '#/components/schemas/cityconfig' + examples: + "0": + value: + "v1": + cityName: "Miami" + deployed: true + deployer: "SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27" + auth: + name: "miamicoin-auth" + initialized: true + core: + name: "miamicoin-core-v1" + activated: false + startBlock: 24497 + shutdown: true + shutdownBlock: 58917 + token: + name: "miamicoin-token" + activated: true + activationBlock: 24497 + displayName: "MiamiCoin" + tokenName: "miamicoin" + symbol: "MIA" + decimals: 0 + logo: "https://cdn.citycoins.co/logos/miamicoin.png" + uri: "https://cdn.citycoins.co/metadata/miamicoin.json" + "v2": + cityName: "Miami" + deployed: true + deployer: "SP1H1733V5MZ3SZ9XRW9FKYGEZT0JDGEB8Y634C7R" + auth: + name: "miamicoin-auth-v2" + initialized: true + core: + name: "miamicoin-core-v2" + activated: false + startBlock: 58921 + shutdown: false + token: + name: "miamicoin-token-v2" + activated: true + activationBlock: 24497 + displayName: "MiamiCoin" + tokenName: "miamicoin" + symbol: "MIA" + decimals: 6 + logo: "https://cdn.citycoins.co/logos/miamicoin.png" + uri: "https://cdn.citycoins.co/metadata/miamicoin.json" + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/tools/get-prices/{currency}: get: summary: Get Prices @@ -951,6 +978,58 @@ components: schema: type: string description: The major CityCoins contract version, e.g. v1, v2 + # Reusable objects + schemas: + cityconfig: + type: object + properties: + cityName: + type: string + deployed: + type: boolean + deployer: + type: string + auth: + type: object + properties: + name: + type: string + initialized: + type: boolean + core: + type: object + properties: + name: + type: string + activated: + type: boolean + startBlock: + type: number + shutdown: + type: boolean + shutdownBlock: + type: number + token: + type: object + properties: + name: + type: string + activated: + type: boolean + activationBlock: + type: number + displayName: + type: string + tokenName: + type: string + symbol: + type: string + decimals: + type: number + logo: + type: string + uri: + type: string #------------------------------- # Reusable responses #------------------------------- From c6148240725a476aaa54d4abfac22d4b8b1a601f Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 13 May 2022 09:05:04 -0700 Subject: [PATCH 32/51] feat: add /activation/get-city-wallet endpoint This also adds the relevant getter in the CityCoins library fixes #65 --- src/handler.ts | 2 ++ src/handlers/activation/getcitywallet.ts | 32 ++++++++++++++++++++++++ src/lib/citycoins.ts | 11 ++++++++ static/openapi.yml | 17 +++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 src/handlers/activation/getcitywallet.ts diff --git a/src/handler.ts b/src/handler.ts index a58d4cf..f38849c 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -7,6 +7,7 @@ import GetStxBalance from './handlers/stacks/getstxbalance' import GetDateAtBlock from './handlers/stacks/getdateatblock' import GetActivationBlock from './handlers/activation/getactivationblock' import GetActivationTarget from './handlers/activation/getactivationtarget' +import GetCityWallet from './handlers/activation/getcitywallet' import GetRegisteredUsersNonce from './handlers/activation/getregisteredusersnonce' import GetUser from './handlers/activation/getuser' import GetUserId from './handlers/activation/getuserid' @@ -52,6 +53,7 @@ router // Activation functions .get('/:version/:cityname/activation/get-activation-block', GetActivationBlock) .get('/:version/:cityname/activation/get-activation-target', GetActivationTarget) + .get('/:version/:cityname/activation/get-city-wallet', GetCityWallet) .get('/:version/:cityname/activation/get-registered-users-nonce', GetRegisteredUsersNonce) .get('/:version/:cityname/activation/get-user/:userid', GetUser) .get('/:version/:cityname/activation/get-user-id/:address', GetUserId) diff --git a/src/handlers/activation/getcitywallet.ts b/src/handlers/activation/getcitywallet.ts new file mode 100644 index 0000000..7c12569 --- /dev/null +++ b/src/handlers/activation/getcitywallet.ts @@ -0,0 +1,32 @@ +import { Request as IttyRequest } from 'itty-router' +import { getCityWallet } from '../../lib/citycoins' +import { createSingleValue } from '../../lib/common' +import { CityConfig, getCityConfig } from '../../types/cities' + +const GetCityWallet = async (request: IttyRequest): Promise => { + let cityConfig: CityConfig + let cityWallet: string + // check inputs + const version = request.params?.version ?? undefined + const city = request.params?.cityname ?? undefined + if (version === undefined || city === undefined) { + return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + } + // get/calculate response + try { + cityConfig = await getCityConfig(city, version) + cityWallet = await getCityWallet(cityConfig) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const response = await createSingleValue(cityWallet) + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(response), { headers }) +} + +export default GetCityWallet diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index 46daf08..47708f7 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -34,6 +34,17 @@ export async function getActivationTarget(cityConfig: CityConfig): Promise { + return fetchReadOnlyFunction({ + contractAddress: cityConfig.deployer, + contractName: cityConfig.auth.name, + functionName: 'get-city-wallet', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer + }, true) +} + export async function getRegisteredUsersNonce(cityConfig: CityConfig): Promise { return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, diff --git a/static/openapi.yml b/static/openapi.yml index 6533fa3..7e517e5 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -141,6 +141,23 @@ paths: "404": $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/activation/get-city-wallet: + get: + summary: Get City Wallet Address + description: Get the city wallet address set in the auth contract for a given CityCoin and version. + tags: + - Activation + parameters: + - $ref: '#/components/parameters/version' + - $ref: '#/components/parameters/cityname' + responses: + "200": + $ref: '#/components/responses/200SuccessJsonString' + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/activation/get-registered-users-nonce: get: summary: Get Registered Users From 80470b823c34b68dad459f10af00489537b540f7 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 13 May 2022 09:36:14 -0700 Subject: [PATCH 33/51] fix: refactor handlers into single export file The import list in handler.ts was getting really long, this creates an export file for each folder of handlers in the root of the handlers directory, and the handler.ts file imports everything from those top-level exports. --- README.md | 4 +- src/handler.ts | 121 +++++++++++++-------------------- src/handlers/activation.ts | 8 +++ src/handlers/mining.ts | 7 ++ src/handlers/miningclaims.ts | 4 ++ src/handlers/stacking.ts | 7 ++ src/handlers/stackingclaims.ts | 3 + src/handlers/stacks.ts | 6 ++ src/handlers/token.ts | 12 ++++ src/handlers/tools.ts | 6 ++ 10 files changed, 102 insertions(+), 76 deletions(-) create mode 100644 src/handlers/activation.ts create mode 100644 src/handlers/mining.ts create mode 100644 src/handlers/miningclaims.ts create mode 100644 src/handlers/stacking.ts create mode 100644 src/handlers/stackingclaims.ts create mode 100644 src/handlers/stacks.ts create mode 100644 src/handlers/token.ts create mode 100644 src/handlers/tools.ts diff --git a/README.md b/README.md index a55e04a..45c7810 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,8 @@ The API is divided into three main sections: - returns successful response - (optional) add new getters in `/lib` - (optional) add new types in `/types` +- add new handler file to top-level export in `/src/handlers` + - e.g. `export { default as GetDateAtBlock } from './stacks/getdateatblock'` - add new handler file and route to `/src/handler.ts` - if querying city data, starts with: `:version/:cityname/` - order of operations: `:blockheight > :cycleid > :userid > :address` @@ -56,7 +58,7 @@ The API is divided into three main sections: - routes get added to the corresponding section - routes get tagged by their category (matches directory) - routes always use ref for parameters and responses - - reusable parameters and responses are at the bottom of the file + - reusable parameters, schemas and responses are at the bottom of the file **Special case:** if the response is a custom type, e.g. `MiningStatsAtBlock`, an example for the responses must be added manually to `/static/openapi.yml` diff --git a/src/handler.ts b/src/handler.ts index f38849c..8353774 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -1,43 +1,14 @@ import { Router } from 'itty-router' import Landing from './handlers/landing' import Documentation from './handlers/documentation' -import GetStacksBlockHeight from './handlers/stacks/getstacksblockheight' -import GetBnsName from './handlers/stacks/getbnsname' -import GetStxBalance from './handlers/stacks/getstxbalance' -import GetDateAtBlock from './handlers/stacks/getdateatblock' -import GetActivationBlock from './handlers/activation/getactivationblock' -import GetActivationTarget from './handlers/activation/getactivationtarget' -import GetCityWallet from './handlers/activation/getcitywallet' -import GetRegisteredUsersNonce from './handlers/activation/getregisteredusersnonce' -import GetUser from './handlers/activation/getuser' -import GetUserId from './handlers/activation/getuserid' -import GetBlockWinnerId from './handlers/mining/getblockwinnerid' -import GetLastHighValueAtBlock from './handlers/mining/getlasthighvalueatblock' -import GetMinerAtBlock from './handlers/mining/getmineratblock' -import GetMiningStatsAtBlock from './handlers/mining/getminingstatsatblock' -import HasMinedAtBlock from './handlers/mining/hasminedatblock' -import CanClaimMiningReward from './handlers/miningclaims/canclaimminingreward' -import IsBlockWinner from './handlers/miningclaims/isblockwinner' -import GetFirstStacksBlockInRewardCycle from './handlers/stacking/getfirststacksblockinrewardcycle' -import GetRewardCycle from './handlers/stacking/getrewardcycle' -import GetStackerAtCycle from './handlers/stacking/getstackeratcycle' -import GetStackingStatsAtCycle from './handlers/stacking/getstackingstatsatcycle' -import StackingActiveAtCycle from './handlers/stacking/stackingactiveatcycle' -import GetStackingReward from './handlers/stackingclaims/getstackingreward' -import GetBalance from './handlers/token/getbalance' -import GetCoinbaseAmount from './handlers/token/getcoinbaseamount' -import GetCoinbaseAmounts from './handlers/token/getcoinbaseamounts' -import GetCoinbaseThresholds from './handlers/token/getcoinbasethresholds' -import GetTotalSupply from './handlers/token/gettotalsupply' -import GetDecimals from './handlers/token/getdecimals' -import GetName from './handlers/token/getname' -import GetSymbol from './handlers/token/getsymbol' -import GetTokenUri from './handlers/token/gettokenuri' -import GetTokenUriJson from './handlers/token/gettokenurijson' -import GetCityConfiguration from './handlers/tools/getcityconfiguration' -import GetFullCityConfiguration from './handlers/tools/getfullcityconfiguration' -import GetPrices from './handlers/tools/getprices' -import ProofOfHodl from './handlers/tools/proofofhodl' +import * as Stacks from './handlers/stacks' +import * as Activation from './handlers/activation' +import * as Mining from './handlers/mining' +import * as MiningClaims from './handlers/miningclaims' +import * as Stacking from './handlers/stacking' +import * as StackingClaims from './handlers/stackingclaims' +import * as Token from './handlers/token' +import * as Tools from './handlers/tools' const router = Router() @@ -46,51 +17,51 @@ router .get('/', Landing) .get('/docs', Documentation) // Stacks API wrappers - .get('/stacks/get-block-height', GetStacksBlockHeight) - .get('/stacks/get-bns-name/:address', GetBnsName) - .get('/stacks/get-stx-balance/:address', GetStxBalance) - .get('/stacks/get-date-at-block/:blockHeight', GetDateAtBlock) + .get('/stacks/get-block-height', Stacks.GetStacksBlockHeight) + .get('/stacks/get-bns-name/:address', Stacks.GetBnsName) + .get('/stacks/get-stx-balance/:address', Stacks.GetStxBalance) + .get('/stacks/get-date-at-block/:blockHeight', Stacks.GetDateAtBlock) // Activation functions - .get('/:version/:cityname/activation/get-activation-block', GetActivationBlock) - .get('/:version/:cityname/activation/get-activation-target', GetActivationTarget) - .get('/:version/:cityname/activation/get-city-wallet', GetCityWallet) - .get('/:version/:cityname/activation/get-registered-users-nonce', GetRegisteredUsersNonce) - .get('/:version/:cityname/activation/get-user/:userid', GetUser) - .get('/:version/:cityname/activation/get-user-id/:address', GetUserId) + .get('/:version/:cityname/activation/get-activation-block', Activation.GetActivationBlock) + .get('/:version/:cityname/activation/get-activation-target', Activation.GetActivationTarget) + .get('/:version/:cityname/activation/get-city-wallet', Activation.GetCityWallet) + .get('/:version/:cityname/activation/get-registered-users-nonce', Activation.GetRegisteredUsersNonce) + .get('/:version/:cityname/activation/get-user/:userid', Activation.GetUser) + .get('/:version/:cityname/activation/get-user-id/:address', Activation.GetUserId) // Mining functions - .get('/:version/:cityname/mining/get-block-winner-id/:blockheight', GetBlockWinnerId) - .get('/:version/:cityname/mining/get-last-high-value-at-block/:blockheight', GetLastHighValueAtBlock) - .get('/:version/:cityname/mining/get-miner-at-block/:blockheight/:userid', GetMinerAtBlock) - .get('/:version/:cityname/mining/get-mining-stats-at-block/:blockheight', GetMiningStatsAtBlock) - .get('/:version/:cityname/mining/has-mined-at-block/:blockheight/:userid', HasMinedAtBlock) + .get('/:version/:cityname/mining/get-block-winner-id/:blockheight', Mining.GetBlockWinnerId) + .get('/:version/:cityname/mining/get-last-high-value-at-block/:blockheight', Mining.GetLastHighValueAtBlock) + .get('/:version/:cityname/mining/get-miner-at-block/:blockheight/:userid', Mining.GetMinerAtBlock) + .get('/:version/:cityname/mining/get-mining-stats-at-block/:blockheight', Mining.GetMiningStatsAtBlock) + .get('/:version/:cityname/mining/has-mined-at-block/:blockheight/:userid', Mining.HasMinedAtBlock) // Mining claim functions - .get('/:version/:cityname/mining-claims/can-claim-mining-reward/:blockheight/:address', CanClaimMiningReward) - .get('/:version/:cityname/mining-claims/is-block-winner/:blockheight/:address', IsBlockWinner) + .get('/:version/:cityname/mining-claims/can-claim-mining-reward/:blockheight/:address', MiningClaims.CanClaimMiningReward) + .get('/:version/:cityname/mining-claims/is-block-winner/:blockheight/:address', MiningClaims.IsBlockWinner) // Stacking functions - .get('/:version/:cityname/stacking/get-first-stacks-block-in-reward-cycle/:cycleid', GetFirstStacksBlockInRewardCycle) - .get('/:version/:cityname/stacking/get-reward-cycle/:blockheight', GetRewardCycle) - .get('/:version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid', GetStackerAtCycle) - .get('/:version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid', GetStackingStatsAtCycle) - .get('/:version/:cityname/stacking/stacking-active-at-cycle/:cycleid', StackingActiveAtCycle) + .get('/:version/:cityname/stacking/get-first-stacks-block-in-reward-cycle/:cycleid', Stacking.GetFirstStacksBlockInRewardCycle) + .get('/:version/:cityname/stacking/get-reward-cycle/:blockheight', Stacking.GetRewardCycle) + .get('/:version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid', Stacking.GetStackerAtCycle) + .get('/:version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid', Stacking.GetStackingStatsAtCycle) + .get('/:version/:cityname/stacking/stacking-active-at-cycle/:cycleid', Stacking.StackingActiveAtCycle) // Stacking claim functions - .get('/:version/:cityname/stacking-claims/get-stacking-reward/:cycleid/:userid', GetStackingReward) + .get('/:version/:cityname/stacking-claims/get-stacking-reward/:cycleid/:userid', StackingClaims.GetStackingReward) // Token functions - .get('/:version/:cityname/token/get-balance/:address', GetBalance) - .get('/:version/:cityname/token/get-coinbase-amount/:blockheight', GetCoinbaseAmount) - .get('/:version/:cityname/token/get-coinbase-amounts', GetCoinbaseAmounts) - .get('/:version/:cityname/token/get-coinbase-thresholds', GetCoinbaseThresholds) - .get('/:version/:cityname/token/get-decimals', GetDecimals) - .get('/:version/:cityname/token/get-name', GetName) - .get('/:version/:cityname/token/get-symbol', GetSymbol) - .get('/:version/:cityname/token/get-token-uri', GetTokenUri) - .get('/:version/:cityname/token/get-token-uri-json', GetTokenUriJson) - .get('/:version/:cityname/token/get-total-supply', GetTotalSupply) + .get('/:version/:cityname/token/get-balance/:address', Token.GetBalance) + .get('/:version/:cityname/token/get-coinbase-amount/:blockheight', Token.GetCoinbaseAmount) + .get('/:version/:cityname/token/get-coinbase-amounts', Token.GetCoinbaseAmounts) + .get('/:version/:cityname/token/get-coinbase-thresholds', Token.GetCoinbaseThresholds) + .get('/:version/:cityname/token/get-decimals', Token.GetDecimals) + .get('/:version/:cityname/token/get-name', Token.GetName) + .get('/:version/:cityname/token/get-symbol', Token.GetSymbol) + .get('/:version/:cityname/token/get-token-uri', Token.GetTokenUri) + .get('/:version/:cityname/token/get-token-uri-json', Token.GetTokenUriJson) + .get('/:version/:cityname/token/get-total-supply', Token.GetTotalSupply) // Tools - .get('/:version/:cityname/tools/get-city-configuration', GetCityConfiguration) - .get('/:cityname/tools/get-full-city-configuration', GetFullCityConfiguration) - .get('/:version/:cityname/tools/get-prices/:currency?', GetPrices) - .get('/:version/:cityname/tools/proof-of-hodl/:address', ProofOfHodl) - .get('/:version/:cityname/tools/proof-of-hold/:address', ProofOfHodl) + .get('/:version/:cityname/tools/get-city-configuration', Tools.GetCityConfiguration) + .get('/:cityname/tools/get-full-city-configuration', Tools.GetFullCityConfiguration) + .get('/:version/:cityname/tools/get-prices/:currency?', Tools.GetPrices) + .get('/:version/:cityname/tools/proof-of-hodl/:address', Tools.ProofOfHodl) + .get('/:version/:cityname/tools/proof-of-hold/:address', Tools.ProofOfHodl) // Default route .get('*', (request) => new Response(`Resource not found, please check the URL: ${request.url}`, { status: 404 })) diff --git a/src/handlers/activation.ts b/src/handlers/activation.ts new file mode 100644 index 0000000..84d7467 --- /dev/null +++ b/src/handlers/activation.ts @@ -0,0 +1,8 @@ +// activation exports + +export { default as GetActivationBlock } from './activation/getactivationblock' +export { default as GetActivationTarget } from './activation/getactivationtarget' +export { default as GetCityWallet } from './activation/getcitywallet' +export { default as GetRegisteredUsersNonce } from './activation/getregisteredusersnonce' +export { default as GetUser } from './activation/getuser' +export { default as GetUserId } from './activation/getuserid' diff --git a/src/handlers/mining.ts b/src/handlers/mining.ts new file mode 100644 index 0000000..b2c5025 --- /dev/null +++ b/src/handlers/mining.ts @@ -0,0 +1,7 @@ +// mining exports + +export { default as GetBlockWinnerId } from './mining/getblockwinnerid' +export { default as GetLastHighValueAtBlock } from './mining/getlasthighvalueatblock' +export { default as GetMinerAtBlock } from './mining/getmineratblock' +export { default as GetMiningStatsAtBlock } from './mining/getminingstatsatblock' +export { default as HasMinedAtBlock } from './mining/hasminedatblock' diff --git a/src/handlers/miningclaims.ts b/src/handlers/miningclaims.ts new file mode 100644 index 0000000..98d1b33 --- /dev/null +++ b/src/handlers/miningclaims.ts @@ -0,0 +1,4 @@ +// mining claims exports + +export { default as CanClaimMiningReward } from './miningclaims/canclaimminingreward' +export { default as IsBlockWinner } from './miningclaims/isblockwinner' diff --git a/src/handlers/stacking.ts b/src/handlers/stacking.ts new file mode 100644 index 0000000..cf1334a --- /dev/null +++ b/src/handlers/stacking.ts @@ -0,0 +1,7 @@ +// stacking exports + +export { default as GetFirstStacksBlockInRewardCycle } from './stacking/getfirststacksblockinrewardcycle' +export { default as GetRewardCycle } from './stacking/getrewardcycle' +export { default as GetStackerAtCycle } from './stacking/getstackeratcycle' +export { default as GetStackingStatsAtCycle } from './stacking/getstackingstatsatcycle' +export { default as StackingActiveAtCycle } from './stacking/stackingactiveatcycle' diff --git a/src/handlers/stackingclaims.ts b/src/handlers/stackingclaims.ts new file mode 100644 index 0000000..f422a0b --- /dev/null +++ b/src/handlers/stackingclaims.ts @@ -0,0 +1,3 @@ +// stacking claims exports + +export { default as GetStackingReward } from './stackingclaims/getstackingreward' diff --git a/src/handlers/stacks.ts b/src/handlers/stacks.ts new file mode 100644 index 0000000..5a2ac86 --- /dev/null +++ b/src/handlers/stacks.ts @@ -0,0 +1,6 @@ +// stacks exports + +export { default as GetBnsName } from './stacks/getbnsname' +export { default as GetDateAtBlock } from './stacks/getdateatblock' +export { default as GetStacksBlockHeight } from './stacks/getstacksblockheight' +export { default as GetStxBalance } from './stacks/getstxbalance' diff --git a/src/handlers/token.ts b/src/handlers/token.ts new file mode 100644 index 0000000..387aace --- /dev/null +++ b/src/handlers/token.ts @@ -0,0 +1,12 @@ +// token exports + +export { default as GetBalance } from './token/getbalance' +export { default as GetCoinbaseAmount } from './token/getcoinbaseamount' +export { default as GetCoinbaseAmounts } from './token/getcoinbaseamounts' +export { default as GetCoinbaseThresholds } from './token/getcoinbasethresholds' +export { default as GetDecimals } from './token/getdecimals' +export { default as GetName } from './token/getname' +export { default as GetSymbol } from './token/getsymbol' +export { default as GetTokenUri } from './token/gettokenuri' +export { default as GetTokenUriJson } from './token/gettokenurijson' +export { default as GetTotalSupply } from './token/gettotalsupply' diff --git a/src/handlers/tools.ts b/src/handlers/tools.ts new file mode 100644 index 0000000..929cc25 --- /dev/null +++ b/src/handlers/tools.ts @@ -0,0 +1,6 @@ +// tools exports + +export { default as GetCityConfiguration } from './tools/getcityconfiguration' +export { default as GetFullCityConfiguration } from './tools/getfullcityconfiguration' +export { default as GetPrices } from './tools/getprices' +export { default as ProofOfHodl } from './tools/proofofhodl' From 871617b0e7ebe625cae5e91f4a36ff374d4dfa09 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Fri, 13 May 2022 11:20:11 -0700 Subject: [PATCH 34/51] feat: add endpoints for getting supported city info Adds /tools/get-city-list endpoint Adds /tools/get-city-info endpoint Adds /tools/get-full-city-info endpoint This allows an external service to see what API queries are supported, and provides some initial information to use before more data is queried/loaded. fixes #63 --- src/handler.ts | 3 + src/handlers/tools.ts | 3 + src/handlers/tools/getcityinfo.ts | 26 ++++++ src/handlers/tools/getcitylist.ts | 20 +++++ src/handlers/tools/getfullcityinfo.ts | 20 +++++ src/types/cities.ts | 53 ++++++++++++- static/openapi.yml | 109 +++++++++++++++++++++++++- 7 files changed, 230 insertions(+), 4 deletions(-) create mode 100644 src/handlers/tools/getcityinfo.ts create mode 100644 src/handlers/tools/getcitylist.ts create mode 100644 src/handlers/tools/getfullcityinfo.ts diff --git a/src/handler.ts b/src/handler.ts index 8353774..022f5dc 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -57,6 +57,9 @@ router .get('/:version/:cityname/token/get-token-uri-json', Token.GetTokenUriJson) .get('/:version/:cityname/token/get-total-supply', Token.GetTotalSupply) // Tools + .get('/tools/get-city-list', Tools.GetCityList) + .get('/:cityname/tools/get-city-info', Tools.GetCityInfo) + .get('/tools/get-full-city-info', Tools.GetFullCityInfo) .get('/:version/:cityname/tools/get-city-configuration', Tools.GetCityConfiguration) .get('/:cityname/tools/get-full-city-configuration', Tools.GetFullCityConfiguration) .get('/:version/:cityname/tools/get-prices/:currency?', Tools.GetPrices) diff --git a/src/handlers/tools.ts b/src/handlers/tools.ts index 929cc25..7f05545 100644 --- a/src/handlers/tools.ts +++ b/src/handlers/tools.ts @@ -4,3 +4,6 @@ export { default as GetCityConfiguration } from './tools/getcityconfiguration' export { default as GetFullCityConfiguration } from './tools/getfullcityconfiguration' export { default as GetPrices } from './tools/getprices' export { default as ProofOfHodl } from './tools/proofofhodl' +export { default as GetCityInfo } from './tools/getcityinfo' +export { default as GetCityList } from './tools/getcitylist' +export { default as GetFullCityInfo } from './tools/getfullcityinfo' diff --git a/src/handlers/tools/getcityinfo.ts b/src/handlers/tools/getcityinfo.ts new file mode 100644 index 0000000..bf388c7 --- /dev/null +++ b/src/handlers/tools/getcityinfo.ts @@ -0,0 +1,26 @@ +import { Request as IttyRequest } from 'itty-router' +import { CityInfo, getCityInfo } from '../../types/cities' + +const GetCityInfo = async (request: IttyRequest): Promise => { + let cityInfo: CityInfo + // check inputs + const city = request.params?.cityname ?? undefined + if (city === undefined) { + return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + } + // get/calculate response + try { + cityInfo = await getCityInfo(city) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(cityInfo), { headers }) +} + +export default GetCityInfo diff --git a/src/handlers/tools/getcitylist.ts b/src/handlers/tools/getcitylist.ts new file mode 100644 index 0000000..09e5d11 --- /dev/null +++ b/src/handlers/tools/getcitylist.ts @@ -0,0 +1,20 @@ +import { getCityList } from '../../types/cities' + +const GetCityList = async (): Promise => { + let cityList: string[] + // get/calculate response + try { + cityList = await getCityList() + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(cityList), { headers }) +} + +export default GetCityList diff --git a/src/handlers/tools/getfullcityinfo.ts b/src/handlers/tools/getfullcityinfo.ts new file mode 100644 index 0000000..fe0d01f --- /dev/null +++ b/src/handlers/tools/getfullcityinfo.ts @@ -0,0 +1,20 @@ +import { CityList, getFullCityInfo } from '../../types/cities' + +const GetFullCityInfo = async (): Promise => { + let cityInfo: CityList + // get/calculate response + try { + cityInfo = await getFullCityInfo() + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const headers = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + } + return new Response(JSON.stringify(cityInfo), { headers }) +} + +export default GetFullCityInfo diff --git a/src/types/cities.ts b/src/types/cities.ts index 15e0ca2..4c6adc3 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -1,5 +1,16 @@ // CONFIGURATION +export interface CityList { + [name: string]: CityInfo +} + +export interface CityInfo { + fullName: string, + logo: string, + versions: string[], + currentVersion: string +} + export interface CityVersions { [version: string]: CityConfig } @@ -40,6 +51,13 @@ export interface TokenContract { // MIAMICOIN +const miaInfo: CityInfo = { + fullName: 'Miami', + logo: 'https://cdn.citycoins.co/brand/MIA_Miami/Coins/SVG/MiamiCoin_StandAlone_Coin.svg', + versions: ['v1', 'v2'], + currentVersion: 'v2' +} + const miaConfig: CityVersions = { 'v1': { cityName: 'Miami', @@ -98,6 +116,13 @@ const miaConfig: CityVersions = { // NEWYORKCITYCOIN +const nycInfo: CityInfo = { + fullName: 'New York City', + logo: 'https://cdn.citycoins.co/brand/NYC_NewYorkCity/Coins/SVG/CC_NYCCoin_StandAloneCoin.svg', + versions: ['v1', 'v2'], + currentVersion: 'v2' +} + const nycConfig: CityVersions = { 'v1': { cityName: 'New York City', @@ -154,6 +179,32 @@ const nycConfig: CityVersions = { } } +// GETTERS + +export const cityList = ["mia", "nyc"]; + +export async function getCityList(): Promise { + return cityList; +} + +export async function getCityInfo(city: string): Promise { + switch (city) { + case 'mia': + return miaInfo; + case 'nyc': + return nycInfo; + default: + throw new Error(`Invalid city name: ${city}`); + } +} + +export async function getFullCityInfo(): Promise { + return { + 'mia': miaInfo, + 'nyc': nycInfo, + }; +} + export async function getCityConfig(city: string, version: string): Promise { version = version.toLowerCase() switch (city.toLowerCase()) { @@ -174,6 +225,6 @@ export async function getFullCityConfig(city: string): Promise { case "nyc": return nycConfig default: - throw new Error(`Invalid city name ${city}`) + throw new Error(`Invalid city name: ${city}`) } } diff --git a/static/openapi.yml b/static/openapi.yml index 7e517e5..7250a68 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -768,10 +768,89 @@ paths: "404": $ref: '#/components/responses/404NotFound' + /tools/get-city-list: + get: + summary: Get City List + description: Get the list of city short names supported by the API. + tags: + - Tools + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/citylist' + examples: + "0": + value: ["mia", "nyc"] + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + + /{cityname}/tools/get-city-info: + get: + summary: Get City Info + description: Gets the basic info about a city including available and current contract versions. + tags: + - Tools + parameters: + - $ref: '#/components/parameters/cityname' + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/cityinfo' + examples: + "0": + value: + fullName: "Miami" + logo: "https://cdn.citycoins.co/brand/MIA_Miami/Coins/SVG/MiamiCoin_StandAlone_Coin.svg" + versions: ["v1", "v2"] + currentVersion: "v2" + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + + /tools/get-full-city-info: + get: + summary: Get Full City Info + description: Gets the full city information data for all known cities supported by the API. + tags: + - Tools + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/cityinfolist' + examples: + "0": + value: + "mia": + fullName: "Miami" + logo: "https://cdn.citycoins.co/brand/MIA_Miami/Coins/SVG/MiamiCoin_StandAlone_Coin.svg" + versions: ["v1", "v2"] + currentVersion: "v2" + "nyc": + fullName: "New York City" + logo: "https://cdn.citycoins.co/brand/NYC_NewYorkCity/Coins/SVG/CC_NYCCoin_StandAloneCoin.svg" + versions: ["v1", "v2"] + currentVersion: "v2" + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/tools/get-city-configuration: get: summary: Get City Configuration - description: Get the city configuration file depending on the select version and city name. + description: Get the city configuration data depending on the select version and city name. tags: - Tools parameters: @@ -819,7 +898,7 @@ paths: /{cityname}/tools/get-full-city-configuration: get: summary: Get Full City Configuration - description: Gets the full city configuration file including all versions depending on the select city name. + description: Gets the full city configuration data including all versions depending on the select city name. tags: - Tools parameters: @@ -994,9 +1073,33 @@ components: required: true schema: type: string - description: The major CityCoins contract version, e.g. v1, v2 + enum: [v1, v2] + description: The major CityCoins contract version. # Reusable objects schemas: + citylist: + type: array + items: + type: string + enum: [mia, nyc] + cityinfo: + type: object + properties: + fullName: + type: string + logo: + type: string + versions: + $ref: '#/components/schemas/citylist' + currentVersion: + type: string + cityinfolist: + type: object + properties: + cityname: + $ref: '#/components/schemas/citylist' + additionalProperties: + $ref: '#/components/schemas/cityinfo' cityconfig: type: object properties: From 0a2e7f2c57157748803f43d6ff1f762fe6fb1132 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 16 May 2022 10:27:24 -0700 Subject: [PATCH 35/51] fix: move handler code into index There was an issue passing certain request/response variables from the main script, and with the new import scheme there isn't as much code bloat at the top. --- src/handler.ts | 71 ------------------------------------ src/index.ts | 98 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 88 insertions(+), 81 deletions(-) delete mode 100644 src/handler.ts diff --git a/src/handler.ts b/src/handler.ts deleted file mode 100644 index 022f5dc..0000000 --- a/src/handler.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Router } from 'itty-router' -import Landing from './handlers/landing' -import Documentation from './handlers/documentation' -import * as Stacks from './handlers/stacks' -import * as Activation from './handlers/activation' -import * as Mining from './handlers/mining' -import * as MiningClaims from './handlers/miningclaims' -import * as Stacking from './handlers/stacking' -import * as StackingClaims from './handlers/stackingclaims' -import * as Token from './handlers/token' -import * as Tools from './handlers/tools' - -const router = Router() - -router - // main landing pages - .get('/', Landing) - .get('/docs', Documentation) - // Stacks API wrappers - .get('/stacks/get-block-height', Stacks.GetStacksBlockHeight) - .get('/stacks/get-bns-name/:address', Stacks.GetBnsName) - .get('/stacks/get-stx-balance/:address', Stacks.GetStxBalance) - .get('/stacks/get-date-at-block/:blockHeight', Stacks.GetDateAtBlock) - // Activation functions - .get('/:version/:cityname/activation/get-activation-block', Activation.GetActivationBlock) - .get('/:version/:cityname/activation/get-activation-target', Activation.GetActivationTarget) - .get('/:version/:cityname/activation/get-city-wallet', Activation.GetCityWallet) - .get('/:version/:cityname/activation/get-registered-users-nonce', Activation.GetRegisteredUsersNonce) - .get('/:version/:cityname/activation/get-user/:userid', Activation.GetUser) - .get('/:version/:cityname/activation/get-user-id/:address', Activation.GetUserId) - // Mining functions - .get('/:version/:cityname/mining/get-block-winner-id/:blockheight', Mining.GetBlockWinnerId) - .get('/:version/:cityname/mining/get-last-high-value-at-block/:blockheight', Mining.GetLastHighValueAtBlock) - .get('/:version/:cityname/mining/get-miner-at-block/:blockheight/:userid', Mining.GetMinerAtBlock) - .get('/:version/:cityname/mining/get-mining-stats-at-block/:blockheight', Mining.GetMiningStatsAtBlock) - .get('/:version/:cityname/mining/has-mined-at-block/:blockheight/:userid', Mining.HasMinedAtBlock) - // Mining claim functions - .get('/:version/:cityname/mining-claims/can-claim-mining-reward/:blockheight/:address', MiningClaims.CanClaimMiningReward) - .get('/:version/:cityname/mining-claims/is-block-winner/:blockheight/:address', MiningClaims.IsBlockWinner) - // Stacking functions - .get('/:version/:cityname/stacking/get-first-stacks-block-in-reward-cycle/:cycleid', Stacking.GetFirstStacksBlockInRewardCycle) - .get('/:version/:cityname/stacking/get-reward-cycle/:blockheight', Stacking.GetRewardCycle) - .get('/:version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid', Stacking.GetStackerAtCycle) - .get('/:version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid', Stacking.GetStackingStatsAtCycle) - .get('/:version/:cityname/stacking/stacking-active-at-cycle/:cycleid', Stacking.StackingActiveAtCycle) - // Stacking claim functions - .get('/:version/:cityname/stacking-claims/get-stacking-reward/:cycleid/:userid', StackingClaims.GetStackingReward) - // Token functions - .get('/:version/:cityname/token/get-balance/:address', Token.GetBalance) - .get('/:version/:cityname/token/get-coinbase-amount/:blockheight', Token.GetCoinbaseAmount) - .get('/:version/:cityname/token/get-coinbase-amounts', Token.GetCoinbaseAmounts) - .get('/:version/:cityname/token/get-coinbase-thresholds', Token.GetCoinbaseThresholds) - .get('/:version/:cityname/token/get-decimals', Token.GetDecimals) - .get('/:version/:cityname/token/get-name', Token.GetName) - .get('/:version/:cityname/token/get-symbol', Token.GetSymbol) - .get('/:version/:cityname/token/get-token-uri', Token.GetTokenUri) - .get('/:version/:cityname/token/get-token-uri-json', Token.GetTokenUriJson) - .get('/:version/:cityname/token/get-total-supply', Token.GetTotalSupply) - // Tools - .get('/tools/get-city-list', Tools.GetCityList) - .get('/:cityname/tools/get-city-info', Tools.GetCityInfo) - .get('/tools/get-full-city-info', Tools.GetFullCityInfo) - .get('/:version/:cityname/tools/get-city-configuration', Tools.GetCityConfiguration) - .get('/:cityname/tools/get-full-city-configuration', Tools.GetFullCityConfiguration) - .get('/:version/:cityname/tools/get-prices/:currency?', Tools.GetPrices) - .get('/:version/:cityname/tools/proof-of-hodl/:address', Tools.ProofOfHodl) - .get('/:version/:cityname/tools/proof-of-hold/:address', Tools.ProofOfHodl) - // Default route - .get('*', (request) => new Response(`Resource not found, please check the URL: ${request.url}`, { status: 404 })) - -export const handleRequest = (request: Request):Response => router.handle(request) diff --git a/src/index.ts b/src/index.ts index 972d8ac..43b64d3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,83 @@ -import { handleRequest } from './handler' +import { Router } from 'itty-router' import { getAssetFromKV, MethodNotAllowedError, NotFoundError } from '@cloudflare/kv-asset-handler' +import Landing from './handlers/landing' +import Documentation from './handlers/documentation' +import * as Stacks from './handlers/stacks' +import * as Activation from './handlers/activation' +import * as Mining from './handlers/mining' +import * as MiningClaims from './handlers/miningclaims' +import * as Stacking from './handlers/stacking' +import * as StackingClaims from './handlers/stackingclaims' +import * as Token from './handlers/token' +import * as Tools from './handlers/tools' -addEventListener('fetch', (event) => { - if (matchDownload(event.request.url)) { - // check if item should be downloaded from KV - event.respondWith(returnDownload(event)) - } else { - // otherwise route the request to itty-router - event.respondWith(handleRequest(event.request)) - } -}) +const router = Router() + +router + // main landing pages + .get('/', Landing) + .get('/docs', Documentation) + // Stacks API wrappers + .get('/stacks/get-block-height', Stacks.GetStacksBlockHeight) + .get('/stacks/get-bns-name/:address', Stacks.GetBnsName) + .get('/stacks/get-stx-balance/:address', Stacks.GetStxBalance) + .get('/stacks/get-date-at-block/:blockHeight', Stacks.GetDateAtBlock) + // Activation functions + .get('/:version/:cityname/activation/get-activation-block', Activation.GetActivationBlock) + .get('/:version/:cityname/activation/get-activation-target', Activation.GetActivationTarget) + .get('/:version/:cityname/activation/get-city-wallet', Activation.GetCityWallet) + .get('/:version/:cityname/activation/get-registered-users-nonce', Activation.GetRegisteredUsersNonce) + .get('/:version/:cityname/activation/get-user/:userid', Activation.GetUser) + .get('/:version/:cityname/activation/get-user-id/:address', Activation.GetUserId) + // Mining functions + .get('/:version/:cityname/mining/get-block-winner-id/:blockheight', Mining.GetBlockWinnerId) + .get('/:version/:cityname/mining/get-last-high-value-at-block/:blockheight', Mining.GetLastHighValueAtBlock) + .get('/:version/:cityname/mining/get-miner-at-block/:blockheight/:userid', Mining.GetMinerAtBlock) + .get('/:version/:cityname/mining/get-mining-stats-at-block/:blockheight', Mining.GetMiningStatsAtBlock) + .get('/:version/:cityname/mining/has-mined-at-block/:blockheight/:userid', Mining.HasMinedAtBlock) + // Mining claim functions + .get('/:version/:cityname/mining-claims/can-claim-mining-reward/:blockheight/:address', MiningClaims.CanClaimMiningReward) + .get('/:version/:cityname/mining-claims/is-block-winner/:blockheight/:address', MiningClaims.IsBlockWinner) + // Stacking functions + .get('/:version/:cityname/stacking/get-first-stacks-block-in-reward-cycle/:cycleid', Stacking.GetFirstStacksBlockInRewardCycle) + .get('/:version/:cityname/stacking/get-reward-cycle/:blockheight', Stacking.GetRewardCycle) + .get('/:version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid', Stacking.GetStackerAtCycle) + .get('/:version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid', Stacking.GetStackingStatsAtCycle) + .get('/:version/:cityname/stacking/stacking-active-at-cycle/:cycleid', Stacking.StackingActiveAtCycle) + // Stacking claim functions + .get('/:version/:cityname/stacking-claims/get-stacking-reward/:cycleid/:userid', StackingClaims.GetStackingReward) + // Token functions + .get('/:version/:cityname/token/get-balance/:address', Token.GetBalance) + .get('/:version/:cityname/token/get-coinbase-amount/:blockheight', Token.GetCoinbaseAmount) + .get('/:version/:cityname/token/get-coinbase-amounts', Token.GetCoinbaseAmounts) + .get('/:version/:cityname/token/get-coinbase-thresholds', Token.GetCoinbaseThresholds) + .get('/:version/:cityname/token/get-decimals', Token.GetDecimals) + .get('/:version/:cityname/token/get-name', Token.GetName) + .get('/:version/:cityname/token/get-symbol', Token.GetSymbol) + .get('/:version/:cityname/token/get-token-uri', Token.GetTokenUri) + .get('/:version/:cityname/token/get-token-uri-json', Token.GetTokenUriJson) + .get('/:version/:cityname/token/get-total-supply', Token.GetTotalSupply) + // Tools + .get('/tools/get-city-list', Tools.GetCityList) + .get('/:cityname/tools/get-city-info', Tools.GetCityInfo) + .get('/tools/get-full-city-info', Tools.GetFullCityInfo) + .get('/:version/:cityname/tools/get-city-configuration', Tools.GetCityConfiguration) + .get('/:cityname/tools/get-full-city-configuration', Tools.GetFullCityConfiguration) + .get('/:version/:cityname/tools/get-prices/:currency?', Tools.GetPrices) + .get('/:version/:cityname/tools/proof-of-hodl/:address', Tools.ProofOfHodl) + .get('/:version/:cityname/tools/proof-of-hold/:address', Tools.ProofOfHodl) + // Default route + .all('*', (request) => new Response(`Resource not found, please check the URL: ${request.url}`, { status: 404 })) + +export const handleRequest = async (request: Request): Promise => { + const response: Response = await router.handle(request) + const newResponse = new Response(response.body, response) + newResponse.headers.append('Access-Control-Allow-Origin', '*') + newResponse.headers.append('Access-Control-Allow-Methods', 'GET, HEAD, POST, OPTIONS') + newResponse.headers.append('Access-Control-Max-Age', '86400') + newResponse.headers.append('CityCoins-API', '2.0.0') + return newResponse +} // returns true if the URL matches a given string function matchDownload(target: string): boolean { @@ -41,3 +109,13 @@ async function returnDownload(event: FetchEvent): Promise { } } } + +addEventListener('fetch', (event) => { + if (matchDownload(event.request.url)) { + // check if item should be downloaded from KV + event.respondWith(returnDownload(event)) + } else { + // then route the request to itty-router + console.info(event.respondWith(handleRequest(event.request))) + } +}) From f86a6d7f09e6bdd1887f2d62f4dfaba706d93ff2 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Mon, 16 May 2022 10:40:16 -0700 Subject: [PATCH 36/51] fix: remove headers from handler responses --- src/handlers/activation/getactivationblock.ts | 6 +----- src/handlers/activation/getactivationtarget.ts | 6 +----- src/handlers/activation/getcitywallet.ts | 6 +----- src/handlers/activation/getregisteredusersnonce.ts | 6 +----- src/handlers/activation/getuser.ts | 6 +----- src/handlers/activation/getuserid.ts | 6 +----- src/handlers/mining/getblockwinnerid.ts | 6 +----- src/handlers/mining/getlasthighvalueatblock.ts | 6 +----- src/handlers/mining/getmineratblock.ts | 6 +----- src/handlers/mining/getminingstatsatblock.ts | 6 +----- src/handlers/mining/hasminedatblock.ts | 6 +----- src/handlers/miningclaims/canclaimminingreward.ts | 6 +----- src/handlers/miningclaims/isblockwinner.ts | 6 +----- src/handlers/stacking/getfirststacksblockinrewardcycle.ts | 6 +----- src/handlers/stacking/getrewardcycle.ts | 6 +----- src/handlers/stacking/getstackeratcycle.ts | 6 +----- src/handlers/stacking/getstackingstatsatcycle.ts | 6 +----- src/handlers/stacking/stackingactiveatcycle.ts | 6 +----- src/handlers/stackingclaims/getstackingreward.ts | 6 +----- src/handlers/stacks/getbnsname.ts | 6 +----- src/handlers/stacks/getdateatblock.ts | 6 +----- src/handlers/stacks/getstacksblockheight.ts | 6 +----- src/handlers/stacks/getstxbalance.ts | 6 +----- src/handlers/token/getbalance.ts | 6 +----- src/handlers/token/getcoinbaseamount.ts | 6 +----- src/handlers/token/getcoinbaseamounts.ts | 6 +----- src/handlers/token/getcoinbasethresholds.ts | 6 +----- src/handlers/token/getdecimals.ts | 6 +----- src/handlers/token/getname.ts | 6 +----- src/handlers/token/getsymbol.ts | 6 +----- src/handlers/token/gettokenuri.ts | 6 +----- src/handlers/token/gettokenurijson.ts | 6 +----- src/handlers/token/gettotalsupply.ts | 6 +----- src/handlers/tools/getcityconfiguration.ts | 6 +----- src/handlers/tools/getcityinfo.ts | 6 +----- src/handlers/tools/getcitylist.ts | 6 +----- src/handlers/tools/getfullcityconfiguration.ts | 6 +----- src/handlers/tools/getfullcityinfo.ts | 6 +----- src/handlers/tools/getprices.ts | 6 +----- src/handlers/tools/proofofhodl.ts | 6 +----- 40 files changed, 40 insertions(+), 200 deletions(-) diff --git a/src/handlers/activation/getactivationblock.ts b/src/handlers/activation/getactivationblock.ts index bce19a9..6b7dd9e 100644 --- a/src/handlers/activation/getactivationblock.ts +++ b/src/handlers/activation/getactivationblock.ts @@ -22,11 +22,7 @@ const GetActivationBlock = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(activationBlock) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetActivationBlock diff --git a/src/handlers/activation/getactivationtarget.ts b/src/handlers/activation/getactivationtarget.ts index 3c59849..0a313df 100644 --- a/src/handlers/activation/getactivationtarget.ts +++ b/src/handlers/activation/getactivationtarget.ts @@ -22,11 +22,7 @@ const GetActivationTarget = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(activationTarget) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetActivationTarget diff --git a/src/handlers/activation/getcitywallet.ts b/src/handlers/activation/getcitywallet.ts index 7c12569..15e0508 100644 --- a/src/handlers/activation/getcitywallet.ts +++ b/src/handlers/activation/getcitywallet.ts @@ -22,11 +22,7 @@ const GetCityWallet = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(cityWallet) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetCityWallet diff --git a/src/handlers/activation/getregisteredusersnonce.ts b/src/handlers/activation/getregisteredusersnonce.ts index 956f58b..6cd2390 100644 --- a/src/handlers/activation/getregisteredusersnonce.ts +++ b/src/handlers/activation/getregisteredusersnonce.ts @@ -23,11 +23,7 @@ const GetRegisteredUsersNonce = async (request: IttyRequest): Promise } // return response const response = await createSingleValue(registeredUsers) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetRegisteredUsersNonce diff --git a/src/handlers/activation/getuser.ts b/src/handlers/activation/getuser.ts index 6bd897d..f3f876c 100644 --- a/src/handlers/activation/getuser.ts +++ b/src/handlers/activation/getuser.ts @@ -29,11 +29,7 @@ const GetUser = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(userAddress) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetUser diff --git a/src/handlers/activation/getuserid.ts b/src/handlers/activation/getuserid.ts index 1d2c58c..a2d7564 100644 --- a/src/handlers/activation/getuserid.ts +++ b/src/handlers/activation/getuserid.ts @@ -26,11 +26,7 @@ const GetUserId = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(userId) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetUserId diff --git a/src/handlers/mining/getblockwinnerid.ts b/src/handlers/mining/getblockwinnerid.ts index 56bd74f..27ae8f8 100644 --- a/src/handlers/mining/getblockwinnerid.ts +++ b/src/handlers/mining/getblockwinnerid.ts @@ -34,11 +34,7 @@ const GetBlockWinnerId = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(winnerId) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetBlockWinnerId diff --git a/src/handlers/mining/getlasthighvalueatblock.ts b/src/handlers/mining/getlasthighvalueatblock.ts index e206e6c..83322bc 100644 --- a/src/handlers/mining/getlasthighvalueatblock.ts +++ b/src/handlers/mining/getlasthighvalueatblock.ts @@ -37,11 +37,7 @@ const GetLastHighValueAtBlock = async (request: IttyRequest): Promise } // return response const response = await createSingleValue(highValue) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetLastHighValueAtBlock diff --git a/src/handlers/mining/getmineratblock.ts b/src/handlers/mining/getmineratblock.ts index 82670e7..1742553 100644 --- a/src/handlers/mining/getmineratblock.ts +++ b/src/handlers/mining/getmineratblock.ts @@ -38,11 +38,7 @@ const GetMinerAtBlock = async (request: IttyRequest): Promise => { return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(minerAtBlock), { headers }) + return new Response(JSON.stringify(minerAtBlock)) } export default GetMinerAtBlock diff --git a/src/handlers/mining/getminingstatsatblock.ts b/src/handlers/mining/getminingstatsatblock.ts index e1eb326..ab11724 100644 --- a/src/handlers/mining/getminingstatsatblock.ts +++ b/src/handlers/mining/getminingstatsatblock.ts @@ -34,11 +34,7 @@ const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(miningStatsAtBlock), { headers }) + return new Response(JSON.stringify(miningStatsAtBlock)) } export default GetMiningStatsAtBlock diff --git a/src/handlers/mining/hasminedatblock.ts b/src/handlers/mining/hasminedatblock.ts index c29a89d..66f2130 100644 --- a/src/handlers/mining/hasminedatblock.ts +++ b/src/handlers/mining/hasminedatblock.ts @@ -38,11 +38,7 @@ const HasMinedAtBlock = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(minedAtBlock) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default HasMinedAtBlock diff --git a/src/handlers/miningclaims/canclaimminingreward.ts b/src/handlers/miningclaims/canclaimminingreward.ts index 06edfe1..c602971 100644 --- a/src/handlers/miningclaims/canclaimminingreward.ts +++ b/src/handlers/miningclaims/canclaimminingreward.ts @@ -34,11 +34,7 @@ const CanClaimMiningReward = async (request: IttyRequest): Promise => } // return response const response = await createSingleValue(canClaimReward) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default CanClaimMiningReward \ No newline at end of file diff --git a/src/handlers/miningclaims/isblockwinner.ts b/src/handlers/miningclaims/isblockwinner.ts index 4caf18e..11eac5a 100644 --- a/src/handlers/miningclaims/isblockwinner.ts +++ b/src/handlers/miningclaims/isblockwinner.ts @@ -34,11 +34,7 @@ const IsBlockWinner = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(blockWinner) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default IsBlockWinner \ No newline at end of file diff --git a/src/handlers/stacking/getfirststacksblockinrewardcycle.ts b/src/handlers/stacking/getfirststacksblockinrewardcycle.ts index eb193f1..9812ee9 100644 --- a/src/handlers/stacking/getfirststacksblockinrewardcycle.ts +++ b/src/handlers/stacking/getfirststacksblockinrewardcycle.ts @@ -35,11 +35,7 @@ const GetFirstStacksBlockInRewardCycle = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(rewardCycle) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetRewardCycle diff --git a/src/handlers/stacking/getstackeratcycle.ts b/src/handlers/stacking/getstackeratcycle.ts index a350bd1..fdff3cf 100644 --- a/src/handlers/stacking/getstackeratcycle.ts +++ b/src/handlers/stacking/getstackeratcycle.ts @@ -39,11 +39,7 @@ const GetStackerAtCycle = async (request: IttyRequest): Promise => { return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(stackerAtCycle), { headers }) + return new Response(JSON.stringify(stackerAtCycle)) } export default GetStackerAtCycle diff --git a/src/handlers/stacking/getstackingstatsatcycle.ts b/src/handlers/stacking/getstackingstatsatcycle.ts index b42028d..c708a76 100644 --- a/src/handlers/stacking/getstackingstatsatcycle.ts +++ b/src/handlers/stacking/getstackingstatsatcycle.ts @@ -35,11 +35,7 @@ const GetStackingStatsAtCycle = async (request: IttyRequest): Promise return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(stackingStatsAtCycle), { headers }) + return new Response(JSON.stringify(stackingStatsAtCycle)) } export default GetStackingStatsAtCycle diff --git a/src/handlers/stacking/stackingactiveatcycle.ts b/src/handlers/stacking/stackingactiveatcycle.ts index fe8a3ab..4b1aced 100644 --- a/src/handlers/stacking/stackingactiveatcycle.ts +++ b/src/handlers/stacking/stackingactiveatcycle.ts @@ -35,11 +35,7 @@ const StackingActiveAtCycle = async (request: IttyRequest): Promise => } // return response const response = await createSingleValue(activeAtCycle) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default StackingActiveAtCycle diff --git a/src/handlers/stackingclaims/getstackingreward.ts b/src/handlers/stackingclaims/getstackingreward.ts index a5f81c0..66b7bd6 100644 --- a/src/handlers/stackingclaims/getstackingreward.ts +++ b/src/handlers/stackingclaims/getstackingreward.ts @@ -36,11 +36,7 @@ const GetStackingReward = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(stackingReward) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetStackingReward diff --git a/src/handlers/stacks/getbnsname.ts b/src/handlers/stacks/getbnsname.ts index 2cea07d..9c38252 100644 --- a/src/handlers/stacks/getbnsname.ts +++ b/src/handlers/stacks/getbnsname.ts @@ -21,11 +21,7 @@ const GetBnsName = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(bnsNames) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetBnsName diff --git a/src/handlers/stacks/getdateatblock.ts b/src/handlers/stacks/getdateatblock.ts index e3aaf61..9329c51 100644 --- a/src/handlers/stacks/getdateatblock.ts +++ b/src/handlers/stacks/getdateatblock.ts @@ -25,11 +25,7 @@ const GetDateAtBlock = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(dateAtBlock) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetDateAtBlock \ No newline at end of file diff --git a/src/handlers/stacks/getstacksblockheight.ts b/src/handlers/stacks/getstacksblockheight.ts index 9530bb0..2e78ec2 100644 --- a/src/handlers/stacks/getstacksblockheight.ts +++ b/src/handlers/stacks/getstacksblockheight.ts @@ -10,11 +10,7 @@ const GetStacksBlockHeight = async (): Promise => { } // return response const response = await createSingleValue(currentBlockHeight) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetStacksBlockHeight diff --git a/src/handlers/stacks/getstxbalance.ts b/src/handlers/stacks/getstxbalance.ts index 0deb241..771c5e6 100644 --- a/src/handlers/stacks/getstxbalance.ts +++ b/src/handlers/stacks/getstxbalance.ts @@ -16,11 +16,7 @@ const GetStxBalance = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(stxBalance) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetStxBalance diff --git a/src/handlers/token/getbalance.ts b/src/handlers/token/getbalance.ts index f9bb1e9..ccda2df 100644 --- a/src/handlers/token/getbalance.ts +++ b/src/handlers/token/getbalance.ts @@ -23,11 +23,7 @@ const GetBalance = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(balance) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetBalance diff --git a/src/handlers/token/getcoinbaseamount.ts b/src/handlers/token/getcoinbaseamount.ts index 1e627fa..85dd325 100644 --- a/src/handlers/token/getcoinbaseamount.ts +++ b/src/handlers/token/getcoinbaseamount.ts @@ -37,11 +37,7 @@ const GetCoinbaseAmount = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(coinbaseAmount) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetCoinbaseAmount diff --git a/src/handlers/token/getcoinbaseamounts.ts b/src/handlers/token/getcoinbaseamounts.ts index c2cf5ae..09496f5 100644 --- a/src/handlers/token/getcoinbaseamounts.ts +++ b/src/handlers/token/getcoinbaseamounts.ts @@ -21,11 +21,7 @@ const GetCoinbaseAmounts = async (request: IttyRequest): Promise => { return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(coinbaseAmounts), { headers }) + return new Response(JSON.stringify(coinbaseAmounts)) } export default GetCoinbaseAmounts diff --git a/src/handlers/token/getcoinbasethresholds.ts b/src/handlers/token/getcoinbasethresholds.ts index 4ae5be1..986a8ba 100644 --- a/src/handlers/token/getcoinbasethresholds.ts +++ b/src/handlers/token/getcoinbasethresholds.ts @@ -24,11 +24,7 @@ const GetCoinbaseThresholds = async (request: IttyRequest): Promise => return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(coinbaseThresholds), { headers }) + return new Response(JSON.stringify(coinbaseThresholds)) } export default GetCoinbaseThresholds diff --git a/src/handlers/token/getdecimals.ts b/src/handlers/token/getdecimals.ts index b34261b..0cc98b8 100644 --- a/src/handlers/token/getdecimals.ts +++ b/src/handlers/token/getdecimals.ts @@ -22,11 +22,7 @@ const GetDecimals = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(decimals) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetDecimals diff --git a/src/handlers/token/getname.ts b/src/handlers/token/getname.ts index 84d3c09..47155e5 100644 --- a/src/handlers/token/getname.ts +++ b/src/handlers/token/getname.ts @@ -22,11 +22,7 @@ const GetName = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(name) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetName diff --git a/src/handlers/token/getsymbol.ts b/src/handlers/token/getsymbol.ts index a37a545..03e2b53 100644 --- a/src/handlers/token/getsymbol.ts +++ b/src/handlers/token/getsymbol.ts @@ -22,11 +22,7 @@ const GetSymbol = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(symbol) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetSymbol diff --git a/src/handlers/token/gettokenuri.ts b/src/handlers/token/gettokenuri.ts index cb73947..c8da4c2 100644 --- a/src/handlers/token/gettokenuri.ts +++ b/src/handlers/token/gettokenuri.ts @@ -22,11 +22,7 @@ const GetTokenUri = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(tokenUri) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetTokenUri diff --git a/src/handlers/token/gettokenurijson.ts b/src/handlers/token/gettokenurijson.ts index 6030974..62e301a 100644 --- a/src/handlers/token/gettokenurijson.ts +++ b/src/handlers/token/gettokenurijson.ts @@ -22,11 +22,7 @@ const GetTokenUriJson = async (request: IttyRequest): Promise => { return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(tokenUriJson), { headers }) + return new Response(JSON.stringify(tokenUriJson)) } export default GetTokenUriJson diff --git a/src/handlers/token/gettotalsupply.ts b/src/handlers/token/gettotalsupply.ts index 45ed0db..b0da91d 100644 --- a/src/handlers/token/gettotalsupply.ts +++ b/src/handlers/token/gettotalsupply.ts @@ -22,11 +22,7 @@ const GetTotalSupply = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(totalSupply) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default GetTotalSupply diff --git a/src/handlers/tools/getcityconfiguration.ts b/src/handlers/tools/getcityconfiguration.ts index ef2210a..3165931 100644 --- a/src/handlers/tools/getcityconfiguration.ts +++ b/src/handlers/tools/getcityconfiguration.ts @@ -17,11 +17,7 @@ const GetCityConfiguration = async (request: IttyRequest): Promise => return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(cityConfig), { headers }) + return new Response(JSON.stringify(cityConfig)) } export default GetCityConfiguration diff --git a/src/handlers/tools/getcityinfo.ts b/src/handlers/tools/getcityinfo.ts index bf388c7..c0a977b 100644 --- a/src/handlers/tools/getcityinfo.ts +++ b/src/handlers/tools/getcityinfo.ts @@ -16,11 +16,7 @@ const GetCityInfo = async (request: IttyRequest): Promise => { return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(cityInfo), { headers }) + return new Response(JSON.stringify(cityInfo)) } export default GetCityInfo diff --git a/src/handlers/tools/getcitylist.ts b/src/handlers/tools/getcitylist.ts index 09e5d11..580403d 100644 --- a/src/handlers/tools/getcitylist.ts +++ b/src/handlers/tools/getcitylist.ts @@ -10,11 +10,7 @@ const GetCityList = async (): Promise => { return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(cityList), { headers }) + return new Response(JSON.stringify(cityList)) } export default GetCityList diff --git a/src/handlers/tools/getfullcityconfiguration.ts b/src/handlers/tools/getfullcityconfiguration.ts index 8a27a0e..b63de08 100644 --- a/src/handlers/tools/getfullcityconfiguration.ts +++ b/src/handlers/tools/getfullcityconfiguration.ts @@ -16,11 +16,7 @@ const GetFullCityConfiguration = async (request: IttyRequest): Promise return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(cityConfig), { headers }) + return new Response(JSON.stringify(cityConfig)) } export default GetFullCityConfiguration diff --git a/src/handlers/tools/getfullcityinfo.ts b/src/handlers/tools/getfullcityinfo.ts index fe0d01f..40faa17 100644 --- a/src/handlers/tools/getfullcityinfo.ts +++ b/src/handlers/tools/getfullcityinfo.ts @@ -10,11 +10,7 @@ const GetFullCityInfo = async (): Promise => { return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(cityInfo), { headers }) + return new Response(JSON.stringify(cityInfo)) } export default GetFullCityInfo diff --git a/src/handlers/tools/getprices.ts b/src/handlers/tools/getprices.ts index d0b3a7f..6790725 100644 --- a/src/handlers/tools/getprices.ts +++ b/src/handlers/tools/getprices.ts @@ -28,11 +28,7 @@ const GetPrices = async (request: IttyRequest): Promise => { return new Response(String(err), { status: 404 }) } // return response - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(prices), { headers }) + return new Response(JSON.stringify(prices)) } export default GetPrices diff --git a/src/handlers/tools/proofofhodl.ts b/src/handlers/tools/proofofhodl.ts index 6879647..55eff61 100644 --- a/src/handlers/tools/proofofhodl.ts +++ b/src/handlers/tools/proofofhodl.ts @@ -25,11 +25,7 @@ const ProofOfHodl = async (request: IttyRequest): Promise => { } // return response const response = await createSingleValue(hodl) - const headers = { - 'Access-Control-Allow-Origin': '*', - 'Content-Type': 'application/json', - } - return new Response(JSON.stringify(response), { headers }) + return new Response(JSON.stringify(response)) } export default ProofOfHodl From 45dc81146a93e6302d7c2a0b20efd93e3e3bf09d Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Wed, 18 May 2022 06:48:23 -0700 Subject: [PATCH 37/51] fix: add or-default optional parameter to supported functions --- src/handlers/mining/getmineratblock.ts | 3 ++- src/handlers/mining/getminingstatsatblock.ts | 3 ++- src/handlers/stacking/getstackeratcycle.ts | 3 ++- .../stacking/getstackingstatsatcycle.ts | 3 ++- src/index.ts | 8 ++++---- src/lib/citycoins.ts | 16 +++++++-------- static/openapi.yml | 20 +++++++++++++++---- 7 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/handlers/mining/getmineratblock.ts b/src/handlers/mining/getmineratblock.ts index 1742553..57b2015 100644 --- a/src/handlers/mining/getmineratblock.ts +++ b/src/handlers/mining/getmineratblock.ts @@ -13,6 +13,7 @@ const GetMinerAtBlock = async (request: IttyRequest): Promise => { const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined const userId = request.params?.userid ?? undefined + const defaultStats = request.params?.default === 'true' ? true : false if (version === undefined || city === undefined || blockHeight === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } @@ -29,7 +30,7 @@ const GetMinerAtBlock = async (request: IttyRequest): Promise => { if (!isStringAllDigits(userId)) { return new Response(`User ID not specified or invalid`, { status: 400 }) } - minerAtBlock = await getMinerAtBlock(cityConfig, blockHeight, userId) + minerAtBlock = await getMinerAtBlock(cityConfig, blockHeight, userId, defaultStats) if (minerAtBlock === null) { return new Response(`Miner ${userId} not found at block height: ${blockHeight}`, { status: 404 }) } diff --git a/src/handlers/mining/getminingstatsatblock.ts b/src/handlers/mining/getminingstatsatblock.ts index ab11724..1da6e7d 100644 --- a/src/handlers/mining/getminingstatsatblock.ts +++ b/src/handlers/mining/getminingstatsatblock.ts @@ -12,6 +12,7 @@ const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined + const defaultStats = request.params?.default === 'true' ? true : false if (version === undefined || city === undefined || blockHeight === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } @@ -25,7 +26,7 @@ const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => return new Response(`Block height not specified or invalid`, { status: 400 }) } } - miningStatsAtBlock = await getMiningStatsAtBlock(cityConfig, blockHeight) + miningStatsAtBlock = await getMiningStatsAtBlock(cityConfig, blockHeight, defaultStats) if (miningStatsAtBlock === null) { return new Response(`Mining stats not found at block height: ${blockHeight}`, { status: 404 }) } diff --git a/src/handlers/stacking/getstackeratcycle.ts b/src/handlers/stacking/getstackeratcycle.ts index fdff3cf..5ba996c 100644 --- a/src/handlers/stacking/getstackeratcycle.ts +++ b/src/handlers/stacking/getstackeratcycle.ts @@ -13,6 +13,7 @@ const GetStackerAtCycle = async (request: IttyRequest): Promise => { const city = request.params?.cityname ?? undefined let cycle = request.params?.cycleid ?? undefined const userId = request.params?.userid ?? undefined + const defaultStats = request.params?.default === 'true' ? true : false if (version === undefined || city === undefined || cycle === undefined || userId === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } @@ -30,7 +31,7 @@ const GetStackerAtCycle = async (request: IttyRequest): Promise => { if (!isStringAllDigits(userId)) { return new Response(`User ID not specified or invalid`, { status: 400 }) } - stackerAtCycle = await getStackerAtCycle(cityConfig, cycle, userId) + stackerAtCycle = await getStackerAtCycle(cityConfig, cycle, userId, defaultStats) if (stackerAtCycle === null) { return new Response(`Stacker ${userId} not found at reward cycle: ${cycle}`, { status: 404 }) } diff --git a/src/handlers/stacking/getstackingstatsatcycle.ts b/src/handlers/stacking/getstackingstatsatcycle.ts index c708a76..5b1230e 100644 --- a/src/handlers/stacking/getstackingstatsatcycle.ts +++ b/src/handlers/stacking/getstackingstatsatcycle.ts @@ -12,6 +12,7 @@ const GetStackingStatsAtCycle = async (request: IttyRequest): Promise const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let cycle = request.params?.cycleid ?? undefined + const defaultStats = request.params?.default === 'true' ? true : false if (version === undefined || city === undefined || cycle === undefined) { return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) } @@ -26,7 +27,7 @@ const GetStackingStatsAtCycle = async (request: IttyRequest): Promise return new Response(`Target cycle not specified or invalid`, { status: 400 }) } } - stackingStatsAtCycle = await getStackingStatsAtCycle(cityConfig, cycle) + stackingStatsAtCycle = await getStackingStatsAtCycle(cityConfig, cycle, defaultStats) if (stackingStatsAtCycle === null) { return new Response(`Stacking stats not found at reward cycle: ${cycle}`, { status: 404 }) } diff --git a/src/index.ts b/src/index.ts index 43b64d3..7acfdfa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -32,8 +32,8 @@ router // Mining functions .get('/:version/:cityname/mining/get-block-winner-id/:blockheight', Mining.GetBlockWinnerId) .get('/:version/:cityname/mining/get-last-high-value-at-block/:blockheight', Mining.GetLastHighValueAtBlock) - .get('/:version/:cityname/mining/get-miner-at-block/:blockheight/:userid', Mining.GetMinerAtBlock) - .get('/:version/:cityname/mining/get-mining-stats-at-block/:blockheight', Mining.GetMiningStatsAtBlock) + .get('/:version/:cityname/mining/get-miner-at-block/:blockheight/:userid/:default?', Mining.GetMinerAtBlock) + .get('/:version/:cityname/mining/get-mining-stats-at-block/:blockheight/:default?', Mining.GetMiningStatsAtBlock) .get('/:version/:cityname/mining/has-mined-at-block/:blockheight/:userid', Mining.HasMinedAtBlock) // Mining claim functions .get('/:version/:cityname/mining-claims/can-claim-mining-reward/:blockheight/:address', MiningClaims.CanClaimMiningReward) @@ -41,8 +41,8 @@ router // Stacking functions .get('/:version/:cityname/stacking/get-first-stacks-block-in-reward-cycle/:cycleid', Stacking.GetFirstStacksBlockInRewardCycle) .get('/:version/:cityname/stacking/get-reward-cycle/:blockheight', Stacking.GetRewardCycle) - .get('/:version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid', Stacking.GetStackerAtCycle) - .get('/:version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid', Stacking.GetStackingStatsAtCycle) + .get('/:version/:cityname/stacking/get-stacker-at-cycle/:cycleid/:userid/:default?', Stacking.GetStackerAtCycle) + .get('/:version/:cityname/stacking/get-stacking-stats-at-cycle/:cycleid/:default?', Stacking.GetStackingStatsAtCycle) .get('/:version/:cityname/stacking/stacking-active-at-cycle/:cycleid', Stacking.StackingActiveAtCycle) // Stacking claim functions .get('/:version/:cityname/stacking-claims/get-stacking-reward/:cycleid/:userid', StackingClaims.GetStackingReward) diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index 47708f7..37e5fe0 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -96,22 +96,22 @@ export async function getBlockWinnerId(cityConfig: CityConfig, blockHeight: stri }, true) } -export async function getMiningStatsAtBlock(cityConfig: CityConfig, blockHeight: string): Promise { +export async function getMiningStatsAtBlock(cityConfig: CityConfig, blockHeight: string, defaultStats = false): Promise { return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, contractName: cityConfig.core.name, - functionName: 'get-mining-stats-at-block', + functionName: defaultStats ? 'get-mining-stats-at-block-or-default' : 'get-mining-stats-at-block', functionArgs: [uintCV(blockHeight)], network: STACKS_NETWORK, senderAddress: cityConfig.deployer, }, true) } -export async function getMinerAtBlock(cityConfig: CityConfig, blockHeight: string, userId: string): Promise { +export async function getMinerAtBlock(cityConfig: CityConfig, blockHeight: string, userId: string, defaultStats = false): Promise { return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, contractName: cityConfig.core.name, - functionName: 'get-miner-at-block', + functionName: defaultStats ? 'get-miner-at-block-or-default' : 'get-miner-at-block', functionArgs: [uintCV(blockHeight), uintCV(userId)], network: STACKS_NETWORK, senderAddress: cityConfig.deployer, @@ -176,22 +176,22 @@ export async function isBlockWinner(cityConfig: CityConfig, address: string, blo // STACKING FUNCTIONS ////////////////////////////////////////////////// -export async function getStackingStatsAtCycle(cityConfig: CityConfig, cycleId: string): Promise { +export async function getStackingStatsAtCycle(cityConfig: CityConfig, cycleId: string, defaultStats = false): Promise { return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, contractName: cityConfig.core.name, - functionName: 'get-stacking-stats-at-cycle', + functionName: defaultStats ? 'get-stacking-stats-at-cycle-or-default' : 'get-stacking-stats-at-cycle', functionArgs: [uintCV(cycleId)], network: STACKS_NETWORK, senderAddress: cityConfig.deployer, }, true) } -export async function getStackerAtCycle(cityConfig: CityConfig, cycleId: string, userId: string): Promise { +export async function getStackerAtCycle(cityConfig: CityConfig, cycleId: string, userId: string, defaultStats = false): Promise { return fetchReadOnlyFunction({ contractAddress: cityConfig.deployer, contractName: cityConfig.core.name, - functionName: 'get-stacker-at-cycle', + functionName: defaultStats ? 'get-stacker-at-cycle-or-default' : 'get-stacker-at-cycle', functionArgs: [uintCV(cycleId), uintCV(userId)], network: STACKS_NETWORK, senderAddress: cityConfig.deployer, diff --git a/static/openapi.yml b/static/openapi.yml index 7250a68..7925d39 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -229,7 +229,7 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /{version}/{cityname}/mining/get-mining-stats-at-block/{blockheight}: + /{version}/{cityname}/mining/get-mining-stats-at-block/{blockheight}/{default}: get: summary: Get Mining Stats description: Get the mining stats for a given CityCoin and Stacks block height @@ -239,6 +239,7 @@ paths: - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' + - $ref: '#/components/parameters/default' responses: "200": description: Success @@ -270,7 +271,7 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /{version}/{cityname}/mining/get-miner-at-block/{blockheight}/{userid}: + /{version}/{cityname}/mining/get-miner-at-block/{blockheight}/{userid}/{default}: get: summary: Get Miner Info description: Get the miner details for a given CityCoin, Stacks block height, and user ID. @@ -281,6 +282,7 @@ paths: - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' - $ref: '#/components/parameters/userid' + - $ref: '#/components/parameters/default' responses: "200": description: Success @@ -384,7 +386,7 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /{version}/{cityname}/stacking/get-stacking-stats-at-cycle/{cycleid}: + /{version}/{cityname}/stacking/get-stacking-stats-at-cycle/{cycleid}/{default}: get: summary: Get Stacking Stats description: Get the stacking stats for a given CityCoin and reward cycle ID @@ -394,6 +396,7 @@ paths: - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' + - $ref: '#/components/parameters/default' responses: "200": description: Success @@ -416,7 +419,7 @@ paths: "404": $ref: '#/components/responses/404NotFound' - /{version}/{cityname}/stacking/get-stacker-at-cycle/{cycleid}/{userid}: + /{version}/{cityname}/stacking/get-stacker-at-cycle/{cycleid}/{userid}/{default}: get: summary: Get Stacker Info description: Get the amount stacked and amount to return for a given CityCoin, reward cycle ID, and user ID. @@ -427,6 +430,7 @@ paths: - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' - $ref: '#/components/parameters/userid' + - $ref: '#/components/parameters/default' responses: "200": description: Success @@ -1075,6 +1079,14 @@ components: type: string enum: [v1, v2] description: The major CityCoins contract version. + default: + in: path + name: default + required: true + schema: + type: string + enum: ["true", "false"] + description: (Optional) Toggle calling the `or-default` version of the function which returns an empty value instead of an error. Defaults to `false`. # Reusable objects schemas: citylist: From 34bb769a2b7d53e6bb4d39b159d6c14da2bba062 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 09:05:54 -0700 Subject: [PATCH 38/51] feat: add /token/get-total-supply endpoint This also adds a legacy/deprecated endpoint based on the ones already in use by CoinGecko, CMC, and others. As services get updated this endpoint could be removed. This also doesn't follow the standard convention of returning the "micro" value like other endpoints, and instead returns the value in CityCoins for easy consumption by external services (no need to look at decimals, rounding, etc). Fixes #69 --- src/handlers/token.ts | 1 + src/handlers/token/getfulltotalsupply.ts | 36 +++++++++++++++++++ src/index.ts | 2 ++ src/lib/common.ts | 6 ++-- src/types/common.ts | 2 +- static/openapi.yml | 45 ++++++++++++++++++++++-- 6 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 src/handlers/token/getfulltotalsupply.ts diff --git a/src/handlers/token.ts b/src/handlers/token.ts index 387aace..356d7f3 100644 --- a/src/handlers/token.ts +++ b/src/handlers/token.ts @@ -10,3 +10,4 @@ export { default as GetSymbol } from './token/getsymbol' export { default as GetTokenUri } from './token/gettokenuri' export { default as GetTokenUriJson } from './token/gettokenurijson' export { default as GetTotalSupply } from './token/gettotalsupply' +export { default as GetFullTotalSupply } from './token/getfulltotalsupply' diff --git a/src/handlers/token/getfulltotalsupply.ts b/src/handlers/token/getfulltotalsupply.ts new file mode 100644 index 0000000..aeb7b48 --- /dev/null +++ b/src/handlers/token/getfulltotalsupply.ts @@ -0,0 +1,36 @@ +import { Request as IttyRequest } from 'itty-router' +import { getTotalSupply } from '../../lib/citycoins' +import { createSingleValue, MICRO_UNITS } from '../../lib/common' +import { getCityConfig, getCityInfo } from '../../types/cities' + +const GetFullTotalSupply = async (request: IttyRequest): Promise => { + let totalSupply = 0 + // check inputs + const city = request.params?.cityname ?? undefined + if (city === undefined) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // get/calculate response + try { + const cityInfo = await getCityInfo(city) + for await (const version of cityInfo.versions) { + const config = await getCityConfig(city, version) + const supply = await getTotalSupply(config) + console.log(city, version, supply) + totalSupply += version === 'v1' ? +supply * MICRO_UNITS : +supply + } + console.log(`totalSupply: ${totalSupply}`) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) + } + // return response + const response = await createSingleValue( + (totalSupply / MICRO_UNITS).toFixed(6), + ) + return new Response(JSON.stringify(response)) +} + +export default GetFullTotalSupply diff --git a/src/index.ts b/src/index.ts index 7acfdfa..026bfcf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -57,6 +57,8 @@ router .get('/:version/:cityname/token/get-token-uri', Token.GetTokenUri) .get('/:version/:cityname/token/get-token-uri-json', Token.GetTokenUriJson) .get('/:version/:cityname/token/get-total-supply', Token.GetTotalSupply) + .get('/token/get-total-supply/:cityname', Token.GetFullTotalSupply) // legacy route for old API integrations + .get('/:cityname/token/get-total-supply', Token.GetFullTotalSupply) // Tools .get('/tools/get-city-list', Tools.GetCityList) .get('/:cityname/tools/get-city-info', Tools.GetCityInfo) diff --git a/src/lib/common.ts b/src/lib/common.ts index b48910d..e0b9769 100644 --- a/src/lib/common.ts +++ b/src/lib/common.ts @@ -1,9 +1,11 @@ import { StacksMainnet } from "micro-stacks/network" import { SingleValue } from "../types/common"; -export const STACKS_NETWORK = new StacksMainnet(); +export const STACKS_NETWORK = new StacksMainnet() -export async function createSingleValue(value: string | boolean): Promise { +export const MICRO_UNITS = 1000000 + +export async function createSingleValue(value: boolean | number | string): Promise { return { value: value } } diff --git a/src/types/common.ts b/src/types/common.ts index 3b64e74..52623b1 100644 --- a/src/types/common.ts +++ b/src/types/common.ts @@ -1,6 +1,6 @@ export interface SingleValue { - value: string | boolean + value: boolean | number | string } export interface Prices { diff --git a/static/openapi.yml b/static/openapi.yml index 7925d39..8b30f89 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -706,8 +706,8 @@ paths: /{version}/{cityname}/token/get-total-supply: get: - summary: Get Total Supply - description: Get the SIP-010 total supply for a given CityCoin + summary: Get Total Supply (single) + description: Get the SIP-010 total supply for a given CityCoin and version tags: - Token parameters: @@ -721,6 +721,47 @@ paths: "404": $ref: '#/components/responses/404NotFound' + /{cityname}/token/get-total-supply: + get: + summary: Get Total Supply (all) + description: | + Get the SIP-010 total supply for a given CityCoin across all versions. + + Note: This will return the value in "CityCoins" not "micro-CityCoins" with 6 decimal places added to the calculation. + tags: + - Token + parameters: + - $ref: '#/components/parameters/cityname' + responses: + "200": + $ref: '#/components/responses/200SuccessJsonString' + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + + /token/get-total-supply/{cityname}: + get: + summary: Get Total Supply (legacy) + description: | + Get the SIP-010 total supply for a given CityCoin across all versions. + + Note: This will return the value in "CityCoins" not "micro-CityCoins" with 6 decimal places added to the calculation. + + This endpoint is deprecated in favor of the new format `/{cityname}/token/get-total-supply` but will remain active until all known external services are converted. + deprecated: true + tags: + - Token + parameters: + - $ref: '#/components/parameters/cityname' + responses: + "200": + $ref: '#/components/responses/200SuccessJsonString' + "400": + $ref: '#/components/responses/400BadRequest' + "404": + $ref: '#/components/responses/404NotFound' + /{version}/{cityname}/token/get-token-uri: get: summary: Get Token URI From 7b6b1fa4effd66e53d4b0a425e1d26fe55c14107 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 10:36:21 -0700 Subject: [PATCH 39/51] fix: add function to create different response formats --- src/lib/common.ts | 25 ++++++++++++++++++++++--- src/types/common.ts | 1 - 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/lib/common.ts b/src/lib/common.ts index e0b9769..08d8490 100644 --- a/src/lib/common.ts +++ b/src/lib/common.ts @@ -1,14 +1,33 @@ -import { StacksMainnet } from "micro-stacks/network" -import { SingleValue } from "../types/common"; +import { StacksMainnet } from 'micro-stacks/network' +import { SingleValue } from '../types/common' export const STACKS_NETWORK = new StacksMainnet() export const MICRO_UNITS = 1000000 -export async function createSingleValue(value: boolean | number | string): Promise { +// converts "value" into "value: value" +export async function createSingleValue( + value: boolean | number | string, +): Promise { return { value: value } } +// formatter for responses in all handlers +export async function createResponse( + value: boolean | number | string, + format = 'json', +): Promise { + // return only the value + if (format === 'raw') { + return value + } + // default, return value: value + if (format === 'json') { + return await createSingleValue(value) + } + throw new Error(`Unrecognized output format: ${format}`) +} + // fix for isNaN not being reliable export function isStringAllDigits(value: string): boolean { return value.match(/^[0-9]+$/g) !== null diff --git a/src/types/common.ts b/src/types/common.ts index 52623b1..1e03e65 100644 --- a/src/types/common.ts +++ b/src/types/common.ts @@ -1,4 +1,3 @@ - export interface SingleValue { value: boolean | number | string } From 7861dda0afa66ca73665fede5ca42938d66bb2af Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 10:36:42 -0700 Subject: [PATCH 40/51] fix: modify activation handlers to use new response format --- src/handlers/activation/getactivationblock.ts | 16 +++++++++++--- .../activation/getactivationtarget.ts | 16 +++++++++++--- src/handlers/activation/getcitywallet.ts | 16 +++++++++++--- .../activation/getregisteredusersnonce.ts | 21 ++++++++++++++----- src/handlers/activation/getuser.ts | 16 +++++++++++--- src/handlers/activation/getuserid.ts | 16 +++++++++++--- 6 files changed, 81 insertions(+), 20 deletions(-) diff --git a/src/handlers/activation/getactivationblock.ts b/src/handlers/activation/getactivationblock.ts index 6b7dd9e..8f0bd1f 100644 --- a/src/handlers/activation/getactivationblock.ts +++ b/src/handlers/activation/getactivationblock.ts @@ -1,27 +1,37 @@ import { Request as IttyRequest } from 'itty-router' import { getActivationBlock } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetActivationBlock = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let activationBlock: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) activationBlock = await getActivationBlock(cityConfig) + response = await createResponse(activationBlock, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(activationBlock) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/activation/getactivationtarget.ts b/src/handlers/activation/getactivationtarget.ts index 0a313df..7ccadaf 100644 --- a/src/handlers/activation/getactivationtarget.ts +++ b/src/handlers/activation/getactivationtarget.ts @@ -1,27 +1,37 @@ import { Request as IttyRequest } from 'itty-router' import { getActivationTarget } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetActivationTarget = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let activationTarget: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) activationTarget = await getActivationTarget(cityConfig) + response = await createResponse(activationTarget, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(activationTarget) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/activation/getcitywallet.ts b/src/handlers/activation/getcitywallet.ts index 15e0508..ab9f4ae 100644 --- a/src/handlers/activation/getcitywallet.ts +++ b/src/handlers/activation/getcitywallet.ts @@ -1,27 +1,37 @@ import { Request as IttyRequest } from 'itty-router' import { getCityWallet } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetCityWallet = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let cityWallet: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) cityWallet = await getCityWallet(cityConfig) + response = await createResponse(cityWallet, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(cityWallet) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/activation/getregisteredusersnonce.ts b/src/handlers/activation/getregisteredusersnonce.ts index 6cd2390..763bd5a 100644 --- a/src/handlers/activation/getregisteredusersnonce.ts +++ b/src/handlers/activation/getregisteredusersnonce.ts @@ -1,28 +1,39 @@ import { Request as IttyRequest } from 'itty-router' import { getRegisteredUsersNonce } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' -const GetRegisteredUsersNonce = async (request: IttyRequest): Promise => { +const GetRegisteredUsersNonce = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig let registeredUsers: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) - // get registered users registeredUsers = await getRegisteredUsersNonce(cityConfig) + response = await createResponse(registeredUsers, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(registeredUsers) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/activation/getuser.ts b/src/handlers/activation/getuser.ts index f3f876c..f10c337 100644 --- a/src/handlers/activation/getuser.ts +++ b/src/handlers/activation/getuser.ts @@ -1,17 +1,27 @@ import { Request as IttyRequest } from 'itty-router' import { getUser } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetUser = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let userAddress: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const userId = request.params?.userid ?? undefined if (version === undefined || city === undefined || userId === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -23,12 +33,12 @@ const GetUser = async (request: IttyRequest): Promise => { if (userAddress === null) { return new Response(`User ID not found: ${userId}`, { status: 404 }) } + response = await createResponse(userAddress, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(userAddress) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/activation/getuserid.ts b/src/handlers/activation/getuserid.ts index a2d7564..336b681 100644 --- a/src/handlers/activation/getuserid.ts +++ b/src/handlers/activation/getuserid.ts @@ -1,17 +1,27 @@ import { Request as IttyRequest } from 'itty-router' import { getUserId } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetUserId = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let userId: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const user = request.params?.address ?? undefined if (version === undefined || city === undefined || user === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -20,12 +30,12 @@ const GetUserId = async (request: IttyRequest): Promise => { if (userId === null) { return new Response(`Address not found: ${user}`, { status: 404 }) } + response = await createResponse(userId, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(userId) return new Response(JSON.stringify(response)) } From fa56435b9051db8a00a8c8cd5edcb7bac31ed10c Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 10:45:08 -0700 Subject: [PATCH 41/51] fix: modify mining handlers to use new response format --- src/handlers/mining/getblockwinnerid.ts | 31 ++++++++++++---- .../mining/getlasthighvalueatblock.ts | 35 +++++++++++++++---- src/handlers/mining/getmineratblock.ts | 27 +++++++++++--- src/handlers/mining/getminingstatsatblock.ts | 30 ++++++++++++---- src/handlers/mining/hasminedatblock.ts | 32 +++++++++++++---- 5 files changed, 125 insertions(+), 30 deletions(-) diff --git a/src/handlers/mining/getblockwinnerid.ts b/src/handlers/mining/getblockwinnerid.ts index 27ae8f8..df8eece 100644 --- a/src/handlers/mining/getblockwinnerid.ts +++ b/src/handlers/mining/getblockwinnerid.ts @@ -1,18 +1,32 @@ import { Request as IttyRequest } from 'itty-router' import { getBlockWinnerId } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetBlockWinnerId = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let winnerId: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (version === undefined || city === undefined || blockHeight === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -21,19 +35,24 @@ const GetBlockWinnerId = async (request: IttyRequest): Promise => { blockHeight = await getStacksBlockHeight() } else { if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } } winnerId = await getBlockWinnerId(cityConfig, blockHeight) if (winnerId === null) { - return new Response(`Block winner ID not found at block height: ${blockHeight}`, { status: 404 }) + return new Response( + `Block winner ID not found at block height: ${blockHeight}`, + { status: 404 }, + ) } + response = await createResponse(winnerId, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(winnerId) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/mining/getlasthighvalueatblock.ts b/src/handlers/mining/getlasthighvalueatblock.ts index 83322bc..c2a8f1a 100644 --- a/src/handlers/mining/getlasthighvalueatblock.ts +++ b/src/handlers/mining/getlasthighvalueatblock.ts @@ -1,18 +1,34 @@ import { Request as IttyRequest } from 'itty-router' import { getLastHighValueAtBlock } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' -const GetLastHighValueAtBlock = async (request: IttyRequest): Promise => { +const GetLastHighValueAtBlock = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig let highValue: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (version === undefined || city === undefined || blockHeight === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -23,20 +39,25 @@ const GetLastHighValueAtBlock = async (request: IttyRequest): Promise } else { // verify block height is valid number if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } } // get last high value at block height highValue = await getLastHighValueAtBlock(cityConfig, blockHeight) if (highValue === null) { - return new Response(`High value not found at block height: ${blockHeight}`, { status: 404 }) + return new Response( + `High value not found at block height: ${blockHeight}`, + { status: 404 }, + ) } + response = await createResponse(highValue, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(highValue) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/mining/getmineratblock.ts b/src/handlers/mining/getmineratblock.ts index 57b2015..7c9e125 100644 --- a/src/handlers/mining/getmineratblock.ts +++ b/src/handlers/mining/getmineratblock.ts @@ -14,8 +14,15 @@ const GetMinerAtBlock = async (request: IttyRequest): Promise => { let blockHeight = request.params?.blockheight ?? undefined const userId = request.params?.userid ?? undefined const defaultStats = request.params?.default === 'true' ? true : false - if (version === undefined || city === undefined || blockHeight === undefined || userId === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined || + userId === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { @@ -24,15 +31,25 @@ const GetMinerAtBlock = async (request: IttyRequest): Promise => { blockHeight = await getStacksBlockHeight() } else { if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } } if (!isStringAllDigits(userId)) { return new Response(`User ID not specified or invalid`, { status: 400 }) } - minerAtBlock = await getMinerAtBlock(cityConfig, blockHeight, userId, defaultStats) + minerAtBlock = await getMinerAtBlock( + cityConfig, + blockHeight, + userId, + defaultStats, + ) if (minerAtBlock === null) { - return new Response(`Miner ${userId} not found at block height: ${blockHeight}`, { status: 404 }) + return new Response( + `Miner ${userId} not found at block height: ${blockHeight}`, + { status: 404 }, + ) } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/mining/getminingstatsatblock.ts b/src/handlers/mining/getminingstatsatblock.ts index 1da6e7d..258deee 100644 --- a/src/handlers/mining/getminingstatsatblock.ts +++ b/src/handlers/mining/getminingstatsatblock.ts @@ -3,9 +3,12 @@ import { getMiningStatsAtBlock } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' import { MiningStatsAtBlock } from '../../types/mining' -const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => { +const GetMiningStatsAtBlock = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig let miningStatsAtBlock: MiningStatsAtBlock // check inputs @@ -13,8 +16,14 @@ const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined const defaultStats = request.params?.default === 'true' ? true : false - if (version === undefined || city === undefined || blockHeight === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { @@ -23,12 +32,21 @@ const GetMiningStatsAtBlock = async (request: IttyRequest): Promise => blockHeight = await getStacksBlockHeight() } else { if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } } - miningStatsAtBlock = await getMiningStatsAtBlock(cityConfig, blockHeight, defaultStats) + miningStatsAtBlock = await getMiningStatsAtBlock( + cityConfig, + blockHeight, + defaultStats, + ) if (miningStatsAtBlock === null) { - return new Response(`Mining stats not found at block height: ${blockHeight}`, { status: 404 }) + return new Response( + `Mining stats not found at block height: ${blockHeight}`, + { status: 404 }, + ) } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/mining/hasminedatblock.ts b/src/handlers/mining/hasminedatblock.ts index 66f2130..a97ecde 100644 --- a/src/handlers/mining/hasminedatblock.ts +++ b/src/handlers/mining/hasminedatblock.ts @@ -1,19 +1,34 @@ import { Request as IttyRequest } from 'itty-router' import { hasMinedAtBlock } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const HasMinedAtBlock = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let minedAtBlock: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined const userId = request.params?.userid ?? undefined - if (version === undefined || city === undefined || blockHeight === undefined || userId === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined || + userId === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -22,7 +37,9 @@ const HasMinedAtBlock = async (request: IttyRequest): Promise => { blockHeight = await getStacksBlockHeight() } else { if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } } if (!isStringAllDigits(userId)) { @@ -30,14 +47,17 @@ const HasMinedAtBlock = async (request: IttyRequest): Promise => { } minedAtBlock = await hasMinedAtBlock(cityConfig, blockHeight, userId) if (minedAtBlock === null) { - return new Response(`Mining record for ${userId} not found at block height: ${blockHeight}`, { status: 404 }) + return new Response( + `Mining record for ${userId} not found at block height: ${blockHeight}`, + { status: 404 }, + ) } + response = await createResponse(minedAtBlock, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(minedAtBlock) return new Response(JSON.stringify(response)) } From ba48aca6bfab73491a7669c4a5e2f850b750e3c5 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 10:51:15 -0700 Subject: [PATCH 42/51] fix: modify mining claim handlers to use new response format --- .../miningclaims/canclaimminingreward.ts | 38 +++++++++++++++---- src/handlers/miningclaims/isblockwinner.ts | 34 +++++++++++++---- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/handlers/miningclaims/canclaimminingreward.ts b/src/handlers/miningclaims/canclaimminingreward.ts index c602971..ccb1e85 100644 --- a/src/handlers/miningclaims/canclaimminingreward.ts +++ b/src/handlers/miningclaims/canclaimminingreward.ts @@ -1,40 +1,62 @@ import { Request as IttyRequest } from 'itty-router' import { canClaimMiningReward } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' -const CanClaimMiningReward = async (request: IttyRequest): Promise => { +const CanClaimMiningReward = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig let canClaimReward: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const blockHeight = request.params?.blockheight ?? undefined const user = request.params?.address ?? undefined - if (version === undefined || city === undefined || blockHeight === undefined || user === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined || + user === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) if (!isStringAllDigits(blockHeight) && blockHeight !== 'current') { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } const currentBlockHeight = await getStacksBlockHeight() // check that maturity window has passed // or will default to false regardless of status if (+blockHeight > +currentBlockHeight - 100 || blockHeight === 'current') { - return new Response(`Invalid request, maturity window of 100 blocks has not passed`, { status: 400 }) + return new Response( + `Invalid request, maturity window of 100 blocks has not passed`, + { status: 400 }, + ) } canClaimReward = await canClaimMiningReward(cityConfig, user, blockHeight) + response = await createResponse(canClaimReward, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(canClaimReward) return new Response(JSON.stringify(response)) } -export default CanClaimMiningReward \ No newline at end of file +export default CanClaimMiningReward diff --git a/src/handlers/miningclaims/isblockwinner.ts b/src/handlers/miningclaims/isblockwinner.ts index 11eac5a..f80c2cd 100644 --- a/src/handlers/miningclaims/isblockwinner.ts +++ b/src/handlers/miningclaims/isblockwinner.ts @@ -1,40 +1,60 @@ import { Request as IttyRequest } from 'itty-router' import { isBlockWinner } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const IsBlockWinner = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let blockWinner: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const blockHeight = request.params?.blockheight ?? undefined const user = request.params?.address ?? undefined - if (version === undefined || city === undefined || blockHeight === undefined || user === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined || + user === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) if (!isStringAllDigits(blockHeight) && blockHeight !== 'current') { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } const currentBlockHeight = await getStacksBlockHeight() // check that maturity window has passed // or will default to false regardless of status if (+blockHeight > +currentBlockHeight - 100 || blockHeight === 'current') { - return new Response(`Invalid request, maturity window of 100 blocks has not passed`, { status: 400 }) + return new Response( + `Invalid request, maturity window of 100 blocks has not passed`, + { status: 400 }, + ) } blockWinner = await isBlockWinner(cityConfig, user, blockHeight) + response = await createResponse(blockWinner, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(blockWinner) return new Response(JSON.stringify(response)) } -export default IsBlockWinner \ No newline at end of file +export default IsBlockWinner From cbd5a365f6dd89b7c3f3726bc546c3779aec937e Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 10:55:09 -0700 Subject: [PATCH 43/51] fix: modify stacking handlers to use new response format --- .../getfirststacksblockinrewardcycle.ts | 34 +++++++++++++++---- src/handlers/stacking/getrewardcycle.ts | 31 +++++++++++++---- src/handlers/stacking/getstackeratcycle.ts | 27 ++++++++++++--- .../stacking/getstackingstatsatcycle.ts | 23 ++++++++++--- .../stacking/stackingactiveatcycle.ts | 28 +++++++++++---- 5 files changed, 114 insertions(+), 29 deletions(-) diff --git a/src/handlers/stacking/getfirststacksblockinrewardcycle.ts b/src/handlers/stacking/getfirststacksblockinrewardcycle.ts index 9812ee9..02c5a19 100644 --- a/src/handlers/stacking/getfirststacksblockinrewardcycle.ts +++ b/src/handlers/stacking/getfirststacksblockinrewardcycle.ts @@ -1,18 +1,33 @@ import { Request as IttyRequest } from 'itty-router' -import { getFirstStacksBlockInRewardCycle, getRewardCycle } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { + getFirstStacksBlockInRewardCycle, + getRewardCycle, +} from '../../lib/citycoins' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' -const GetFirstStacksBlockInRewardCycle = async (request: IttyRequest): Promise => { +const GetFirstStacksBlockInRewardCycle = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig let firstBlockInCycle: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let cycle = request.params?.cycleid ?? undefined if (version === undefined || city === undefined || cycle === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -22,19 +37,24 @@ const GetFirstStacksBlockInRewardCycle = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let rewardCycle: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (version === undefined || city === undefined || blockHeight === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -21,19 +35,24 @@ const GetRewardCycle = async (request: IttyRequest): Promise => { blockHeight = await getStacksBlockHeight() } else { if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } } rewardCycle = await getRewardCycle(cityConfig, blockHeight) if (rewardCycle === null) { - return new Response(`Reward cycle not found at block height: ${blockHeight}`, { status: 404 }) + return new Response( + `Reward cycle not found at block height: ${blockHeight}`, + { status: 404 }, + ) } + response = await createResponse(rewardCycle, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(rewardCycle) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/stacking/getstackeratcycle.ts b/src/handlers/stacking/getstackeratcycle.ts index 5ba996c..3b4b162 100644 --- a/src/handlers/stacking/getstackeratcycle.ts +++ b/src/handlers/stacking/getstackeratcycle.ts @@ -14,8 +14,15 @@ const GetStackerAtCycle = async (request: IttyRequest): Promise => { let cycle = request.params?.cycleid ?? undefined const userId = request.params?.userid ?? undefined const defaultStats = request.params?.default === 'true' ? true : false - if (version === undefined || city === undefined || cycle === undefined || userId === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + cycle === undefined || + userId === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { @@ -25,15 +32,25 @@ const GetStackerAtCycle = async (request: IttyRequest): Promise => { cycle = await getRewardCycle(cityConfig, blockHeight) } else { if (!isStringAllDigits(cycle)) { - return new Response(`Target cycle not specified or invalid`, { status: 400 }) + return new Response(`Target cycle not specified or invalid`, { + status: 400, + }) } } if (!isStringAllDigits(userId)) { return new Response(`User ID not specified or invalid`, { status: 400 }) } - stackerAtCycle = await getStackerAtCycle(cityConfig, cycle, userId, defaultStats) + stackerAtCycle = await getStackerAtCycle( + cityConfig, + cycle, + userId, + defaultStats, + ) if (stackerAtCycle === null) { - return new Response(`Stacker ${userId} not found at reward cycle: ${cycle}`, { status: 404 }) + return new Response( + `Stacker ${userId} not found at reward cycle: ${cycle}`, + { status: 404 }, + ) } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/stacking/getstackingstatsatcycle.ts b/src/handlers/stacking/getstackingstatsatcycle.ts index 5b1230e..5ba7a5d 100644 --- a/src/handlers/stacking/getstackingstatsatcycle.ts +++ b/src/handlers/stacking/getstackingstatsatcycle.ts @@ -5,7 +5,9 @@ import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' import { StackingStatsAtCycle } from '../../types/stacking' -const GetStackingStatsAtCycle = async (request: IttyRequest): Promise => { +const GetStackingStatsAtCycle = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig let stackingStatsAtCycle: StackingStatsAtCycle // check inputs @@ -14,7 +16,9 @@ const GetStackingStatsAtCycle = async (request: IttyRequest): Promise let cycle = request.params?.cycleid ?? undefined const defaultStats = request.params?.default === 'true' ? true : false if (version === undefined || city === undefined || cycle === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { @@ -24,12 +28,21 @@ const GetStackingStatsAtCycle = async (request: IttyRequest): Promise cycle = await getRewardCycle(cityConfig, blockHeight) } else { if (!isStringAllDigits(cycle)) { - return new Response(`Target cycle not specified or invalid`, { status: 400 }) + return new Response(`Target cycle not specified or invalid`, { + status: 400, + }) } } - stackingStatsAtCycle = await getStackingStatsAtCycle(cityConfig, cycle, defaultStats) + stackingStatsAtCycle = await getStackingStatsAtCycle( + cityConfig, + cycle, + defaultStats, + ) if (stackingStatsAtCycle === null) { - return new Response(`Stacking stats not found at reward cycle: ${cycle}`, { status: 404 }) + return new Response( + `Stacking stats not found at reward cycle: ${cycle}`, + { status: 404 }, + ) } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/stacking/stackingactiveatcycle.ts b/src/handlers/stacking/stackingactiveatcycle.ts index 4b1aced..0a268c3 100644 --- a/src/handlers/stacking/stackingactiveatcycle.ts +++ b/src/handlers/stacking/stackingactiveatcycle.ts @@ -1,18 +1,30 @@ import { Request as IttyRequest } from 'itty-router' import { getRewardCycle, stackingActiveAtCycle } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' -const StackingActiveAtCycle = async (request: IttyRequest): Promise => { +const StackingActiveAtCycle = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig let activeAtCycle: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let cycle = request.params?.cycleid ?? undefined if (version === undefined || city === undefined || cycle === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get city configuration object try { @@ -22,19 +34,23 @@ const StackingActiveAtCycle = async (request: IttyRequest): Promise => cycle = await getRewardCycle(cityConfig, blockHeight) } else { if (!isStringAllDigits(cycle)) { - return new Response(`Target cycle not specified or invalid`, { status: 400 }) + return new Response(`Target cycle not specified or invalid`, { + status: 400, + }) } } activeAtCycle = await stackingActiveAtCycle(cityConfig, cycle) if (activeAtCycle === null) { - return new Response(`Stacking info not found at cycle: ${cycle}`, { status: 404 }) + return new Response(`Stacking info not found at cycle: ${cycle}`, { + status: 404, + }) } + response = await createResponse(activeAtCycle, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(activeAtCycle) return new Response(JSON.stringify(response)) } From 4979d097d507b9484c1d49e65f75e16ef01abcac Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 10:56:35 -0700 Subject: [PATCH 44/51] fix: modify stacking claim handler to use new response format --- .../stackingclaims/getstackingreward.ts | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/handlers/stackingclaims/getstackingreward.ts b/src/handlers/stackingclaims/getstackingreward.ts index 66b7bd6..d5b3547 100644 --- a/src/handlers/stackingclaims/getstackingreward.ts +++ b/src/handlers/stackingclaims/getstackingreward.ts @@ -1,19 +1,34 @@ import { Request as IttyRequest } from 'itty-router' import { getRewardCycle, getStackingReward } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetStackingReward = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let stackingReward: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const cycle = request.params?.cycleid ?? undefined const userId = request.params?.userid ?? undefined - if (version === undefined || city === undefined || cycle === undefined || userId === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + cycle === undefined || + userId === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -23,19 +38,24 @@ const GetStackingReward = async (request: IttyRequest): Promise => { } const currentBlockHeight = await getStacksBlockHeight() const currentCycle = await getRewardCycle(cityConfig, currentBlockHeight) - if ((+cycle >= +currentCycle || cycle === 'current') && !cityConfig.core.shutdown) { - return new Response(`Invalid request, cycle still active or in future`, { status: 400 }) + if ( + (+cycle >= +currentCycle || cycle === 'current') && + !cityConfig.core.shutdown + ) { + return new Response(`Invalid request, cycle still active or in future`, { + status: 400, + }) } if (!isStringAllDigits(userId)) { return new Response(`User ID not specified or invalid`, { status: 400 }) } stackingReward = await getStackingReward(cityConfig, cycle, userId) + response = await createResponse(stackingReward, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(stackingReward) return new Response(JSON.stringify(response)) } From ee259ab0b8be4281f7c497a29217fc34cfcbe4ba Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 11:04:38 -0700 Subject: [PATCH 45/51] fix: modify stacks handlers to use new response format --- src/handlers/stacks/getbnsname.ts | 20 ++++++++++++--- src/handlers/stacks/getdateatblock.ts | 22 ++++++++++++---- src/handlers/stacks/getstacksblockheight.ts | 27 ++++++++++++++------ src/handlers/stacks/getstxbalance.ts | 28 +++++++++++++++------ 4 files changed, 73 insertions(+), 24 deletions(-) diff --git a/src/handlers/stacks/getbnsname.ts b/src/handlers/stacks/getbnsname.ts index 9c38252..57812c6 100644 --- a/src/handlers/stacks/getbnsname.ts +++ b/src/handlers/stacks/getbnsname.ts @@ -1,26 +1,38 @@ import { Request as IttyRequest } from 'itty-router' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { getBnsName } from '../../lib/stacks' +import { SingleValue } from '../../types/common' const GetBnsName = async (request: IttyRequest): Promise => { let bnsNames: string + let response: SingleValue | boolean | number | string // check inputs const address = request.params?.address ?? undefined if (address === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { bnsNames = await getBnsName(address) if (bnsNames === 'undefined') { - return new Response(`BNS name(s) not found for address: ${address}`, { status: 404 }) + return new Response(`BNS name(s) not found for address: ${address}`, { + status: 404, + }) } + response = await createResponse(bnsNames, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(bnsNames) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/stacks/getdateatblock.ts b/src/handlers/stacks/getdateatblock.ts index 9329c51..5901166 100644 --- a/src/handlers/stacks/getdateatblock.ts +++ b/src/handlers/stacks/getdateatblock.ts @@ -1,13 +1,23 @@ import { Request as IttyRequest } from 'itty-router' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getDateAtBlock, getStacksBlockHeight } from '../../lib/stacks' +import { SingleValue } from '../../types/common' const GetDateAtBlock = async (request: IttyRequest): Promise => { let dateAtBlock: string + let response: SingleValue | boolean | number | string // check inputs let blockHeight = request.params?.blockHeight ?? undefined if (blockHeight === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -15,17 +25,19 @@ const GetDateAtBlock = async (request: IttyRequest): Promise => { blockHeight = await getStacksBlockHeight() } else { if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } } dateAtBlock = await getDateAtBlock(blockHeight) + response = await createResponse(dateAtBlock, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(dateAtBlock) return new Response(JSON.stringify(response)) } -export default GetDateAtBlock \ No newline at end of file +export default GetDateAtBlock diff --git a/src/handlers/stacks/getstacksblockheight.ts b/src/handlers/stacks/getstacksblockheight.ts index 2e78ec2..e8a4da2 100644 --- a/src/handlers/stacks/getstacksblockheight.ts +++ b/src/handlers/stacks/getstacksblockheight.ts @@ -1,15 +1,28 @@ -import { createSingleValue } from '../../lib/common' +import { Request as IttyRequest } from 'itty-router' +import { createResponse } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' +import { SingleValue } from '../../types/common' -const GetStacksBlockHeight = async (): Promise => { +const GetStacksBlockHeight = async ( + request: IttyRequest, +): Promise => { + let currentBlockHeight: string + let response: SingleValue | boolean | number | string + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format + } // get Stacks block height from API - const currentBlockHeight = await getStacksBlockHeight() - .catch(() => { return '' }) - if (currentBlockHeight === '') { - return new Response(`Stacks block height not found, please try again`, { status: 404 }) + try { + currentBlockHeight = await getStacksBlockHeight() + response = await createResponse(currentBlockHeight, format) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(currentBlockHeight) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/stacks/getstxbalance.ts b/src/handlers/stacks/getstxbalance.ts index 771c5e6..51681c1 100644 --- a/src/handlers/stacks/getstxbalance.ts +++ b/src/handlers/stacks/getstxbalance.ts @@ -1,21 +1,33 @@ import { Request as IttyRequest } from 'itty-router' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { getStxBalance } from '../../lib/stacks' +import { SingleValue } from '../../types/common' const GetStxBalance = async (request: IttyRequest): Promise => { + let stxBalance: string + let response: SingleValue | boolean | number | string // check inputs const address = request.params?.address ?? undefined if (address === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } - // get Stacks balance in uSTX from API - const stxBalance = await getStxBalance(address) - .catch(() => { return '' }) - if (stxBalance === '') { - return new Response(`Stacks balance not found for address: ${address}`, { status: 404 }) + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format + } + // get/calculate response + try { + stxBalance = await getStxBalance(address) + response = await createResponse(stxBalance, format) + } catch (err) { + if (err instanceof Error) return new Response(err.message, { status: 404 }) + return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(stxBalance) return new Response(JSON.stringify(response)) } From 23e46ed110cb7eddf052bc00c9861c98839e62ba Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 11:16:17 -0700 Subject: [PATCH 46/51] fix: modify token handlers to use new response format --- src/handlers/token/getbalance.ts | 16 +++++++++-- src/handlers/token/getcoinbaseamount.ts | 31 +++++++++++++++++---- src/handlers/token/getcoinbaseamounts.ts | 4 ++- src/handlers/token/getcoinbasethresholds.ts | 12 ++++++-- src/handlers/token/getdecimals.ts | 16 +++++++++-- src/handlers/token/getfulltotalsupply.ts | 18 ++++++++---- src/handlers/token/getname.ts | 16 +++++++++-- src/handlers/token/getsymbol.ts | 16 +++++++++-- src/handlers/token/gettokenuri.ts | 16 +++++++++-- src/handlers/token/gettokenurijson.ts | 6 ++-- src/handlers/token/gettotalsupply.ts | 16 +++++++++-- 11 files changed, 132 insertions(+), 35 deletions(-) diff --git a/src/handlers/token/getbalance.ts b/src/handlers/token/getbalance.ts index ccda2df..6a73816 100644 --- a/src/handlers/token/getbalance.ts +++ b/src/handlers/token/getbalance.ts @@ -1,28 +1,38 @@ import { Request as IttyRequest } from 'itty-router' import { getBalance } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetBalance = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let balance: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const user = request.params?.address ?? undefined if (version === undefined || city === undefined || user === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) balance = await getBalance(cityConfig, user) + response = await createResponse(balance, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(balance) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/token/getcoinbaseamount.ts b/src/handlers/token/getcoinbaseamount.ts index 85dd325..e2f389f 100644 --- a/src/handlers/token/getcoinbaseamount.ts +++ b/src/handlers/token/getcoinbaseamount.ts @@ -1,18 +1,32 @@ import { Request as IttyRequest } from 'itty-router' import { getCoinbaseAmount } from '../../lib/citycoins' -import { createSingleValue, isStringAllDigits } from '../../lib/common' +import { createResponse, isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetCoinbaseAmount = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let coinbaseAmount: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined let blockHeight = request.params?.blockheight ?? undefined - if (version === undefined || city === undefined || blockHeight === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + if ( + version === undefined || + city === undefined || + blockHeight === undefined + ) { + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -23,20 +37,25 @@ const GetCoinbaseAmount = async (request: IttyRequest): Promise => { } else { // verify block height is valid number if (!isStringAllDigits(blockHeight)) { - return new Response(`Block height not specified or invalid`, { status: 400 }) + return new Response(`Block height not specified or invalid`, { + status: 400, + }) } } // get coinbase thresholds coinbaseAmount = await getCoinbaseAmount(cityConfig, blockHeight) if (coinbaseAmount === null) { - return new Response(`Coinbase amount not found at block height: ${blockHeight}`, { status: 404 }) + return new Response( + `Coinbase amount not found at block height: ${blockHeight}`, + { status: 404 }, + ) } + response = await createResponse(coinbaseAmount, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(coinbaseAmount) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/token/getcoinbaseamounts.ts b/src/handlers/token/getcoinbaseamounts.ts index 09496f5..120e3de 100644 --- a/src/handlers/token/getcoinbaseamounts.ts +++ b/src/handlers/token/getcoinbaseamounts.ts @@ -10,7 +10,9 @@ const GetCoinbaseAmounts = async (request: IttyRequest): Promise => { const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { diff --git a/src/handlers/token/getcoinbasethresholds.ts b/src/handlers/token/getcoinbasethresholds.ts index 986a8ba..baef5a9 100644 --- a/src/handlers/token/getcoinbasethresholds.ts +++ b/src/handlers/token/getcoinbasethresholds.ts @@ -3,21 +3,27 @@ import { getCoinbaseThresholds } from '../../lib/citycoins' import { CityConfig, getCityConfig } from '../../types/cities' import { CoinbaseThresholds } from '../../types/token' -const GetCoinbaseThresholds = async (request: IttyRequest): Promise => { +const GetCoinbaseThresholds = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig let coinbaseThresholds: CoinbaseThresholds // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { cityConfig = await getCityConfig(city, version) coinbaseThresholds = await getCoinbaseThresholds(cityConfig) if (coinbaseThresholds === null) { - return new Response(`Coinbase thresholds not found for city: ${city}`, { status: 404 }) + return new Response(`Coinbase thresholds not found for city: ${city}`, { + status: 404, + }) } } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) diff --git a/src/handlers/token/getdecimals.ts b/src/handlers/token/getdecimals.ts index 0cc98b8..1b0a3e9 100644 --- a/src/handlers/token/getdecimals.ts +++ b/src/handlers/token/getdecimals.ts @@ -1,27 +1,37 @@ import { Request as IttyRequest } from 'itty-router' import { getDecimals } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetDecimals = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let decimals: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) decimals = await getDecimals(cityConfig) + response = await createResponse(decimals, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(decimals) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/token/getfulltotalsupply.ts b/src/handlers/token/getfulltotalsupply.ts index aeb7b48..925b9ff 100644 --- a/src/handlers/token/getfulltotalsupply.ts +++ b/src/handlers/token/getfulltotalsupply.ts @@ -1,10 +1,12 @@ import { Request as IttyRequest } from 'itty-router' import { getTotalSupply } from '../../lib/citycoins' -import { createSingleValue, MICRO_UNITS } from '../../lib/common' +import { createResponse, MICRO_UNITS } from '../../lib/common' import { getCityConfig, getCityInfo } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetFullTotalSupply = async (request: IttyRequest): Promise => { let totalSupply = 0 + let response: SingleValue | boolean | number | string // check inputs const city = request.params?.cityname ?? undefined if (city === undefined) { @@ -12,6 +14,12 @@ const GetFullTotalSupply = async (request: IttyRequest): Promise => { status: 400, }) } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format + } // get/calculate response try { const cityInfo = await getCityInfo(city) @@ -21,15 +29,15 @@ const GetFullTotalSupply = async (request: IttyRequest): Promise => { console.log(city, version, supply) totalSupply += version === 'v1' ? +supply * MICRO_UNITS : +supply } - console.log(`totalSupply: ${totalSupply}`) + response = await createResponse( + (totalSupply / MICRO_UNITS).toFixed(6), + format, + ) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue( - (totalSupply / MICRO_UNITS).toFixed(6), - ) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/token/getname.ts b/src/handlers/token/getname.ts index 47155e5..bd63af2 100644 --- a/src/handlers/token/getname.ts +++ b/src/handlers/token/getname.ts @@ -1,27 +1,37 @@ import { Request as IttyRequest } from 'itty-router' import { getName } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetName = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let name: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) name = await getName(cityConfig) + response = await createResponse(name, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(name) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/token/getsymbol.ts b/src/handlers/token/getsymbol.ts index 03e2b53..f3ed838 100644 --- a/src/handlers/token/getsymbol.ts +++ b/src/handlers/token/getsymbol.ts @@ -1,27 +1,37 @@ import { Request as IttyRequest } from 'itty-router' import { getSymbol } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetSymbol = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let symbol: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) symbol = await getSymbol(cityConfig) + response = await createResponse(symbol, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(symbol) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/token/gettokenuri.ts b/src/handlers/token/gettokenuri.ts index c8da4c2..d797129 100644 --- a/src/handlers/token/gettokenuri.ts +++ b/src/handlers/token/gettokenuri.ts @@ -1,27 +1,37 @@ import { Request as IttyRequest } from 'itty-router' import { getTokenUri } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetTokenUri = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let tokenUri: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) tokenUri = await getTokenUri(cityConfig) + response = await createResponse(tokenUri, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(tokenUri) return new Response(JSON.stringify(response)) } diff --git a/src/handlers/token/gettokenurijson.ts b/src/handlers/token/gettokenurijson.ts index 62e301a..c997e11 100644 --- a/src/handlers/token/gettokenurijson.ts +++ b/src/handlers/token/gettokenurijson.ts @@ -10,13 +10,15 @@ const GetTokenUriJson = async (request: IttyRequest): Promise => { const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { cityConfig = await getCityConfig(city, version) tokenUri = await getTokenUri(cityConfig) - tokenUriJson = await fetch(tokenUri).then(res => res.json()) + tokenUriJson = await fetch(tokenUri).then((res) => res.json()) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) diff --git a/src/handlers/token/gettotalsupply.ts b/src/handlers/token/gettotalsupply.ts index b0da91d..da7cd0b 100644 --- a/src/handlers/token/gettotalsupply.ts +++ b/src/handlers/token/gettotalsupply.ts @@ -1,27 +1,37 @@ import { Request as IttyRequest } from 'itty-router' import { getTotalSupply } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { CityConfig, getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const GetTotalSupply = async (request: IttyRequest): Promise => { let cityConfig: CityConfig let totalSupply: string + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { cityConfig = await getCityConfig(city, version) totalSupply = await getTotalSupply(cityConfig) + response = await createResponse(totalSupply, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(totalSupply) return new Response(JSON.stringify(response)) } From b94026a64aabb858ea2bf7b75c305bde04be6080 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 11:19:43 -0700 Subject: [PATCH 47/51] fix: modify tools handlers to use new response format --- src/handlers/tools/getcityconfiguration.ts | 8 ++++++-- src/handlers/tools/getcityinfo.ts | 4 +++- src/handlers/tools/getfullcityconfiguration.ts | 8 ++++++-- src/handlers/tools/getprices.ts | 4 +++- src/handlers/tools/proofofhodl.ts | 15 ++++++++++++--- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/handlers/tools/getcityconfiguration.ts b/src/handlers/tools/getcityconfiguration.ts index 3165931..54044d5 100644 --- a/src/handlers/tools/getcityconfiguration.ts +++ b/src/handlers/tools/getcityconfiguration.ts @@ -1,13 +1,17 @@ import { Request as IttyRequest } from 'itty-router' import { CityConfig, getCityConfig } from '../../types/cities' -const GetCityConfiguration = async (request: IttyRequest): Promise => { +const GetCityConfiguration = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityConfig // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { diff --git a/src/handlers/tools/getcityinfo.ts b/src/handlers/tools/getcityinfo.ts index c0a977b..cc20210 100644 --- a/src/handlers/tools/getcityinfo.ts +++ b/src/handlers/tools/getcityinfo.ts @@ -6,7 +6,9 @@ const GetCityInfo = async (request: IttyRequest): Promise => { // check inputs const city = request.params?.cityname ?? undefined if (city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { diff --git a/src/handlers/tools/getfullcityconfiguration.ts b/src/handlers/tools/getfullcityconfiguration.ts index b63de08..78094df 100644 --- a/src/handlers/tools/getfullcityconfiguration.ts +++ b/src/handlers/tools/getfullcityconfiguration.ts @@ -1,12 +1,16 @@ import { Request as IttyRequest } from 'itty-router' import { CityVersions, getFullCityConfig } from '../../types/cities' -const GetFullCityConfiguration = async (request: IttyRequest): Promise => { +const GetFullCityConfiguration = async ( + request: IttyRequest, +): Promise => { let cityConfig: CityVersions // check inputs const city = request.params?.cityname ?? undefined if (city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { diff --git a/src/handlers/tools/getprices.ts b/src/handlers/tools/getprices.ts index 6790725..07550b4 100644 --- a/src/handlers/tools/getprices.ts +++ b/src/handlers/tools/getprices.ts @@ -12,7 +12,9 @@ const GetPrices = async (request: IttyRequest): Promise => { const city = request.params?.cityname ?? undefined const currency = request.params?.currency ?? undefined if (version === undefined || city === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) } // get/calculate response try { diff --git a/src/handlers/tools/proofofhodl.ts b/src/handlers/tools/proofofhodl.ts index 55eff61..171ab98 100644 --- a/src/handlers/tools/proofofhodl.ts +++ b/src/handlers/tools/proofofhodl.ts @@ -1,17 +1,26 @@ import { Request as IttyRequest } from 'itty-router' import { getProofOfHodl } from '../../lib/citycoins' -import { createSingleValue } from '../../lib/common' +import { createResponse } from '../../lib/common' import { getCityConfig } from '../../types/cities' const ProofOfHodl = async (request: IttyRequest): Promise => { let cityConfig let hodl + let response: SingleValue | boolean | number | string // check inputs const version = request.params?.version ?? undefined const city = request.params?.cityname ?? undefined const user = request.params?.address ?? undefined if (version === undefined || city === undefined || user === undefined) { - return new Response(`Invalid request, missing parameter(s)`, { status: 400 }) + return new Response(`Invalid request, missing parameter(s)`, { + status: 400, + }) + } + // check response output format + let format = 'json' + const { query } = request + if (Object.prototype.hasOwnProperty.call(query, 'format')) { + if (query?.format !== undefined) format = query.format } // get/calculate response try { @@ -19,12 +28,12 @@ const ProofOfHodl = async (request: IttyRequest): Promise => { cityConfig = await getCityConfig(city, version) // check if user is hodling hodl = await getProofOfHodl(cityConfig, user) + response = await createResponse(hodl, format) } catch (err) { if (err instanceof Error) return new Response(err.message, { status: 404 }) return new Response(String(err), { status: 404 }) } // return response - const response = await createSingleValue(hodl) return new Response(JSON.stringify(response)) } From 94f0d8f538c39d1fa09a74e969fb69d8e187c9dc Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 11:25:23 -0700 Subject: [PATCH 48/51] chore: code cleanup, apply prettier formatting --- src/handlers/mining/getminingstatsatblock.ts | 1 - src/index.ts | 12 +- src/lib/citycoins.ts | 668 ++++++++++++------- src/lib/prices.ts | 11 +- src/lib/stacks.ts | 26 +- src/types/cities.ts | 105 +-- src/types/mining.ts | 19 +- src/types/stacking.ts | 9 +- src/types/token.ts | 31 +- 9 files changed, 536 insertions(+), 346 deletions(-) diff --git a/src/handlers/mining/getminingstatsatblock.ts b/src/handlers/mining/getminingstatsatblock.ts index 258deee..3783f7f 100644 --- a/src/handlers/mining/getminingstatsatblock.ts +++ b/src/handlers/mining/getminingstatsatblock.ts @@ -3,7 +3,6 @@ import { getMiningStatsAtBlock } from '../../lib/citycoins' import { isStringAllDigits } from '../../lib/common' import { getStacksBlockHeight } from '../../lib/stacks' import { CityConfig, getCityConfig } from '../../types/cities' -import { SingleValue } from '../../types/common' import { MiningStatsAtBlock } from '../../types/mining' const GetMiningStatsAtBlock = async ( diff --git a/src/index.ts b/src/index.ts index 026bfcf..f6a73b3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,9 @@ import { Router } from 'itty-router' -import { getAssetFromKV, MethodNotAllowedError, NotFoundError } from '@cloudflare/kv-asset-handler' +import { + getAssetFromKV, + MethodNotAllowedError, + NotFoundError, +} from '@cloudflare/kv-asset-handler' import Landing from './handlers/landing' import Documentation from './handlers/documentation' import * as Stacks from './handlers/stacks' @@ -13,6 +17,7 @@ import * as Tools from './handlers/tools' const router = Router() +// prettier-ignore router // main landing pages .get('/', Landing) @@ -75,7 +80,10 @@ export const handleRequest = async (request: Request): Promise => { const response: Response = await router.handle(request) const newResponse = new Response(response.body, response) newResponse.headers.append('Access-Control-Allow-Origin', '*') - newResponse.headers.append('Access-Control-Allow-Methods', 'GET, HEAD, POST, OPTIONS') + newResponse.headers.append( + 'Access-Control-Allow-Methods', + 'GET, HEAD, POST, OPTIONS', + ) newResponse.headers.append('Access-Control-Max-Age', '86400') newResponse.headers.append('CityCoins-API', '2.0.0') return newResponse diff --git a/src/lib/citycoins.ts b/src/lib/citycoins.ts index 37e5fe0..479f8d3 100644 --- a/src/lib/citycoins.ts +++ b/src/lib/citycoins.ts @@ -1,5 +1,5 @@ import { fetchReadOnlyFunction } from 'micro-stacks/api' -import { validateStacksAddress } from "micro-stacks/crypto" +import { validateStacksAddress } from 'micro-stacks/crypto' import { standardPrincipalCV, uintCV } from 'micro-stacks/clarity' import { CityConfig } from '../types/cities' import { MinerAtBlock, MiningStatsAtBlock } from '../types/mining' @@ -12,351 +12,517 @@ import { getStacksBlockHeight } from './stacks' // ACTIVATION FUNCTIONS ////////////////////////////////////////////////// -export async function getActivationBlock(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-activation-block', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer - }, true) +export async function getActivationBlock( + cityConfig: CityConfig, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-activation-block', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getActivationTarget(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-activation-target', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer - }, true) +export async function getActivationTarget( + cityConfig: CityConfig, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-activation-target', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } export async function getCityWallet(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.auth.name, - functionName: 'get-city-wallet', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.auth.name, + functionName: 'get-city-wallet', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getRegisteredUsersNonce(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-registered-users-nonce', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer - }, true) +export async function getRegisteredUsersNonce( + cityConfig: CityConfig, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-registered-users-nonce', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getUser(cityConfig: CityConfig, id: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-user', - functionArgs: [uintCV(id)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getUser( + cityConfig: CityConfig, + id: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-user', + functionArgs: [uintCV(id)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getUserId(cityConfig: CityConfig, address: string): Promise { +export async function getUserId( + cityConfig: CityConfig, + address: string, +): Promise { if (!validateStacksAddress(address)) { throw new Error(`Invalid Stacks address: ${address}`) } - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-user-id', - functionArgs: [standardPrincipalCV(address)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-user-id', + functionArgs: [standardPrincipalCV(address)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } ////////////////////////////////////////////////// // MINING FUNCTIONS ////////////////////////////////////////////////// -export async function getBlockWinnerId(cityConfig: CityConfig, blockHeight: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-block-winner-id', - functionArgs: [uintCV(blockHeight)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getBlockWinnerId( + cityConfig: CityConfig, + blockHeight: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-block-winner-id', + functionArgs: [uintCV(blockHeight)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getMiningStatsAtBlock(cityConfig: CityConfig, blockHeight: string, defaultStats = false): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: defaultStats ? 'get-mining-stats-at-block-or-default' : 'get-mining-stats-at-block', - functionArgs: [uintCV(blockHeight)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getMiningStatsAtBlock( + cityConfig: CityConfig, + blockHeight: string, + defaultStats = false, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: defaultStats + ? 'get-mining-stats-at-block-or-default' + : 'get-mining-stats-at-block', + functionArgs: [uintCV(blockHeight)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getMinerAtBlock(cityConfig: CityConfig, blockHeight: string, userId: string, defaultStats = false): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: defaultStats ? 'get-miner-at-block-or-default' : 'get-miner-at-block', - functionArgs: [uintCV(blockHeight), uintCV(userId)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getMinerAtBlock( + cityConfig: CityConfig, + blockHeight: string, + userId: string, + defaultStats = false, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: defaultStats + ? 'get-miner-at-block-or-default' + : 'get-miner-at-block', + functionArgs: [uintCV(blockHeight), uintCV(userId)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getLastHighValueAtBlock(cityConfig: CityConfig, blockHeight: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-last-high-value-at-block', - functionArgs: [uintCV(blockHeight)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getLastHighValueAtBlock( + cityConfig: CityConfig, + blockHeight: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-last-high-value-at-block', + functionArgs: [uintCV(blockHeight)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function hasMinedAtBlock(cityConfig: CityConfig, blockHeight: string, userId: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'has-mined-at-block', - functionArgs: [uintCV(blockHeight), uintCV(userId)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function hasMinedAtBlock( + cityConfig: CityConfig, + blockHeight: string, + userId: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'has-mined-at-block', + functionArgs: [uintCV(blockHeight), uintCV(userId)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } ////////////////////////////////////////////////// // MINING CLAIM FUNCTIONS ////////////////////////////////////////////////// -export async function canClaimMiningReward(cityConfig: CityConfig, address: string, blockHeight: string): Promise { +export async function canClaimMiningReward( + cityConfig: CityConfig, + address: string, + blockHeight: string, +): Promise { if (!validateStacksAddress(address)) { throw new Error(`Invalid Stacks address: ${address}`) } - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'can-claim-mining-reward', - functionArgs: [standardPrincipalCV(address), uintCV(blockHeight)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'can-claim-mining-reward', + functionArgs: [standardPrincipalCV(address), uintCV(blockHeight)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function isBlockWinner(cityConfig: CityConfig, address: string, blockHeight: string): Promise { +export async function isBlockWinner( + cityConfig: CityConfig, + address: string, + blockHeight: string, +): Promise { if (!validateStacksAddress(address)) { throw new Error(`Invalid Stacks address: ${address}`) } - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'is-block-winner', - functionArgs: [standardPrincipalCV(address), uintCV(blockHeight)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'is-block-winner', + functionArgs: [standardPrincipalCV(address), uintCV(blockHeight)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } ////////////////////////////////////////////////// // STACKING FUNCTIONS ////////////////////////////////////////////////// -export async function getStackingStatsAtCycle(cityConfig: CityConfig, cycleId: string, defaultStats = false): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: defaultStats ? 'get-stacking-stats-at-cycle-or-default' : 'get-stacking-stats-at-cycle', - functionArgs: [uintCV(cycleId)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getStackingStatsAtCycle( + cityConfig: CityConfig, + cycleId: string, + defaultStats = false, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: defaultStats + ? 'get-stacking-stats-at-cycle-or-default' + : 'get-stacking-stats-at-cycle', + functionArgs: [uintCV(cycleId)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getStackerAtCycle(cityConfig: CityConfig, cycleId: string, userId: string, defaultStats = false): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: defaultStats ? 'get-stacker-at-cycle-or-default' : 'get-stacker-at-cycle', - functionArgs: [uintCV(cycleId), uintCV(userId)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getStackerAtCycle( + cityConfig: CityConfig, + cycleId: string, + userId: string, + defaultStats = false, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: defaultStats + ? 'get-stacker-at-cycle-or-default' + : 'get-stacker-at-cycle', + functionArgs: [uintCV(cycleId), uintCV(userId)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getRewardCycle(cityConfig: CityConfig, blockHeight: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-reward-cycle', - functionArgs: [uintCV(blockHeight)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getRewardCycle( + cityConfig: CityConfig, + blockHeight: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-reward-cycle', + functionArgs: [uintCV(blockHeight)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getFirstStacksBlockInRewardCycle(cityConfig: CityConfig, cycleId: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-first-stacks-block-in-reward-cycle', - functionArgs: [uintCV(cycleId)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getFirstStacksBlockInRewardCycle( + cityConfig: CityConfig, + cycleId: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-first-stacks-block-in-reward-cycle', + functionArgs: [uintCV(cycleId)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function stackingActiveAtCycle(cityConfig: CityConfig, cycleId: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'stacking-active-at-cycle', - functionArgs: [uintCV(cycleId)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function stackingActiveAtCycle( + cityConfig: CityConfig, + cycleId: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'stacking-active-at-cycle', + functionArgs: [uintCV(cycleId)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } ////////////////////////////////////////////////// // STACKING CLAIM FUNCTIONS ////////////////////////////////////////////////// -export async function getStackingReward(cityConfig: CityConfig, cycleId: string, userId: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-stacking-reward', - functionArgs: [uintCV(userId), uintCV(cycleId)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getStackingReward( + cityConfig: CityConfig, + cycleId: string, + userId: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-stacking-reward', + functionArgs: [uintCV(userId), uintCV(cycleId)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } ////////////////////////////////////////////////// // TOKEN FUNCTIONS ////////////////////////////////////////////////// -export async function getCoinbaseAmounts(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-coinbase-amounts', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getCoinbaseAmounts( + cityConfig: CityConfig, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-coinbase-amounts', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getCoinbaseThresholds(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.token.name, - functionName: 'get-coinbase-thresholds', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getCoinbaseThresholds( + cityConfig: CityConfig, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, + functionName: 'get-coinbase-thresholds', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getCoinbaseAmount(cityConfig: CityConfig, blockHeight: string): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.core.name, - functionName: 'get-coinbase-amount', - functionArgs: [uintCV(blockHeight)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) +export async function getCoinbaseAmount( + cityConfig: CityConfig, + blockHeight: string, +): Promise { + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.core.name, + functionName: 'get-coinbase-amount', + functionArgs: [uintCV(blockHeight)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } export async function getName(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.token.name, - functionName: 'get-name', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, + functionName: 'get-name', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } export async function getSymbol(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.token.name, - functionName: 'get-symbol', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, + functionName: 'get-symbol', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } export async function getDecimals(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.token.name, - functionName: 'get-decimals', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, + functionName: 'get-decimals', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } -export async function getBalance(cityConfig: CityConfig, address: string): Promise { +export async function getBalance( + cityConfig: CityConfig, + address: string, +): Promise { if (!validateStacksAddress(address)) { throw new Error(`Invalid Stacks address: ${address}`) } - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.token.name, - functionName: 'get-balance', - functionArgs: [standardPrincipalCV(address)], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, + functionName: 'get-balance', + functionArgs: [standardPrincipalCV(address)], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } export async function getTotalSupply(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.token.name, - functionName: 'get-total-supply', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, + functionName: 'get-total-supply', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } export async function getTokenUri(cityConfig: CityConfig): Promise { - return fetchReadOnlyFunction({ - contractAddress: cityConfig.deployer, - contractName: cityConfig.token.name, - functionName: 'get-token-uri', - functionArgs: [], - network: STACKS_NETWORK, - senderAddress: cityConfig.deployer, - }, true) + return fetchReadOnlyFunction( + { + contractAddress: cityConfig.deployer, + contractName: cityConfig.token.name, + functionName: 'get-token-uri', + functionArgs: [], + network: STACKS_NETWORK, + senderAddress: cityConfig.deployer, + }, + true, + ) } ////////////////////////////////////////////////// // UTILITY FUNCTIONS ////////////////////////////////////////////////// -export async function getProofOfHodl(cityConfig: CityConfig, address: string): Promise { +export async function getProofOfHodl( + cityConfig: CityConfig, + address: string, +): Promise { let userId: string let balance: string let stacker: StackerAtCycle @@ -375,7 +541,11 @@ export async function getProofOfHodl(cityConfig: CityConfig, address: string): P const currentCycle = await getRewardCycle(cityConfig, currentBlock) // check if user is stacking at current cycle stacker = await getStackerAtCycle(cityConfig, currentCycle, userId) - if (stacker === null) { return false } else { return true } + if (stacker === null) { + return false + } else { + return true + } } catch (err) { if (err instanceof Error) throw new Error(err.message) throw new Error(String(err)) diff --git a/src/lib/prices.ts b/src/lib/prices.ts index bba8b4a..2ff1c00 100644 --- a/src/lib/prices.ts +++ b/src/lib/prices.ts @@ -1,7 +1,10 @@ -import { CGSimplePrice, Prices } from "../types/common"; +import { CGSimplePrice, Prices } from '../types/common' -export async function getCGPrice(tokenName: string, currency?: string): Promise { - currency = currency ?? "usd"; +export async function getCGPrice( + tokenName: string, + currency?: string, +): Promise { + currency = currency ?? 'usd' // https://www.coingecko.com/api/documentations/v3#/simple/get_simple_price const tokenId = tokenName === 'newyorkcitycoin' ? 'nycccoin' : tokenName const url = `https://api.coingecko.com/api/v3/simple/price?ids=${tokenId}&vs_currencies=${currency}` @@ -11,7 +14,7 @@ export async function getCGPrice(tokenName: string, currency?: string): Promise< } const json: CGSimplePrice = await response.json() const prices: Prices = { - "coingecko": json[tokenId][currency] + coingecko: json[tokenId][currency], } return prices } diff --git a/src/lib/stacks.ts b/src/lib/stacks.ts index 3222abc..63ad3e2 100644 --- a/src/lib/stacks.ts +++ b/src/lib/stacks.ts @@ -1,16 +1,18 @@ import { STACKS_NETWORK } from './common' -import { validateStacksAddress } from "micro-stacks/crypto" +import { validateStacksAddress } from 'micro-stacks/crypto' export async function getStacksBlockHeight(): Promise { const url = `${STACKS_NETWORK.getCoreApiUrl()}/v2/info` return fetch(url) - .then(response => { + .then((response) => { if (!response.ok) { throw new Error(`${response.status} ${response.statusText}`) } return response.json() as Promise<{ stacks_tip_height: string }> }) - .then(data => { return data.stacks_tip_height }) + .then((data) => { + return data.stacks_tip_height + }) } export async function getStxBalance(address: string): Promise { @@ -19,13 +21,15 @@ export async function getStxBalance(address: string): Promise { } const url = `${STACKS_NETWORK.getCoreApiUrl()}/extended/v1/address/${address}/stx` return fetch(url) - .then(response => { + .then((response) => { if (!response.ok) { throw new Error(`${response.status} ${response.statusText}`) } return response.json() as Promise<{ balance: string }> }) - .then(data => { return data.balance }) + .then((data) => { + return data.balance + }) } export async function getBnsName(address: string): Promise { @@ -34,23 +38,27 @@ export async function getBnsName(address: string): Promise { } const url = `${STACKS_NETWORK.getCoreApiUrl()}/v1/addresses/stacks/${address}` return fetch(url) - .then(response => { + .then((response) => { if (!response.ok) { throw new Error(`${response.status} ${response.statusText}`) } return response.json() as Promise<{ names: string }> }) - .then(data => { return String(data.names[0]) }) + .then((data) => { + return String(data.names[0]) + }) } export async function getDateAtBlock(blockHeight: string): Promise { const url = `${STACKS_NETWORK.getCoreApiUrl()}/extended/v1/block/by_height/${blockHeight}` return fetch(url) - .then(response => { + .then((response) => { if (!response.ok) { throw new Error(`${response.status} ${response.statusText}`) } return response.json() as Promise<{ burn_block_time_iso: string }> }) - .then(data => { return data.burn_block_time_iso }) + .then((data) => { + return data.burn_block_time_iso + }) } diff --git a/src/types/cities.ts b/src/types/cities.ts index 4c6adc3..418a9fa 100644 --- a/src/types/cities.ts +++ b/src/types/cities.ts @@ -5,9 +5,9 @@ export interface CityList { } export interface CityInfo { - fullName: string, - logo: string, - versions: string[], + fullName: string + logo: string + versions: string[] currentVersion: string } @@ -16,37 +16,37 @@ export interface CityVersions { } export interface CityConfig { - cityName: string, - deployed: boolean, - deployer: string, - auth: AuthContract, - core: CoreContract, - token: TokenContract, + cityName: string + deployed: boolean + deployer: string + auth: AuthContract + core: CoreContract + token: TokenContract } export interface AuthContract { - name: string, - initialized: boolean, + name: string + initialized: boolean } export interface CoreContract { - name: string, - activated: boolean, - startBlock?: number, - shutdown: boolean, - shutdownBlock?: number, + name: string + activated: boolean + startBlock?: number + shutdown: boolean + shutdownBlock?: number } export interface TokenContract { - name: string, - activated: true, - activationBlock?: number, - displayName: string, - tokenName: string, - symbol: string, - decimals: number, - logo: string, - uri: string, + name: string + activated: true + activationBlock?: number + displayName: string + tokenName: string + symbol: string + decimals: number + logo: string + uri: string } // MIAMICOIN @@ -55,11 +55,11 @@ const miaInfo: CityInfo = { fullName: 'Miami', logo: 'https://cdn.citycoins.co/brand/MIA_Miami/Coins/SVG/MiamiCoin_StandAlone_Coin.svg', versions: ['v1', 'v2'], - currentVersion: 'v2' + currentVersion: 'v2', } const miaConfig: CityVersions = { - 'v1': { + v1: { cityName: 'Miami', deployed: true, deployer: 'SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27', @@ -86,7 +86,7 @@ const miaConfig: CityVersions = { uri: 'https://cdn.citycoins.co/metadata/miamicoin.json', }, }, - 'v2': { + v2: { cityName: 'Miami', deployed: true, deployer: 'SP1H1733V5MZ3SZ9XRW9FKYGEZT0JDGEB8Y634C7R', @@ -111,7 +111,7 @@ const miaConfig: CityVersions = { logo: 'https://cdn.citycoins.co/logos/miamicoin.png', uri: 'https://cdn.citycoins.co/metadata/miamicoin.json', }, - } + }, } // NEWYORKCITYCOIN @@ -120,11 +120,11 @@ const nycInfo: CityInfo = { fullName: 'New York City', logo: 'https://cdn.citycoins.co/brand/NYC_NewYorkCity/Coins/SVG/CC_NYCCoin_StandAloneCoin.svg', versions: ['v1', 'v2'], - currentVersion: 'v2' + currentVersion: 'v2', } const nycConfig: CityVersions = { - 'v1': { + v1: { cityName: 'New York City', deployed: true, deployer: 'SP2H8PY27SEZ03MWRKS5XABZYQN17ETGQS3527SA5', @@ -151,7 +151,7 @@ const nycConfig: CityVersions = { uri: 'https://cdn.citycoins.co/metadata/newyorkcitycoin.json', }, }, - 'v2': { + v2: { cityName: 'New York City', deployed: true, deployer: 'SPSCWDV3RKV5ZRN1FQD84YE1NQFEDJ9R1F4DYQ11', @@ -176,53 +176,58 @@ const nycConfig: CityVersions = { logo: 'https://cdn.citycoins.co/logos/newyorkcitycoin.png', uri: 'https://cdn.citycoins.co/metadata/newyorkcitycoin.json', }, - } + }, } // GETTERS -export const cityList = ["mia", "nyc"]; +export const cityList = ['mia', 'nyc'] export async function getCityList(): Promise { - return cityList; + return cityList } export async function getCityInfo(city: string): Promise { switch (city) { case 'mia': - return miaInfo; + return miaInfo case 'nyc': - return nycInfo; + return nycInfo default: - throw new Error(`Invalid city name: ${city}`); + throw new Error(`Invalid city name: ${city}`) } } export async function getFullCityInfo(): Promise { return { - 'mia': miaInfo, - 'nyc': nycInfo, - }; + mia: miaInfo, + nyc: nycInfo, + } } -export async function getCityConfig(city: string, version: string): Promise { +export async function getCityConfig( + city: string, + version: string, +): Promise { version = version.toLowerCase() switch (city.toLowerCase()) { - case "mia": - if (Object.prototype.hasOwnProperty.call(miaConfig, version)) return miaConfig[version] - break; - case "nyc": - if (Object.prototype.hasOwnProperty.call(nycConfig, version)) return nycConfig[version] - break; + case 'mia': + if (Object.prototype.hasOwnProperty.call(miaConfig, version)) + return miaConfig[version] + break + case 'nyc': + if (Object.prototype.hasOwnProperty.call(nycConfig, version)) + return nycConfig[version] + break } throw new Error(`Invalid city name or version: ${city} ${version}`) } export async function getFullCityConfig(city: string): Promise { switch (city.toLowerCase()) { - case "mia": + case 'mia': return miaConfig - case "nyc": + case 'nyc': return nycConfig default: throw new Error(`Invalid city name: ${city}`) diff --git a/src/types/mining.ts b/src/types/mining.ts index 3e5e6e1..6952d07 100644 --- a/src/types/mining.ts +++ b/src/types/mining.ts @@ -1,15 +1,14 @@ - export interface MiningStatsAtBlock { - minersCount: number, - amount: number, - amountToCity: number, - amountToStackers: number, - rewardClaimed: boolean, + minersCount: number + amount: number + amountToCity: number + amountToStackers: number + rewardClaimed: boolean } export interface MinerAtBlock { - ustx: number, - lowValue: number, - highValue: number, - winner: boolean, + ustx: number + lowValue: number + highValue: number + winner: boolean } diff --git a/src/types/stacking.ts b/src/types/stacking.ts index 4f86ba4..61e6391 100644 --- a/src/types/stacking.ts +++ b/src/types/stacking.ts @@ -1,10 +1,9 @@ - export interface StackingStatsAtCycle { - amountUstx: number, - amountToken: number, + amountUstx: number + amountToken: number } export interface StackerAtCycle { - amountStacked: number, - toReturn: number, + amountStacked: number + toReturn: number } diff --git a/src/types/token.ts b/src/types/token.ts index 42d4097..66a32ac 100644 --- a/src/types/token.ts +++ b/src/types/token.ts @@ -1,24 +1,23 @@ - export interface CoinbaseAmounts { - coinbaseAmount1: number, - coinbaseAmount2: number, - coinbaseAmount3: number, - coinbaseAmount4: number, - coinbaseAmount5: number, - coinbaseAmountBonus: number, - coinbaseAmountDefault: number, + coinbaseAmount1: number + coinbaseAmount2: number + coinbaseAmount3: number + coinbaseAmount4: number + coinbaseAmount5: number + coinbaseAmountBonus: number + coinbaseAmountDefault: number } export interface CoinbaseThresholds { - coinbaseThreshold1: number, - coinbaseThreshold2: number, - coinbaseThreshold3: number, - coinbaseThreshold4: number, - coinbaseThreshold5: number, + coinbaseThreshold1: number + coinbaseThreshold2: number + coinbaseThreshold3: number + coinbaseThreshold4: number + coinbaseThreshold5: number } export interface TokenUri { - name: string, - description: string, - image: string, + name: string + description: string + image: string } From 6a46219c4cef0e72266ec7910dbbc6a5a9948d0a Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 11:34:33 -0700 Subject: [PATCH 49/51] fix: update readme to match new formats --- README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 45c7810..7cf4087 100644 --- a/README.md +++ b/README.md @@ -27,17 +27,22 @@ Static assets in the `/static` folder are pushed to Cloudflare Workers KV store All other paths are passed to the IttyRouter in `handler.ts`. -The API is divided into three main sections: +The API is divided into three main folders: -- handlers: individual endpoints that get/caculate a value and return the result +- handlers: individual endpoints that get/calculate a value and return the result - lib: libraries to get or calculate data for handlers - types: type definitions for utilities and responses ### How to Add a City -- add new city config as constant in `/src/types/cities.ts` -- update getCityConfig in `cities.ts` with case for new city -- update enum in `/static/openapi.yml` for reusable parameters +- add new CityInfo constant in `/src/types/cities.ts` +- add new CityConfig constant in `/src/types/cities.ts` +- update the functions below in `cities.ts` with case for new city + - getCityInfo() + - getFullCityInfo() + - getCityConfig() + - getFullCityConfig() +- update cityname enum in `/static/openapi.yml` for reusable parameters ### How to Add an Endpoint @@ -45,7 +50,7 @@ The API is divided into three main sections: - all inputs must be checked or 400 - city config must resolve or 404 - any integers verified with `isStringAllDigits` or 400 - - response from getter or calcualation checked or 404 + - response from getter or calculation checked or 404 - returns successful response - (optional) add new getters in `/lib` - (optional) add new types in `/types` From 967f8d4307b1c22dd2fe1cfa2cb6d67741b20ae9 Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 11:46:26 -0700 Subject: [PATCH 50/51] hotfix: add SingleValue type import --- src/handlers/tools/proofofhodl.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/handlers/tools/proofofhodl.ts b/src/handlers/tools/proofofhodl.ts index 171ab98..383f7ba 100644 --- a/src/handlers/tools/proofofhodl.ts +++ b/src/handlers/tools/proofofhodl.ts @@ -2,6 +2,7 @@ import { Request as IttyRequest } from 'itty-router' import { getProofOfHodl } from '../../lib/citycoins' import { createResponse } from '../../lib/common' import { getCityConfig } from '../../types/cities' +import { SingleValue } from '../../types/common' const ProofOfHodl = async (request: IttyRequest): Promise => { let cityConfig From b30b1d46d739cf67aa9da7b9c6681ee5ba8226bd Mon Sep 17 00:00:00 2001 From: Jason Schrader Date: Tue, 31 May 2022 12:03:15 -0700 Subject: [PATCH 51/51] hotfix: update openapi defs for query param --- static/openapi.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/static/openapi.yml b/static/openapi.yml index 8b30f89..cb86f87 100644 --- a/static/openapi.yml +++ b/static/openapi.yml @@ -53,6 +53,8 @@ paths: description: Get the current Stacks block height tags: - Stacks + parameters: + - $ref: '#/components/parameters/format' responses: "200": $ref: '#/components/responses/200SuccessJsonNumber' @@ -66,6 +68,7 @@ paths: tags: - Stacks parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/address' responses: "200": @@ -82,6 +85,7 @@ paths: tags: - Stacks parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/address' responses: "200": @@ -98,6 +102,7 @@ paths: tags: - Stacks parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/blockheight' responses: "200": @@ -114,6 +119,7 @@ paths: tags: - Activation parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: @@ -131,6 +137,7 @@ paths: tags: - Activation parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: @@ -148,6 +155,7 @@ paths: tags: - Activation parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: @@ -165,6 +173,7 @@ paths: tags: - Activation parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: @@ -182,6 +191,7 @@ paths: tags: - Activation parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/userid' @@ -200,6 +210,7 @@ paths: tags: - Activation parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/address' @@ -218,6 +229,7 @@ paths: tags: - Mining parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' @@ -318,6 +330,7 @@ paths: tags: - Mining parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' @@ -336,6 +349,7 @@ paths: tags: - Mining parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' @@ -355,6 +369,7 @@ paths: tags: - Mining Claims parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' @@ -374,6 +389,7 @@ paths: tags: - Mining Claims parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' @@ -460,6 +476,7 @@ paths: tags: - Stacking parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' @@ -478,6 +495,7 @@ paths: tags: - Stacking parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' @@ -496,6 +514,7 @@ paths: tags: - Stacking parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' @@ -518,6 +537,7 @@ paths: tags: - Stacking Claims parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/cycleid' @@ -537,6 +557,7 @@ paths: tags: - Token parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/blockheight' @@ -659,6 +680,7 @@ paths: tags: - Token parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: @@ -676,6 +698,7 @@ paths: tags: - Token parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: @@ -693,6 +716,7 @@ paths: tags: - Token parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/address' @@ -711,6 +735,7 @@ paths: tags: - Token parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: @@ -731,6 +756,7 @@ paths: tags: - Token parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/cityname' responses: "200": @@ -753,6 +779,7 @@ paths: tags: - Token parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/cityname' responses: "200": @@ -769,6 +796,7 @@ paths: tags: - Token parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' responses: @@ -1052,6 +1080,7 @@ paths: tags: - Tools parameters: + - $ref: '#/components/parameters/format' - $ref: '#/components/parameters/version' - $ref: '#/components/parameters/cityname' - $ref: '#/components/parameters/address' @@ -1128,6 +1157,13 @@ components: type: string enum: ["true", "false"] description: (Optional) Toggle calling the `or-default` version of the function which returns an empty value instead of an error. Defaults to `false`. + format: + in: query + name: format + schema: + type: string + enum: ["json", "raw"] + description: (Optional) The output format for the response. Defaults to `json`. # Reusable objects schemas: citylist: