diff --git a/Accounts/index.ts b/Accounts/Index.ts similarity index 100% rename from Accounts/index.ts rename to Accounts/Index.ts diff --git a/Accounts/package-lock.json b/Accounts/package-lock.json index 9168bf0fd9..fa25f1516a 100644 --- a/Accounts/package-lock.json +++ b/Accounts/package-lock.json @@ -9,48 +9,48 @@ "version": "3.0.0", "hasInstallScript": true, "dependencies": { - "react-scripts": "^5.0.0", - "react-redux": "^7.2.6", + "react-scripts": "^5.0.1", + "react-redux": "^8.0.1", "Common": "file:../Common", - "@stripe/react-stripe-js": "^1.7.0", - "@types/react-redux": "^7.1.23", - "axios": "^0.26.1", + "@stripe/react-stripe-js": "^1.7.2", + "@types/react-redux": "^7.1.24", + "axios": "^0.27.2", "@types/react-router-redux": "^5.0.21", "compression": "^1.7.4", "faker": "^6.6.6", "@types/compression": "^1.7.2", "cli-table": "^0.3.11", "file-saver": "^2.0.5", - "jest": "^27.5.1", + "jest": "^28.1.0", "valid-url": "^1.0.9", - "@types/react-dom": "^17.0.14", + "@types/react-dom": "^17.0.2", "query-string": "^7.1.1", "@loadable/component": "^5.15.2", "uuid": "^8.3.2", "react-awesome-reveal": "^3.8.1", "react-dom": "^17.0.2", "sane-email-validation": "^3.0.1", - "@stripe/stripe-js": "^1.25.0", + "@stripe/stripe-js": "^1.29.0", "universal-cookie": "^4.0.4", - "react-router-dom": "^6.2.2", + "react-router-dom": "^6.3.0", "history": "^5.3.0", "CommonServer": "file:../CommonServer", - "@types/redux-form": "^8.3.3", + "@types/redux-form": "^8.3.5", "@types/redux-logger": "^3.0.9", "react-router-redux": "^4.0.8", "card-validator": "^8.1.1", - "express": "^4.17.3", + "express": "^4.18.1", "react-frontload": "^2.0.0", - "react": "^18.1.0", + "react": "^17.0.2", "react-ga": "^3.3.0", "CommonUI": "file:../CommonUI", - "workbox-build": "^6.5.1", + "workbox-build": "^6.5.3", "prop-types": "^15.8.1", - "puppeteer": "^13.5.1" + "puppeteer": "^13.7.0" }, "devDependencies": { "chrome-launcher": "^0.15.0", - "commander": "^9.1.0", + "commander": "^9.2.0", "depcheck": "^1.4.3", "lighthouse": "^9.5.0", "npm-force-resolutions": "0.0.10", @@ -86,6 +86,18 @@ "multicast-dns": "cli.js" } }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", @@ -114,40 +126,40 @@ } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", + "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", "dependencies": { - "emittery": "^0.8.1", - "jest-docblock": "^27.5.1", - "@jest/environment": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-runtime": "^27.5.1", - "source-map-support": "^0.5.6", + "emittery": "^0.10.2", + "jest-docblock": "^28.0.2", + "@jest/environment": "^28.1.0", + "jest-haste-map": "^28.1.0", + "jest-leak-detector": "^28.1.0", + "jest-runtime": "^28.1.0", + "source-map-support": "0.5.13", + "jest-watcher": "^28.1.0", "@types/node": "*", - "@jest/console": "^27.5.1", + "@jest/console": "^28.1.0", "chalk": "^4.0.0", - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^28.1.0", "throat": "^6.0.1", - "jest-util": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-environment-node": "^27.5.1", - "@jest/transform": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-resolve": "^27.5.1", - "@jest/types": "^27.5.1", + "jest-util": "^28.1.0", + "jest-message-util": "^28.1.0", + "jest-environment-node": "^28.1.0", + "@jest/transform": "^28.1.0", + "jest-resolve": "^28.1.0", + "@jest/types": "^28.1.0", "graceful-fs": "^4.2.9", - "jest-worker": "^27.5.1" + "jest-worker": "^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/react-scripts": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", - "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", "dependencies": { "eslint": "^8.3.0", "mini-css-extract-plugin": "^2.4.5", @@ -168,7 +180,7 @@ "fs-extra": "^10.0.0", "postcss": "^8.4.4", "file-loader": "^6.2.0", - "react-dev-utils": "^12.0.0", + "react-dev-utils": "^12.0.1", "css-loader": "^6.5.1", "jest": "^27.4.3", "source-map-loader": "^3.0.0", @@ -189,7 +201,7 @@ "case-sensitive-paths-webpack-plugin": "^2.4.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", "identity-obj-proxy": "^3.0.0", - "eslint-config-react-app": "^7.0.0", + "eslint-config-react-app": "^7.0.1", "react-app-polyfill": "^3.0.0", "jest-resolve": "^27.4.2", "sass-loader": "^12.3.0", @@ -283,6 +295,14 @@ "webpack": "^5.20.0" } }, + "node_modules/@jest/fake-timers/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "../Common": { "name": "common", "version": "1.0.0", @@ -348,18 +368,23 @@ } }, "node_modules/react-router-dom": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.2.tgz", - "integrity": "sha512-AtYEsAST7bDD4dLSQHDnk/qxWLJdad5t1HFa1qJyUrCeGgEuCSw0VB/27ARbF9Fi/W5598ujvJOm3ujUCVzuYQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz", + "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==", "dependencies": { "history": "^5.2.0", - "react-router": "6.2.2" + "react-router": "6.3.0" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, + "node_modules/react-scripts/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -389,15 +414,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "node_modules/workbox-webpack-plugin/node_modules/workbox-range-requests": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.1.tgz", + "integrity": "sha512-57Da/qRbd9v33YlHX0rlSUVFmE4THCjKqwkmfhY3tNLnSKN2L5YBS3qhWeDO0IrMNgUj+rGve2moKYXeUqQt4A==", "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "workbox-core": "6.5.1" } }, "node_modules/@babel/plugin-proposal-private-methods": { @@ -415,6 +437,30 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/jest-runtime/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==", + "dependencies": { + "@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.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, "node_modules/terser": { "version": "5.12.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", @@ -445,17 +491,18 @@ } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", + "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.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" }, "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/fork-ts-checker-webpack-plugin/node_modules/color-convert": { @@ -528,6 +575,48 @@ "ms": "^2.1.1" } }, + "node_modules/react-scripts/node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dependencies": { + "@babel/core": "^7.8.0", + "jest-runner": "^27.5.1", + "jest-circus": "^27.5.1", + "jest-get-type": "^27.5.1", + "deepmerge": "^4.2.2", + "babel-jest": "^27.5.1", + "parse-json": "^5.2.0", + "chalk": "^4.0.0", + "strip-json-comments": "^3.1.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "jest-regex-util": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "pretty-format": "^27.5.1", + "glob": "^7.1.1", + "jest-resolve": "^27.5.1", + "@jest/types": "^27.5.1", + "@jest/test-sequencer": "^27.5.1", + "graceful-fs": "^4.2.9", + "ci-info": "^3.2.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, "node_modules/@types/react-router": { "version": "5.1.18", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz", @@ -619,13 +708,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -765,14 +855,30 @@ "node": ">= 0.8" } }, + "node_modules/jest-cli/node_modules/jest-validate": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", + "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "dependencies": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/tsconfig-paths": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", - "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, @@ -798,11 +904,11 @@ } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.16.0.tgz", - "integrity": "sha512-bitZtqO13XX64/UOQKoDbVg2H4VHzbHnWWlTRc7ofq7SuQyPCwEycF1Zmn5ZAMTJZ3p5uMS7xJGUdOtZK7LrNw==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.22.0.tgz", + "integrity": "sha512-rKxoCUtAHwEH6IcAoVpqipY6Th+YKW7WFspAKu0IFdbdKZpveFBeqxxE9Xn+GWikhq1o03V3VXbxIe+GdhggiQ==", "dependencies": { - "@typescript-eslint/utils": "5.16.0" + "@typescript-eslint/utils": "5.22.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -823,6 +929,14 @@ "node": ">=4.0.0" } }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -839,6 +953,22 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -893,20 +1023,21 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", + "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@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.5.1", + "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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/workbox-webpack-plugin": { @@ -942,6 +1073,20 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "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==", + "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/p-retry": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", @@ -974,43 +1119,43 @@ } }, "node_modules/workbox-build": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.1.tgz", - "integrity": "sha512-coDUDzHvFZ1ADOl3wKCsCSyOBvkPKlPgcQDb6LMMShN1zgF31Mev/1HzN3+9T2cjjWAgFwZKkuRyExqc1v21Zw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.3.tgz", + "integrity": "sha512-8JNHHS7u13nhwIYCDea9MNXBNPHXCs5KDZPKI/ZNTr3f4sMGoD7hgFGecbyjX1gw4z6e9bMpMsOEJNyH5htA/w==", "dependencies": { - "workbox-recipes": "6.5.1", + "workbox-recipes": "6.5.3", "@babel/core": "^7.11.1", "@rollup/plugin-node-resolve": "^11.2.1", "fast-json-stable-stringify": "^2.1.0", - "workbox-google-analytics": "6.5.1", - "workbox-strategies": "6.5.1", - "workbox-routing": "6.5.1", + "workbox-google-analytics": "6.5.3", + "workbox-strategies": "6.5.3", + "workbox-routing": "6.5.3", "common-tags": "^1.8.0", - "workbox-broadcast-update": "6.5.1", + "workbox-broadcast-update": "6.5.3", "lodash": "^4.17.20", - "workbox-precaching": "6.5.1", + "workbox-precaching": "6.5.3", "rollup": "^2.43.1", - "workbox-range-requests": "6.5.1", + "workbox-range-requests": "6.5.3", "source-map": "^0.8.0-beta.0", "@babel/runtime": "^7.11.2", "fs-extra": "^9.0.1", - "workbox-expiration": "6.5.1", + "workbox-expiration": "6.5.3", "stringify-object": "^3.3.0", - "workbox-streams": "6.5.1", + "workbox-streams": "6.5.3", "@babel/preset-env": "^7.11.0", "@rollup/plugin-replace": "^2.4.1", - "workbox-core": "6.5.1", + "workbox-core": "6.5.3", "@apideck/better-ajv-errors": "^0.3.1", - "workbox-cacheable-response": "6.5.1", + "workbox-cacheable-response": "6.5.3", "@rollup/plugin-babel": "^5.2.0", "strip-comments": "^2.0.1", "ajv": "^8.6.0", - "workbox-sw": "6.5.1", - "workbox-window": "6.5.1", + "workbox-sw": "6.5.3", + "workbox-window": "6.5.3", "@surma/rollup-plugin-off-main-thread": "^2.2.3", "tempy": "^0.6.0", - "workbox-background-sync": "6.5.1", - "workbox-navigation-preload": "6.5.1", + "workbox-background-sync": "6.5.3", + "workbox-navigation-preload": "6.5.3", "pretty-bytes": "^5.3.0", "upath": "^1.2.0", "glob": "^7.1.6", @@ -1032,6 +1177,17 @@ "node": ">=8" } }, + "node_modules/@jest/test-sequencer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1073,6 +1229,11 @@ "eslint": ">=5" } }, + "node_modules/workbox-webpack-plugin/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==" + }, "node_modules/jest-runner/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1084,6 +1245,17 @@ "node": ">=7.0.0" } }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/should": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", @@ -1126,6 +1298,17 @@ "node": ">= 0.8.0" } }, + "node_modules/@jest/globals/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/eslint-module-utils/node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -1134,6 +1317,17 @@ "node": ">=4" } }, + "node_modules/@jest/test-result/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/should-equal": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", @@ -1144,11 +1338,11 @@ } }, "node_modules/workbox-broadcast-update": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.1.tgz", - "integrity": "sha512-mb/oyblyEpDbw167cCTyHnC3RqCnCQHtFYuYZd+QTpuExxM60qZuBH1AuQCgvLtDcztBKdEYK2VFD9SZYgRbaQ==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.3.tgz", + "integrity": "sha512-4AwCIA5DiDrYhlN+Miv/fp5T3/whNmSL+KqhTwRBTZIL6pvTgE4lVuRzAt1JltmqyMcQ3SEfCdfxczuI4kwFQg==", "dependencies": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "node_modules/@babel/eslint-parser": { @@ -1179,6 +1373,14 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/jest-matcher-utils/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-regex-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", @@ -1203,6 +1405,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jest-mock/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@sentry/hub": { "version": "6.19.1", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.1.tgz", @@ -1249,23 +1467,28 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "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==" + }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", + "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/css-what": { @@ -1351,12 +1574,36 @@ "postcss": "^8.4" } }, + "node_modules/jest-config/node_modules/jest-validate": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", + "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "dependencies": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/depcheck/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/jest-cli/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-jasmine2/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1387,7 +1634,6 @@ "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" } @@ -1403,6 +1649,22 @@ "node": ">=7.0.0" } }, + "node_modules/jest-watcher/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -1435,6 +1697,31 @@ "rollup": "^1.20.0||^2.0.0" } }, + "node_modules/jest-mock/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1502,23 +1789,23 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dependencies": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-module-utils": "^2.7.3", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" }, "engines": { "node": ">=4" @@ -1546,6 +1833,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/expect/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1582,12 +1885,13 @@ } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1604,6 +1908,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -1612,6 +1924,52 @@ "node": ">= 0.6" } }, + "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==", + "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/jest-jasmine2/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/core": "^7.7.2", + "semver": "^7.3.2", + "natural-compare": "^1.4.0", + "jest-matcher-utils": "^27.5.1", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "expect": "^27.5.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "jest-message-util": "^27.5.1", + "@types/prettier": "^2.1.5", + "@types/babel__traverse": "^7.0.4", + "@babel/traverse": "^7.7.2", + "@jest/transform": "^27.5.1", + "pretty-format": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0", + "@babel/types": "^7.0.0", + "@jest/types": "^27.5.1", + "graceful-fs": "^4.2.9", + "@babel/generator": "^7.7.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/react-dev-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -1623,11 +1981,41 @@ "node": ">=8" } }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "node_modules/jest-environment-node/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@types/yauzl": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", @@ -1677,6 +2065,41 @@ "node": ">=8" } }, + "node_modules/jest-config/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==", + "dependencies": { + "@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.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/environment/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@babel/eslint-parser/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -1707,6 +2130,17 @@ "ajv": "^8.8.2" } }, + "node_modules/jest-environment-jsdom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001319", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz", @@ -1773,6 +2207,14 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@jest/environment/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1789,6 +2231,11 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, + "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==" + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", @@ -1821,6 +2268,22 @@ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" }, + "node_modules/react-scripts/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.7.2", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz", @@ -1851,6 +2314,20 @@ "credit-card-type": "^9.1.0" } }, + "node_modules/jest-jasmine2/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", @@ -1912,6 +2389,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/jest-environment-node/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/espree": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", @@ -1948,6 +2440,22 @@ "node": ">=6.9.0" } }, + "node_modules/jest-snapshot/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/eslint/node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2010,6 +2518,22 @@ "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==" }, + "node_modules/jest-runner/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@emotion/serialize": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", @@ -2066,6 +2590,17 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@jest/environment/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -2105,6 +2640,14 @@ "node": ">=4" } }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -2134,9 +2677,9 @@ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -2168,6 +2711,28 @@ "fsevents": "~2.3.2" } }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-broadcast-update": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.1.tgz", + "integrity": "sha512-mb/oyblyEpDbw167cCTyHnC3RqCnCQHtFYuYZd+QTpuExxM60qZuBH1AuQCgvLtDcztBKdEYK2VFD9SZYgRbaQ==", + "dependencies": { + "workbox-core": "6.5.1" + } + }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -2193,17 +2758,17 @@ } }, "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", + "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^28.0.2", + "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/performance-now": { @@ -2211,6 +2776,22 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "node_modules/jest-watcher/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@csstools/postcss-ic-unit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz", @@ -2245,6 +2826,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-environment-node/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.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", @@ -2262,16 +2859,16 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", + "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.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/redux": { @@ -2314,14 +2911,14 @@ "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4=" }, "node_modules/@typescript-eslint/utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz", - "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.22.0.tgz", + "integrity": "sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==", "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.22.0", + "@typescript-eslint/types": "5.22.0", + "@typescript-eslint/typescript-estree": "5.22.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -2344,41 +2941,56 @@ "node": ">=0.8" } }, + "node_modules/jest-environment-node/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", + "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", "dependencies": { + "@jest/expect-utils": "^28.1.0", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/core": "^7.7.2", - "semver": "^7.3.2", + "@babel/core": "^7.11.6", + "semver": "^7.3.5", "natural-compare": "^1.4.0", - "jest-matcher-utils": "^27.5.1", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "expect": "^27.5.1", + "jest-matcher-utils": "^28.1.0", + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.0", + "expect": "^28.1.0", "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "jest-message-util": "^27.5.1", + "jest-util": "^28.1.0", + "jest-message-util": "^28.1.0", "@types/prettier": "^2.1.5", - "@types/babel__traverse": "^7.0.4", + "@types/babel__traverse": "^7.0.6", "@babel/traverse": "^7.7.2", - "@jest/transform": "^27.5.1", - "pretty-format": "^27.5.1", + "@jest/transform": "^28.1.0", + "pretty-format": "^28.1.0", "babel-preset-current-node-syntax": "^1.0.0", - "@babel/types": "^7.0.0", - "@jest/types": "^27.5.1", + "@babel/types": "^7.3.3", + "@jest/types": "^28.1.0", "graceful-fs": "^4.2.9", "@babel/generator": "^7.7.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/babel-jest/node_modules/chalk": { @@ -2404,6 +3016,14 @@ "node": ">=6" } }, + "node_modules/jest-runtime/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", @@ -2437,6 +3057,17 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-google-analytics": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.1.tgz", + "integrity": "sha512-qZU46/h4dbionYT6Yk6iBkUwpiEzAfnO1W7KkI+AMmY7G9/gA03dQQ7rpTw8F4vWrG7ahTUGWDFv6fERtaw1BQ==", + "dependencies": { + "workbox-background-sync": "6.5.1", + "workbox-core": "6.5.1", + "workbox-routing": "6.5.1", + "workbox-strategies": "6.5.1" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -2453,6 +3084,20 @@ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" }, + "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==", + "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/postcss-initial": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", @@ -2610,6 +3255,16 @@ "node": ">= 0.12.0" } }, + "node_modules/jest-mock/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "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==" + }, "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2779,6 +3434,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-routing": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.1.tgz", + "integrity": "sha512-yAAncdTwanvlR8KPjubyvFKeAok8ZcIws6UKxvIAg0I+wsf7UYi93DXNuZr6RBSQrByrN6HkCyjuhmk8P63+PA==", + "dependencies": { + "workbox-core": "6.5.1" + } + }, "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2811,6 +3474,19 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/react-scripts/node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -2835,6 +3511,11 @@ "node": ">= 0.4" } }, + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2871,6 +3552,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/bonjour/node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -2885,13 +3580,13 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz", - "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz", + "integrity": "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==", "dependencies": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.22.0", + "@typescript-eslint/types": "5.22.0", + "@typescript-eslint/typescript-estree": "5.22.0", "debug": "^4.3.2" }, "engines": { @@ -3061,6 +3756,70 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/@jest/core/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==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/jest-environment-node/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3129,6 +3888,34 @@ "semver": "bin/semver.js" } }, + "node_modules/react-scripts/node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/html-minifier-terser/node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -3211,6 +3998,44 @@ "node": ">= 8" } }, + "node_modules/react-scripts/node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-scripts/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", @@ -3221,6 +4046,14 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", @@ -3275,6 +4108,16 @@ "node": ">=8" } }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-precaching": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.1.tgz", + "integrity": "sha512-EzlPBxvmjGfE56YZzsT/vpVkpLG1XJhoplgXa5RPyVWLUL1LbwEAxhkrENElSS/R9tgiTw80IFwysidfUqLihg==", + "dependencies": { + "workbox-core": "6.5.1", + "workbox-routing": "6.5.1", + "workbox-strategies": "6.5.1" + } + }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -3332,9 +4175,9 @@ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", - "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", "dependencies": { "@babel/code-frame": "^7.8.3", "@types/json-schema": "^7.0.5", @@ -3387,6 +4230,14 @@ "magic-string": "^0.25.7" } }, + "node_modules/@jest/test-sequencer/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/postcss-pseudo-class-any-link": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.1.tgz", @@ -3415,6 +4266,57 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/react-scripts/node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dependencies": { + "istanbul-lib-source-maps": "^4.0.0", + "jest-haste-map": "^27.5.1", + "istanbul-lib-coverage": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "source-map": "^0.6.0", + "istanbul-lib-instrument": "^5.1.0", + "string-length": "^4.0.1", + "@types/node": "*", + "v8-to-istanbul": "^8.1.0", + "@jest/console": "^27.5.1", + "chalk": "^4.0.0", + "@jest/test-result": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "istanbul-reports": "^3.1.3", + "@jest/transform": "^27.5.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "jest-resolve": "^27.5.1", + "@jest/types": "^27.5.1", + "terminal-link": "^2.0.0", + "istanbul-lib-report": "^3.0.0", + "@bcoe/v8-coverage": "^0.2.3", + "graceful-fs": "^4.2.9", + "jest-worker": "^27.5.1" + }, + "engines": { + "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" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, "node_modules/source-map-loader": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", @@ -3455,17 +4357,23 @@ } }, "node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "dependencies": { - "follow-redirects": "^1.14.8" + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" } }, "node_modules/Common": { "resolved": "../Common", "link": true }, + "node_modules/@jest/test-sequencer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -3496,12 +4404,12 @@ "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" }, "node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -3509,6 +4417,32 @@ "node": ">= 0.8" } }, + "node_modules/jest-runner/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -3587,6 +4521,20 @@ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, + "node_modules/jest-config/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==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3600,6 +4548,43 @@ "node": ">= 8" } }, + "node_modules/react-scripts/node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dependencies": { + "dedent": "^0.7.0", + "jest-matcher-utils": "^27.5.1", + "jest-each": "^27.5.1", + "@jest/environment": "^27.5.1", + "jest-snapshot": "^27.5.1", + "co": "^4.6.0", + "expect": "^27.5.1", + "jest-runtime": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "@jest/test-result": "^27.5.1", + "throat": "^6.0.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "jest-message-util": "^27.5.1", + "pretty-format": "^27.5.1", + "is-generator-fn": "^2.0.0", + "@jest/types": "^27.5.1", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -3692,6 +4677,38 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/jest-jasmine2/node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "cjs-module-lexer": "^1.0.0", + "jest-mock": "^27.5.1", + "@jest/environment": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-snapshot": "^27.5.1", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "@jest/globals": "^27.5.1", + "chalk": "^4.0.0", + "@jest/test-result": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "@jest/source-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "strip-bom": "^4.0.0", + "@jest/transform": "^27.5.1", + "glob": "^7.1.3", + "jest-resolve": "^27.5.1", + "@jest/types": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -3735,15 +4752,26 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "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==", "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "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/jest-config/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/renderkid": { @@ -3859,9 +4887,9 @@ } }, "node_modules/puppeteer/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -3882,6 +4910,48 @@ "node": ">= 6" } }, + "node_modules/react-scripts/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/react-scripts/node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/nanoid": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", @@ -3909,6 +4979,21 @@ "he": "bin/he" } }, + "node_modules/workbox-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/eslint-module-utils/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -4028,6 +5113,23 @@ "postcss": "^8.4" } }, + "node_modules/react-scripts/node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -4036,6 +5138,14 @@ "node": ">=10.13.0" } }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/error-stack-parser": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz", @@ -4060,11 +5170,36 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@jest/test-result/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "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==" }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-streams": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.1.tgz", + "integrity": "sha512-7jaTWm6HRGJ/ewECnhb+UgjTT50R42E0/uNCC4eTKQwnLO/NzNGjoXTdQgFjo4zteR+L/K6AtFAiYKH3ZJbAYw==", + "dependencies": { + "workbox-core": "6.5.1", + "workbox-routing": "6.5.1" + } + }, "node_modules/resolve-url-loader/node_modules/picocolors": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", @@ -4081,6 +5216,20 @@ "postcss": "^8.1.0" } }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", @@ -4129,6 +5278,14 @@ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, + "node_modules/jest-runtime/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", @@ -4215,6 +5372,19 @@ "semver": "bin/semver.js" } }, + "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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -4227,28 +5397,28 @@ } }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", + "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@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": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^28.1.0", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "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": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4427,6 +5597,14 @@ "node": ">=6.9.0" } }, + "node_modules/jest-mock/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -4440,6 +5618,17 @@ "node": ">=10.10.0" } }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -4468,13 +5657,42 @@ "node": ">=6" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz", - "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==", + "node_modules/jest-config/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers/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==", "dependencies": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0", + "@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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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==" + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz", + "integrity": "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==", + "dependencies": { + "@typescript-eslint/types": "5.22.0", + "@typescript-eslint/visitor-keys": "5.22.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -4509,9 +5727,13 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.16.7", @@ -4530,6 +5752,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/jest-jasmine2/node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-message-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4551,6 +5786,20 @@ "node": ">=4" } }, + "node_modules/@jest/test-result/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/detective": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", @@ -4596,6 +5845,22 @@ "node": ">=8" } }, + "node_modules/@jest/test-sequencer/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/workbox-build/node_modules/tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -4642,6 +5907,20 @@ "regjsparser": "bin/parser" } }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4651,16 +5930,21 @@ } }, "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", + "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", "dependencies": { "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/fake-timers/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/istanbul-lib-instrument": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", @@ -4715,6 +5999,14 @@ } } }, + "node_modules/jest-watch-typeahead/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "engines": { + "node": ">=12.20" + } + }, "node_modules/@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", @@ -4726,6 +6018,17 @@ "node": ">=6.9.0" } }, + "node_modules/jest-runtime/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -4774,6 +6077,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/react-scripts/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/@babel/core/node_modules/@babel/parser": { "version": "7.17.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", @@ -4816,13 +6133,28 @@ } }, "node_modules/commander": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", - "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", + "dev": true, "engines": { "node": "^12.20.0 || >=14" } }, + "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/postcss-dir-pseudo-class": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", @@ -4885,6 +6217,30 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "@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.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, "node_modules/jest-message-util/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", @@ -4918,30 +6274,46 @@ } }, "node_modules/@stripe/react-stripe-js": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.7.0.tgz", - "integrity": "sha512-L20v8Jq0TDZFL2+y+uXD751t6q9SalSFkSYZpmZ2VWrGZGK7HAGfRQ804dzYSSr5fGenW6iz6y7U0YKfC/TK3g==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.7.2.tgz", + "integrity": "sha512-IAVg2nPUPoSwI//XDRCO7D8mGeK4+N3Xg63fYZHmlfEWAuFVcuaqJKTT67uzIdKYZhHZ/NMdZw/ttz+GOjP/rQ==", "dependencies": { "prop-types": "^15.7.2" }, "peerDependencies": { - "@stripe/stripe-js": "^1.20.3", + "@stripe/stripe-js": "^1.26.0", "react": "^16.8.0 || ^17.0.0", "react-dom": "^16.8.0 || ^17.0.0" } }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "node_modules/jest-runner/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==", "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "jest-mock": "^27.5.1" + "@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/environment": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", + "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "dependencies": { + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/node": "*", + "jest-mock": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/xtend": { @@ -5048,6 +6420,14 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, + "node_modules/@jest/console/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -5134,6 +6514,14 @@ "semver": "bin/semver.js" } }, + "node_modules/jest-runner/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.16.8", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", @@ -5150,6 +6538,11 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@jest/globals/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/should-util": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", @@ -5217,6 +6610,38 @@ "postcss": ">=8" } }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-strategies": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.1.tgz", + "integrity": "sha512-JNaTXPy8wXzKkr+6za7/eJX9opoZk7UgY261I2kPxl80XQD8lMjz0vo9EOcBwvD72v3ZhGJbW84ZaDwFEhFvWA==", + "dependencies": { + "workbox-core": "6.5.1" + } + }, + "node_modules/@jest/reporters/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==", + "dependencies": { + "@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.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -5281,11 +6706,35 @@ "node": ">=4.0.0" } }, + "node_modules/@jest/test-result/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, + "node_modules/jest-cli/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -5391,6 +6840,11 @@ "node": ">=6.0.0" } }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/jest-runtime/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5455,6 +6909,28 @@ "node": ">=8" } }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "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/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/@ampproject/remapping": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", @@ -5471,6 +6947,22 @@ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, + "node_modules/@jest/reporters/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "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", @@ -5487,6 +6979,27 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, + "node_modules/jest-runner/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-recipes": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.1.tgz", + "integrity": "sha512-DGsyKygHggcGPQpWafC/Nmbm1Ny3sB2vE9r//3UbeidXiQ+pLF14KEG1/0NNGRaY+lfOXOagq6d1H7SC8KA+rA==", + "dependencies": { + "workbox-cacheable-response": "6.5.1", + "workbox-core": "6.5.1", + "workbox-expiration": "6.5.1", + "workbox-precaching": "6.5.1", + "workbox-routing": "6.5.1", + "workbox-strategies": "6.5.1" + } + }, "node_modules/detect-port-alt": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", @@ -5503,6 +7016,17 @@ "node": ">= 4.2.1" } }, + "node_modules/@jest/core/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/babel-preset-react-app": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", @@ -5671,6 +7195,39 @@ "node": ">=6" } }, + "node_modules/react-scripts/node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "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 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, "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", @@ -5735,22 +7292,22 @@ } }, "node_modules/workbox-routing": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.1.tgz", - "integrity": "sha512-yAAncdTwanvlR8KPjubyvFKeAok8ZcIws6UKxvIAg0I+wsf7UYi93DXNuZr6RBSQrByrN6HkCyjuhmk8P63+PA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.3.tgz", + "integrity": "sha512-DFjxcuRAJjjt4T34RbMm3MCn+xnd36UT/2RfPRfa8VWJGItGJIn7tG+GwVTdHmvE54i/QmVTJepyAGWtoLPTmg==", "dependencies": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -5770,9 +7327,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz", + "integrity": "sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig==", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -5788,6 +7345,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/jest-environment-node/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -5799,12 +7367,12 @@ } }, "node_modules/workbox-window": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.1.tgz", - "integrity": "sha512-oRlun9u7b7YEjo2fIDBqJkU2hXtrEljXcOytRhfeQRbqXxjUOpFgXSGRSAkmDx1MlKUNOSbr+zfi8h5n7In3yA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.3.tgz", + "integrity": "sha512-GnJbx1kcKXDtoJBVZs/P7ddP0Yt52NNy4nocjBpYPiRhMqTpJCNrSL+fGHZ/i/oP6p/vhE8II0sA6AZGKGnssw==", "dependencies": { "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "node_modules/babel-plugin-istanbul": { @@ -5856,6 +7424,14 @@ "iconv-lite": "0.4.24" } }, + "node_modules/react-scripts/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/lighthouse/node_modules/yargs": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz", @@ -5898,6 +7474,14 @@ "node": ">= 0.6" } }, + "node_modules/jest-config/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6048,6 +7632,25 @@ "semver": "bin/semver.js" } }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/postcss-colormin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", @@ -6086,11 +7689,11 @@ } }, "node_modules/workbox-strategies": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.1.tgz", - "integrity": "sha512-JNaTXPy8wXzKkr+6za7/eJX9opoZk7UgY261I2kPxl80XQD8lMjz0vo9EOcBwvD72v3ZhGJbW84ZaDwFEhFvWA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.3.tgz", + "integrity": "sha512-MgmGRrDVXs7rtSCcetZgkSZyMpRGw8HqL2aguszOc3nUmzGZsT238z/NN9ZouCxSzDu3PQ3ZSKmovAacaIhu1w==", "dependencies": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "node_modules/serve-index": { @@ -6110,6 +7713,14 @@ "node": ">= 0.8.0" } }, + "node_modules/jest-cli/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/jest-each/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6285,9 +7896,9 @@ } }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.10.tgz", + "integrity": "sha512-Q0YbBd6OTsXm8Y21+YUSDXupHnodNC2M4O18jtd3iwJ3+vMZNdKGols0a9G6JOK0dcJ3IdUUHoh908ZI6qhk8Q==", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -6314,6 +7925,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "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==" + }, "node_modules/terser-webpack-plugin/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6333,9 +7949,9 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "peer": true, "bin": { "tsc": "bin/tsc", @@ -6375,6 +7991,30 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@jest/core/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==", + "dependencies": { + "@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.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -6473,6 +8113,14 @@ "node": ">=4" } }, + "node_modules/jest-runner/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6503,11 +8151,12 @@ } }, "node_modules/react": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", - "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { - "loose-envify": "^1.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, "engines": { "node": ">=0.10.0" @@ -6531,6 +8180,18 @@ "source-map": "^0.6.1" } }, + "node_modules/jest-runner/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==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/@types/babel__generator": { "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", @@ -6583,6 +8244,11 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/react-dev-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/@types/express-serve-static-core": { "version": "4.17.28", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", @@ -6604,6 +8270,20 @@ "node": ">=7.0.0" } }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@svgr/hast-util-to-babel-ast": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", @@ -6627,10 +8307,26 @@ "node": ">= 0.6" } }, + "node_modules/@jest/environment/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/react-redux/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" }, "node_modules/depcheck": { "version": "1.4.3", @@ -6670,9 +8366,9 @@ } }, "node_modules/workbox-sw": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.1.tgz", - "integrity": "sha512-hVrQa19yo9wzN1fQQ/h2JlkzFpkuH2qzYT2/rk7CLaWt6tLnTJVFCNHlGRRPhytZSf++LoIy7zThT714sowT/Q==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.3.tgz", + "integrity": "sha512-BQBzm092w+NqdIEF2yhl32dERt9j9MDGUTa2Eaa+o3YKL4Qqw55W9yQC6f44FdAHdAJrJvp0t+HVrfh8AiGj8A==" }, "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { "version": "0.3.3", @@ -6690,6 +8386,22 @@ "ajv": ">=8" } }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/jest-message-util/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", @@ -6798,17 +8510,17 @@ } }, "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", + "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "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/whatwg-mimetype": { @@ -6839,6 +8551,36 @@ "node": ">=8" } }, + "node_modules/@jest/core/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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/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==" + }, "node_modules/jest-watcher/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6859,6 +8601,14 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/react-scripts/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -7038,6 +8788,14 @@ "@babel/core": "^7.13.0" } }, + "node_modules/@jest/environment/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/sass": { "version": "1.49.9", "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", @@ -7061,23 +8819,48 @@ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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==", + "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/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "../CommonServer": { @@ -7139,18 +8922,18 @@ } }, "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", + "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.0", + "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/http-proxy-middleware": { @@ -7177,9 +8960,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", - "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", + "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==", "engines": { "node": ">=10" }, @@ -7187,6 +8970,30 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-mock/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -7207,6 +9014,20 @@ "node": ">=10" } }, + "node_modules/jest-cli/node_modules/pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "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/css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", @@ -7223,28 +9044,29 @@ } }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz", - "integrity": "sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz", + "integrity": "sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.6", + "@babel/helper-create-class-features-plugin": "^7.17.9", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", "@babel/plugin-syntax-decorators": "^7.17.0", "charcodes": "^0.2.0" }, @@ -7255,6 +9077,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@jest/core/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/log-symbols": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", @@ -7271,6 +9107,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@jest/expect": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", + "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", + "dependencies": { + "expect": "^28.1.0", + "jest-snapshot": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/ajv-formats": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", @@ -7301,6 +9149,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-cli/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==" + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -7374,6 +9227,17 @@ "node": ">=8" } }, + "node_modules/jest-snapshot/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7385,9 +9249,12 @@ "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7421,11 +9288,46 @@ "ms": "^2.1.1" } }, + "node_modules/@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "dependencies": { + "@sinclair/typebox": "^0.23.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@types/node": { "version": "17.0.22", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.22.tgz", "integrity": "sha512-8FwbVoG4fy+ykY86XCAclKZDORttqE5/s7dyWZKLXTdv3vRy5HozBEinG5IqhvPXXzIZEcTVbuHlQEI6iuwcmw==" }, + "node_modules/workbox-webpack-plugin/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/react-scripts/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.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/transform/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -7454,6 +9356,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-scripts/node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.3.tgz", + "integrity": "sha512-9o+HO2MbJhJHjDYZaDxJmSDckvDpiuItEsrIShV0DXeCshXWRHhqYyU/PKHMkuClOmFnZhRd6wzv4vpDu/dRKg==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", @@ -7562,6 +9501,22 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-each/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", @@ -7681,6 +9636,22 @@ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, + "node_modules/jest-circus/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@typescript-eslint/type-utils/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7697,6 +9668,14 @@ } } }, + "node_modules/expect/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/yargs/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -7705,6 +9684,17 @@ "node": ">=10" } }, + "node_modules/@jest/fake-timers/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -7724,6 +9714,23 @@ "node": ">=6" } }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -7738,13 +9745,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", - "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.22.0.tgz", + "integrity": "sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==", "dependencies": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/type-utils": "5.16.0", - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/scope-manager": "5.22.0", + "@typescript-eslint/type-utils": "5.22.0", + "@typescript-eslint/utils": "5.22.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -7855,6 +9862,22 @@ "stylis": "4.0.13" } }, + "node_modules/react-scripts/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/fs-extra": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", @@ -7868,6 +9891,23 @@ "node": ">=12" } }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "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", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -7887,10 +9927,40 @@ "integrity": "sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ=", "dev": true }, + "node_modules/jest-jasmine2/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "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/@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==" + }, + "node_modules/react-scripts/node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, "node_modules/domexception": { "version": "2.0.1", @@ -8014,6 +10084,14 @@ "node": ">=6.9.0" } }, + "node_modules/react-scripts/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==", + "engines": { + "node": ">= 8" + } + }, "node_modules/regjsgen": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", @@ -8088,9 +10166,9 @@ } }, "node_modules/eslint-plugin-testing-library": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.1.0.tgz", - "integrity": "sha512-YSNzasJUbyhOTe14ZPygeOBvcPvcaNkwHwrj4vdf+uirr2D32JTDaKi6CP5Os2aWtOcvt4uBSPXp9h5xGoqvWQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.4.0.tgz", + "integrity": "sha512-XjxIf4g33KaZXxRNbR33+0WcRQ/zt8N0R58IY6/kkHnrY6zPsC1gs3u5cTZr5eUmCZN/sjoPak3uF5vHGKg2wg==", "dependencies": { "@typescript-eslint/utils": "^5.13.0" }, @@ -8102,6 +10180,22 @@ "eslint": "^7.5.0 || ^8.0.0" } }, + "node_modules/@jest/console/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", @@ -8134,12 +10228,28 @@ } }, "node_modules/workbox-background-sync": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.1.tgz", - "integrity": "sha512-T5a35fagLXQvV8Dr4+bDU+XYsP90jJ3eBLjZMKuCNELMQZNj+VekCODz1QK44jgoBeQk+vp94pkZV6G+e41pgg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.3.tgz", + "integrity": "sha512-0DD/V05FAcek6tWv9XYj2w5T/plxhDSpclIcAGjA/b7t/6PdaRkQ7ZgtAX6Q/L7kV7wZ8uYRJUoH11VjNipMZw==", "dependencies": { "idb": "^6.1.4", - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" + } + }, + "node_modules/@jest/reporters/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/array-differ": { @@ -8174,9 +10284,9 @@ } }, "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==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -8186,14 +10296,14 @@ } }, "node_modules/jest-watch-typeahead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz", - "integrity": "sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", "dependencies": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", - "jest-regex-util": "^27.0.0", - "jest-watcher": "^27.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", "slash": "^4.0.0", "string-length": "^5.0.1", "strip-ansi": "^7.0.1" @@ -8202,7 +10312,20 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "jest": "^27.0.0" + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@types/yargs": { @@ -8224,6 +10347,19 @@ "node": ">= 0.2.0" } }, + "node_modules/jest-runtime/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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/bfj": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", @@ -8238,6 +10374,20 @@ "node": ">= 8.0.0" } }, + "node_modules/react-scripts/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -8263,6 +10413,30 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" }, + "node_modules/@jest/core/node_modules/jest-validate": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", + "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "dependencies": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -8295,16 +10469,15 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "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==", "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", "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/has-symbols": { @@ -8419,6 +10592,39 @@ "node": ">=0.4.0" } }, + "node_modules/@jest/globals/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-result/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/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==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -8427,6 +10633,14 @@ "node": ">=6" } }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/postcss-logical": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", @@ -8486,6 +10700,11 @@ "node": ">=6" } }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8505,6 +10724,25 @@ "node": ">=8" } }, + "node_modules/jest-environment-node/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/eslint-module-utils/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -8523,30 +10761,33 @@ "dev": true }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz", + "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==", "dependencies": { + "regexp.prototype.flags": "^1.4.1", "object-keys": "^1.1.1", "internal-slot": "^1.0.3", "function-bind": "^1.1.1", "es-to-primitive": "^1.2.1", "get-intrinsic": "^1.1.1", - "is-weakref": "^1.0.1", + "is-weakref": "^1.0.2", "is-callable": "^1.2.4", - "string.prototype.trimend": "^1.0.4", - "is-shared-array-buffer": "^1.0.1", + "string.prototype.trimend": "^1.0.5", + "is-shared-array-buffer": "^1.0.2", "object.assign": "^4.1.2", "is-regex": "^1.1.4", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "get-symbol-description": "^1.0.0", - "unbox-primitive": "^1.0.1", + "unbox-primitive": "^1.0.2", "is-string": "^1.0.7", "call-bind": "^1.0.2", - "object-inspect": "^1.11.0", + "function.prototype.name": "^1.1.5", + "object-inspect": "^1.12.0", "has": "^1.0.3", - "string.prototype.trimstart": "^1.0.4", - "is-negative-zero": "^2.0.1" + "has-property-descriptors": "^1.0.0", + "string.prototype.trimstart": "^1.0.5", + "is-negative-zero": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -8555,6 +10796,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jest-config/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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -8626,20 +10880,57 @@ "postcss": "^8.1.2" } }, + "node_modules/jest-runner/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==", + "dependencies": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, + "node_modules/@jest/core/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/jake/node_modules/async": { @@ -8648,64 +10939,64 @@ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "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==", "dependencies": { "dedent": "^0.7.0", - "jest-matcher-utils": "^27.5.1", - "jest-each": "^27.5.1", - "@jest/environment": "^27.5.1", - "jest-snapshot": "^27.5.1", + "jest-matcher-utils": "^28.1.0", + "jest-each": "^28.1.0", + "@jest/expect": "^28.1.0", + "@jest/environment": "^28.1.0", + "jest-snapshot": "^28.1.0", "co": "^4.6.0", - "expect": "^27.5.1", - "jest-runtime": "^27.5.1", + "jest-runtime": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^28.1.0", "throat": "^6.0.1", - "jest-util": "^27.5.1", + "jest-util": "^28.1.0", "slash": "^3.0.0", - "jest-message-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-message-util": "^28.1.0", + "pretty-format": "^28.1.0", "is-generator-fn": "^2.0.0", - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.0", "stack-utils": "^2.0.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-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", + "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", "dependencies": { "cjs-module-lexer": "^1.0.0", - "jest-mock": "^27.5.1", - "@jest/environment": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-snapshot": "^27.5.1", + "jest-mock": "^28.1.0", + "@jest/environment": "^28.1.0", + "jest-haste-map": "^28.1.0", + "jest-snapshot": "^28.1.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", - "@jest/globals": "^27.5.1", + "@jest/globals": "^28.1.0", "chalk": "^4.0.0", - "@jest/test-result": "^27.5.1", - "jest-util": "^27.5.1", + "@jest/test-result": "^28.1.0", + "jest-util": "^28.1.0", "slash": "^3.0.0", - "@jest/source-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", + "@jest/source-map": "^28.0.2", + "jest-message-util": "^28.1.0", + "jest-regex-util": "^28.0.2", "strip-bom": "^4.0.0", - "@jest/transform": "^27.5.1", + "@jest/transform": "^28.1.0", "glob": "^7.1.3", - "jest-resolve": "^27.5.1", - "@jest/types": "^27.5.1", - "@jest/fake-timers": "^27.5.1", + "jest-resolve": "^28.1.0", + "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.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/global-prefix": { @@ -8757,11 +11048,19 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", + "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", "engines": { - "node": ">= 0.12.0" + "node": ">= 10.0.0" + } + }, + "node_modules/jest-circus/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==", + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/@types/compression": { @@ -8772,15 +11071,45 @@ "@types/express": "*" } }, + "node_modules/react-scripts/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "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/globals/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/babel-jest/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "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==", "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" }, @@ -8876,6 +11205,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-navigation-preload": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.1.tgz", + "integrity": "sha512-aKrgAbn2IMgzTowTi/ZyKdQUcES2m++9aGtpxqsX7Gn9ovCY8zcssaMEAMMwrIeveij5HiWNBrmj6MWDHi+0rg==", + "dependencies": { + "workbox-core": "6.5.1" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -8884,6 +11221,44 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz", + "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@babel/plugin-transform-react-constant-elements": { "version": "7.17.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz", @@ -8914,11 +11289,57 @@ "postcss": "^8.1.0" } }, + "node_modules/react-scripts/node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "emittery": "^0.8.1", + "jest-docblock": "^27.5.1", + "@jest/environment": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-runtime": "^27.5.1", + "source-map-support": "^0.5.6", + "@types/node": "*", + "@jest/console": "^27.5.1", + "chalk": "^4.0.0", + "@jest/test-result": "^27.5.1", + "throat": "^6.0.1", + "jest-util": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-environment-node": "^27.5.1", + "@jest/transform": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-resolve": "^27.5.1", + "@jest/types": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-worker": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/@jest/test-result/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/cssnano-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", @@ -8963,11 +11384,11 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", + "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", "dependencies": { - "array-includes": "^3.1.3", + "array-includes": "^3.1.4", "object.assign": "^4.1.2" }, "engines": { @@ -9064,6 +11485,11 @@ "@babel/core": "^7.0.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==" + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -9080,6 +11506,14 @@ "node": ">=8" } }, + "node_modules/@jest/test-sequencer/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/regenerate-unicode-properties": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", @@ -9160,6 +11594,18 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/jest-runtime/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==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/jest-each/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", @@ -9181,6 +11627,17 @@ "node": ">=8" } }, + "node_modules/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", @@ -9244,9 +11701,9 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9305,6 +11762,22 @@ "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" }, + "node_modules/jest-runtime/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@svgr/plugin-jsx": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", @@ -9359,6 +11832,19 @@ "tslib": "^2.0.3" } }, + "node_modules/@jest/test-sequencer/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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -9389,6 +11875,20 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "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==", + "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/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -9550,42 +12050,44 @@ } }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", + "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", "dependencies": { - "@babel/core": "^7.8.0", - "jest-runner": "^27.5.1", - "jest-circus": "^27.5.1", - "jest-get-type": "^27.5.1", + "@babel/core": "^7.11.6", + "jest-runner": "^28.1.0", + "jest-circus": "^28.1.0", + "jest-get-type": "^28.0.2", "deepmerge": "^4.2.2", - "babel-jest": "^27.5.1", + "babel-jest": "^28.1.0", "parse-json": "^5.2.0", "chalk": "^4.0.0", "strip-json-comments": "^3.1.1", - "jest-util": "^27.5.1", + "jest-util": "^28.1.0", "slash": "^3.0.0", - "jest-regex-util": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "pretty-format": "^27.5.1", - "glob": "^7.1.1", - "jest-resolve": "^27.5.1", - "@jest/types": "^27.5.1", - "@jest/test-sequencer": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-environment-node": "^28.1.0", + "jest-validate": "^28.1.0", + "pretty-format": "^28.1.0", + "glob": "^7.1.3", + "jest-resolve": "^28.1.0", + "@jest/types": "^28.1.0", + "@jest/test-sequencer": "^28.1.0", "graceful-fs": "^4.2.9", "ci-info": "^3.2.0", "micromatch": "^4.0.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" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } @@ -9596,6 +12098,14 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, + "node_modules/jest-leak-detector/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -9623,6 +12133,20 @@ "node": ">=4" } }, + "node_modules/jest-runner/node_modules/pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "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/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -9650,6 +12174,60 @@ "postcss": "^8.2.15" } }, + "node_modules/react-scripts/node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "jest-config": "^27.5.1", + "jest-runner": "^27.5.1", + "emittery": "^0.8.1", + "strip-ansi": "^6.0.0", + "jest-haste-map": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-changed-files": "^27.5.1", + "@jest/reporters": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-watcher": "^27.5.1", + "@types/node": "*", + "@jest/console": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "chalk": "^4.0.0", + "@jest/test-result": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-validate": "^27.5.1", + "@jest/transform": "^27.5.1", + "exit": "^0.1.2", + "rimraf": "^3.0.0", + "jest-resolve": "^27.5.1", + "@jest/types": "^27.5.1", + "graceful-fs": "^4.2.9", + "ansi-escapes": "^4.2.1", + "micromatch": "^4.0.4" + }, + "engines": { + "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" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9705,6 +12283,14 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/jest-each/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -9733,6 +12319,14 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, + "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -9765,6 +12359,20 @@ "@types/node": "^17.0.23" } }, + "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==", + "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/scss-parser": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/scss-parser/-/scss-parser-1.0.5.tgz", @@ -9799,6 +12407,32 @@ "node": ">=7.0.0" } }, + "node_modules/jest-diff/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/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==", + "dependencies": { + "babel-plugin-jest-hoist": "^28.0.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -9861,9 +12495,9 @@ } }, "node_modules/@types/redux-form": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/@types/redux-form/-/redux-form-8.3.3.tgz", - "integrity": "sha512-RaxUMCXs72H4vSfwU4i/86/RDbQ4p3rK4/4TQvQXHJ49GTyEgdUgWDIaOnKZc84iNwvJTwv+ohDbw/tfXxLg7Q==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@types/redux-form/-/redux-form-8.3.5.tgz", + "integrity": "sha512-SchB4i7nxgWNbJS4cXEZducztkvHzVrb5xlAXwfLpbrLPo6tMY06+kx1GqMv42+YnGy9TpCAkF51a21HatqWBA==", "dependencies": { "@types/react": "*", "redux": "^3.6.0 || ^4.0.0" @@ -9893,6 +12527,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jest-mock/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-spinners": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", @@ -9905,6 +12550,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/react-scripts/node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/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==", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-pnp-resolver": "^1.2.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/should-type-adaptors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", @@ -9915,6 +12592,11 @@ "should-util": "^1.0.0" } }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "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", @@ -9991,6 +12673,30 @@ "node": ">=8" } }, + "node_modules/@jest/test-sequencer/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==", + "dependencies": { + "@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.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", @@ -10031,6 +12737,31 @@ "source-map": "~0.6.1" } }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -10080,17 +12811,17 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", + "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", "dependencies": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^28.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^28.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/webpack-dev-server/node_modules/ws": { @@ -10183,6 +12914,22 @@ "@babel/core": "^7.0.0" } }, + "node_modules/expect/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/xmlhttprequest": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", @@ -10303,6 +13050,19 @@ "react": ">=16.3.0" } }, + "node_modules/workbox-webpack-plugin/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -10340,6 +13100,20 @@ "postcss": "^8.2.15" } }, + "node_modules/react-scripts/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-environment-jsdom": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", @@ -10397,6 +13171,22 @@ "node": ">= 6" } }, + "node_modules/@jest/test-sequencer/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -10419,6 +13209,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/@jest/globals/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/node-forge": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", @@ -10455,6 +13261,17 @@ "node": ">=0.10.0" } }, + "node_modules/react-dev-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -10494,6 +13311,42 @@ } } }, + "node_modules/@jest/core/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/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==", + "dependencies": { + "@jest/transform": "^28.1.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.0.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", @@ -10537,11 +13390,44 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/jest-runtime/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==", + "dependencies": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, + "node_modules/jest-each/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -10575,6 +13461,14 @@ "node": ">= 0.8" } }, + "node_modules/jest-jasmine2/node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, "node_modules/eslint-module-utils/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -10648,6 +13542,21 @@ "node": ">=8" } }, + "node_modules/react-scripts/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", @@ -10686,6 +13595,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@jest/expect-utils/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-validate/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -10741,6 +13666,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, "node_modules/@types/eslint": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", @@ -10815,14 +13748,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@types/eslint-scope": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", @@ -10929,9 +13854,25 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/@rushstack/eslint-patch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.1.tgz", - "integrity": "sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", + "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==" + }, + "node_modules/jest-each/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } }, "node_modules/eslint-module-utils/node_modules/p-locate": { "version": "2.0.0", @@ -10973,6 +13914,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/react-scripts/node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -10999,6 +13953,38 @@ "fsevents": "~2.3.2" } }, + "node_modules/react-scripts/node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "cjs-module-lexer": "^1.0.0", + "jest-mock": "^27.5.1", + "@jest/environment": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-snapshot": "^27.5.1", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "@jest/globals": "^27.5.1", + "chalk": "^4.0.0", + "@jest/test-result": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "@jest/source-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "strip-bom": "^4.0.0", + "@jest/transform": "^27.5.1", + "glob": "^7.1.3", + "jest-resolve": "^27.5.1", + "@jest/types": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -11026,11 +14012,11 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz", - "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz", + "integrity": "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==", "dependencies": { - "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/types": "5.22.0", "eslint-visitor-keys": "^3.0.0" }, "engines": { @@ -11042,9 +14028,9 @@ } }, "node_modules/react-error-overlay": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", - "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==" + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, "node_modules/eslint-module-utils/node_modules/locate-path": { "version": "2.0.0", @@ -11095,6 +14081,11 @@ } } }, + "node_modules/puppeteer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -11166,6 +14157,11 @@ "fd-slicer": "~1.1.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==" + }, "node_modules/@babel/plugin-syntax-decorators": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", @@ -11209,6 +14205,17 @@ "node": ">=0.10.0" } }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", @@ -11280,6 +14287,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-window": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.1.tgz", + "integrity": "sha512-oRlun9u7b7YEjo2fIDBqJkU2hXtrEljXcOytRhfeQRbqXxjUOpFgXSGRSAkmDx1MlKUNOSbr+zfi8h5n7In3yA==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.1" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -11294,6 +14310,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-circus/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -11307,19 +14334,31 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/react-scripts/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/@babel/eslint-parser/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -11345,11 +14384,35 @@ "source-map": "^0.6.0" } }, + "node_modules/@jest/environment/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/@rollup/pluginutils/node_modules/estree-walker": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" }, + "node_modules/jest-runtime/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==", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-pnp-resolver": "^1.2.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -11359,6 +14422,20 @@ "tslib": "^2.0.3" } }, + "node_modules/jest-runtime/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/@rollup/plugin-replace": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", @@ -11421,11 +14498,11 @@ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", "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/has-flag": { @@ -11466,13 +14543,13 @@ } }, "node_modules/workbox-precaching": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.1.tgz", - "integrity": "sha512-EzlPBxvmjGfE56YZzsT/vpVkpLG1XJhoplgXa5RPyVWLUL1LbwEAxhkrENElSS/R9tgiTw80IFwysidfUqLihg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.3.tgz", + "integrity": "sha512-sjNfgNLSsRX5zcc63H/ar/hCf+T19fRtTqvWh795gdpghWb5xsfEkecXEvZ8biEi1QD7X/ljtHphdaPvXDygMQ==", "dependencies": { - "workbox-core": "6.5.1", - "workbox-routing": "6.5.1", - "workbox-strategies": "6.5.1" + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { @@ -11494,6 +14571,20 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/jest-runtime/node_modules/pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "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/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -11530,14 +14621,14 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/workbox-google-analytics": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.1.tgz", - "integrity": "sha512-qZU46/h4dbionYT6Yk6iBkUwpiEzAfnO1W7KkI+AMmY7G9/gA03dQQ7rpTw8F4vWrG7ahTUGWDFv6fERtaw1BQ==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.3.tgz", + "integrity": "sha512-3GLCHotz5umoRSb4aNQeTbILETcrTVEozSfLhHSBaegHs1PnqCmN0zbIy2TjTpph2AGXiNwDrWGF0AN+UgDNTw==", "dependencies": { - "workbox-background-sync": "6.5.1", - "workbox-core": "6.5.1", - "workbox-routing": "6.5.1", - "workbox-strategies": "6.5.1" + "workbox-background-sync": "6.5.3", + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" } }, "node_modules/@babel/runtime": { @@ -11621,6 +14712,21 @@ "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==", "dev": true }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/postcss-page-break": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", @@ -11695,11 +14801,11 @@ } }, "node_modules/workbox-navigation-preload": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.1.tgz", - "integrity": "sha512-aKrgAbn2IMgzTowTi/ZyKdQUcES2m++9aGtpxqsX7Gn9ovCY8zcssaMEAMMwrIeveij5HiWNBrmj6MWDHi+0rg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.3.tgz", + "integrity": "sha512-bK1gDFTc5iu6lH3UQ07QVo+0ovErhRNGvJJO/1ngknT0UQ702nmOUhoN9qE5mhuQSrnK+cqu7O7xeaJ+Rd9Tmg==", "dependencies": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "node_modules/faye-websocket": { @@ -11713,6 +14819,49 @@ "node": ">=0.8.0" } }, + "node_modules/jest-runner/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==", + "dependencies": { + "@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.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/core/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==", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-pnp-resolver": "^1.2.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -11721,6 +14870,11 @@ "node": "*" } }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-sw": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.1.tgz", + "integrity": "sha512-hVrQa19yo9wzN1fQQ/h2JlkzFpkuH2qzYT2/rk7CLaWt6tLnTJVFCNHlGRRPhytZSf++LoIy7zThT714sowT/Q==" + }, "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", @@ -11733,9 +14887,9 @@ } }, "node_modules/react-router": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.2.tgz", - "integrity": "sha512-/MbxyLzd7Q7amp4gDOGaYvXwhEojkJD5BtExkuKmj39VEE0m3l/zipf6h2WIB2jyAO0lI6NGETh4RDcktRm4AQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", + "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==", "dependencies": { "history": "^5.2.0" }, @@ -11761,6 +14915,19 @@ "node": ">= 0.8" } }, + "node_modules/jsdom/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==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/tailwindcss/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11769,6 +14936,17 @@ "node": ">=8" } }, + "node_modules/react-scripts/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -11845,6 +15023,14 @@ "node": ">=0.12.0" } }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -11914,19 +15100,19 @@ } }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", + "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^28.1.0", + "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "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/postcss-svgo/node_modules/svgo": { @@ -11972,9 +15158,9 @@ } }, "node_modules/workbox-core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.1.tgz", - "integrity": "sha512-qObXZ39aFJ2N8X7IUbGrJHKWguliCuU1jOXM/I4MTT84u9BiKD2rHMkIzgeRP1Ixu9+cXU4/XHJq3Cy0Qqc5hw==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.3.tgz", + "integrity": "sha512-Bb9ey5n/M9x+l3fBTlLpHt9ASTzgSGj6vxni7pY72ilB/Pb3XtN+cZ9yueboVhD5+9cNQrC9n/E1fSrqWsUz7Q==" }, "node_modules/magic-string": { "version": "0.25.9", @@ -12015,6 +15201,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-expiration": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.1.tgz", + "integrity": "sha512-iY/cTADAQATMmPkUBRmQdacqq0TJd2wMHimBQz+tRnPGHSMH+/BoLPABPnu7O7rT/g/s59CUYYRGxe3mEgoJCA==", + "dependencies": { + "idb": "^6.1.4", + "workbox-core": "6.5.1" + } + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12030,26 +15225,40 @@ } }, "node_modules/react-redux": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", - "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.1.tgz", + "integrity": "sha512-LMZMsPY4DYdZfLJgd7i79n5Kps5N9XVLCJJeWAaPYTV+Eah2zTuBjTxKtNEbjiyitbq80/eIkm55CYSLqAub3w==", "dependencies": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" }, "peerDependencies": { - "react": "^16.8.3 || ^17" + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" }, "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, "react-dom": { "optional": true }, "react-native": { "optional": true + }, + "redux": { + "optional": true } } }, @@ -12163,13 +15372,21 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/@jest/reporters/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/csso": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", @@ -12208,6 +15425,14 @@ "node": ">=8" } }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-cacheable-response": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.1.tgz", + "integrity": "sha512-3TdtH/luDiytmM+Cn72HCBLZXmbeRNJqZx2yaVOfUZhj0IVwZqQXhNarlGE9/k6U5Jelb+TtpH2mLVhnzfiSMg==", + "dependencies": { + "workbox-core": "6.5.1" + } + }, "node_modules/@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", @@ -12222,6 +15447,14 @@ "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==" }, + "node_modules/jest-environment-node/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", @@ -12278,6 +15511,32 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-runner/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -12286,6 +15545,17 @@ "node": ">=8" } }, + "node_modules/jest-message-util/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -12335,6 +15605,19 @@ "node": ">=10" } }, + "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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/metaviewport-parser": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.2.0.tgz", @@ -12342,9 +15625,9 @@ "dev": true }, "node_modules/eslint-config-react-app": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz", - "integrity": "sha512-xyymoxtIt1EOsSaGag+/jmcywRuieQoA2JbPCjnw9HukFj9/97aGPoZVFioaotzk1K5Qt9sHO5EutZbkrAXS0g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", "dependencies": { "@babel/core": "^7.16.0", "@babel/eslint-parser": "^7.16.3", @@ -12412,6 +15695,14 @@ "@webassemblyjs/wast-printer": "1.11.1" } }, + "node_modules/@jest/globals/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "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", @@ -12474,6 +15765,14 @@ "node": ">=8" } }, + "node_modules/@jest/fake-timers/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", @@ -12485,6 +15784,21 @@ "node": ">=10" } }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -12545,6 +15859,22 @@ "node": ">=8" } }, + "node_modules/jest-cli/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/pretty-format/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -12562,11 +15892,11 @@ } }, "node_modules/workbox-range-requests": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.1.tgz", - "integrity": "sha512-57Da/qRbd9v33YlHX0rlSUVFmE4THCjKqwkmfhY3tNLnSKN2L5YBS3qhWeDO0IrMNgUj+rGve2moKYXeUqQt4A==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.3.tgz", + "integrity": "sha512-pGCP80Bpn/0Q0MQsfETSfmtXsQcu3M2QCJwSFuJ6cDp8s2XmbUXkzbuQhCUzKR86ZH2Vex/VUjb2UaZBGamijA==", "dependencies": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "node_modules/@types/istanbul-reports": { @@ -12675,6 +16005,20 @@ "webidl-conversions": "^4.0.2" } }, + "node_modules/@jest/reporters/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -12708,6 +16052,48 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-scripts/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/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==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/http-link-header": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-0.8.0.tgz", @@ -12727,13 +16113,13 @@ } }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "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==", "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.12.0" @@ -12790,9 +16176,9 @@ } }, "node_modules/@stripe/stripe-js": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.25.0.tgz", - "integrity": "sha512-cywIoKu3sJnBPQ1eKi3BzFHWslA2ePqHvQhcxp7iYYlo1tWcVgEKTSh7y7hb6GoR4TyT3DwlK4v1vOZpVg8u4Q==" + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.29.0.tgz", + "integrity": "sha512-OsUxk0VLlum8E2d6onlEdKuQcvLMs7qTrOXCnl/BGV3fAm65qr6h3e1IZ5AX4lgUlPRrzRcddSOA5DvkKKYLvg==" }, "node_modules/dom-converter": { "version": "0.2.0", @@ -12863,6 +16249,11 @@ "@types/babel__traverse": "*" } }, + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", @@ -12949,6 +16340,38 @@ "node": ">=8" } }, + "node_modules/react-scripts/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/core": "^7.7.2", + "semver": "^7.3.2", + "natural-compare": "^1.4.0", + "jest-matcher-utils": "^27.5.1", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "expect": "^27.5.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "jest-message-util": "^27.5.1", + "@types/prettier": "^2.1.5", + "@types/babel__traverse": "^7.0.4", + "@babel/traverse": "^7.7.2", + "@jest/transform": "^27.5.1", + "pretty-format": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0", + "@babel/types": "^7.0.0", + "@jest/types": "^27.5.1", + "graceful-fs": "^4.2.9", + "@babel/generator": "^7.7.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -13015,6 +16438,14 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-snapshot/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/postcss": { "version": "8.4.12", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", @@ -13043,6 +16474,11 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/postcss-place": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", @@ -13057,6 +16493,17 @@ "postcss": "^8.4" } }, + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", @@ -13102,9 +16549,9 @@ } }, "node_modules/@types/react-redux": { - "version": "7.1.23", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.23.tgz", - "integrity": "sha512-D02o3FPfqQlfu2WeEYwh3x2otYd2Dk1o8wAfsA0B1C2AJEFxE663Ozu7JzuWbznGgW248NaOF6wsqCGNq9d3qw==", + "version": "7.1.24", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.24.tgz", + "integrity": "sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ==", "dependencies": { "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", @@ -13113,12 +16560,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz", - "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz", + "integrity": "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==", "dependencies": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0" + "@typescript-eslint/types": "5.22.0", + "@typescript-eslint/visitor-keys": "5.22.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -13229,6 +16676,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/react-scripts/node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/resolve-url-loader/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -13260,6 +16723,31 @@ "node": ">=6.0.0" } }, + "node_modules/jest-config/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==", + "dependencies": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/postcss-font-variant": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", @@ -13331,18 +16819,32 @@ "node": ">=0.10.0" } }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dependencies": { + "@jest/console": "^28.1.0", + "@jest/types": "^28.1.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^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" } }, "node_modules/test-exclude": { @@ -13358,6 +16860,11 @@ "node": ">=8" } }, + "node_modules/jest-environment-node/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -13375,6 +16882,22 @@ "node": ">=4" } }, + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/eslint-plugin-flowtype": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", @@ -13419,6 +16942,22 @@ "react": ">=16.8.0" } }, + "node_modules/@jest/fake-timers/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -13460,6 +16999,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/jest-snapshot/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -13495,9 +17042,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@babel/runtime-corejs3": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz", - "integrity": "sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz", + "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==", "dependencies": { "core-js-pure": "^3.20.2", "regenerator-runtime": "^0.13.4" @@ -13549,13 +17096,13 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" }, "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" }, @@ -13582,6 +17129,33 @@ "node": ">=8" } }, + "node_modules/jest-config/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -13639,6 +17213,25 @@ "node": ">=8" } }, + "node_modules/jest-config/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==", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-pnp-resolver": "^1.2.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -13728,22 +17321,29 @@ "node": ">=0.10.0" } }, + "node_modules/jest-jasmine2/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "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==", "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "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/cssnano": { @@ -13777,6 +17377,15 @@ "node": ">=8" } }, + "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==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/clean-css": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", @@ -13830,41 +17439,47 @@ "minimatch": "^3.0.4" } }, + "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==" + }, "node_modules/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dependencies": { "type-is": "~1.6.18", "safe-buffer": "5.2.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-type": "~1.0.4", - "send": "0.17.2", - "cookie": "0.4.2", + "send": "0.18.0", + "cookie": "0.5.0", "methods": "~1.1.2", "proxy-addr": "~2.0.7", "accepts": "~1.3.8", "range-parser": "~1.2.1", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "debug": "2.6.9", "encodeurl": "~1.0.2", "etag": "~1.8.1", "path-to-regexp": "0.1.7", - "statuses": "~1.5.0", + "statuses": "2.0.1", "parseurl": "~1.3.3", "setprototypeof": "1.2.0", "merge-descriptors": "1.0.1", "vary": "~1.1.2", - "serve-static": "1.14.2", + "serve-static": "1.15.0", "content-disposition": "0.5.4", "escape-html": "~1.0.3", + "http-errors": "2.0.0", "cookie-signature": "1.0.6", "utils-merge": "1.0.1", "array-flatten": "1.1.1", - "depd": "~1.1.2", - "qs": "6.9.7" + "depd": "2.0.0", + "qs": "6.10.3" }, "engines": { "node": ">= 0.10.0" @@ -13955,24 +17570,24 @@ } }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.0.tgz", + "integrity": "sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^28.1.0", + "@jest/expect": "^28.1.0", + "@jest/types": "^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/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==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -14021,20 +17636,26 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/lighthouse/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/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", + "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/should-format": { @@ -14062,6 +17683,22 @@ "postcss": "^8.2.15" } }, + "node_modules/jest-runtime/node_modules/jest-validate": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", + "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "dependencies": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", @@ -14112,6 +17749,21 @@ "concat-map": "0.0.1" } }, + "node_modules/react-scripts/node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/split-on-first": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", @@ -14120,6 +17772,22 @@ "node": ">=6" } }, + "node_modules/jest-runtime/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==", + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/csso/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14182,13 +17850,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -14197,11 +17866,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "node_modules/react-scripts/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, "node_modules/jest-jasmine2/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -14286,11 +17977,30 @@ "node": ">=8" } }, + "node_modules/@jest/test-sequencer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv-formats/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==" }, + "node_modules/jest-diff/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -14317,6 +18027,22 @@ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, + "node_modules/jest-runner/node_modules/jest-validate": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", + "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "dependencies": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", @@ -14361,16 +18087,16 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -14434,6 +18160,17 @@ "node": ">= 0.8" } }, + "node_modules/jest-matcher-utils/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/follow-redirects": { "version": "1.14.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", @@ -14533,6 +18270,21 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "node_modules/jest-jasmine2/node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/tailwindcss/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -14548,6 +18300,14 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/expect/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -14571,14 +18331,14 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -14620,9 +18380,9 @@ } }, "node_modules/react-dev-utils": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", - "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "dependencies": { "loader-utils": "^3.2.0", "gzip-size": "^6.0.0", @@ -14645,7 +18405,7 @@ "find-up": "^5.0.0", "open": "^8.4.0", "escape-string-regexp": "^4.0.0", - "react-error-overlay": "^6.0.10", + "react-error-overlay": "^6.0.11", "@babel/code-frame": "^7.16.0", "fork-ts-checker-webpack-plugin": "^6.5.0" }, @@ -14728,6 +18488,20 @@ "tslib": "^2.0.3" } }, + "node_modules/jest-jasmine2/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/svgo/node_modules/nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -14748,23 +18522,23 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -14907,6 +18681,14 @@ "node": ">= 8" } }, + "node_modules/workbox-webpack-plugin/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14969,6 +18751,36 @@ "node": ">=0.10.0" } }, + "node_modules/@jest/environment/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/@jest/types": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", @@ -14984,16 +18796,47 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "node_modules/jest-message-util/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==", "dependencies": { - "@jest/types": "^27.5.1", + "@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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-mock": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", + "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "dependencies": { + "@jest/types": "^28.1.0", "@types/node": "*" }, "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/ansi-styles": { @@ -15091,19 +18934,19 @@ } }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "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==", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "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/deep-is": { @@ -15151,6 +18994,17 @@ } } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/immutable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", @@ -15190,6 +19044,20 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, + "node_modules/jest-jasmine2/node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -15215,41 +19083,42 @@ } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", + "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", "dependencies": { - "jest-config": "^27.5.1", - "jest-runner": "^27.5.1", - "emittery": "^0.8.1", + "jest-config": "^28.1.0", + "jest-runner": "^28.1.0", "strip-ansi": "^6.0.0", - "jest-haste-map": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-changed-files": "^27.5.1", - "@jest/reporters": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-haste-map": "^28.1.0", + "jest-snapshot": "^28.1.0", + "jest-changed-files": "^28.0.2", + "@jest/reporters": "^28.1.0", + "jest-runtime": "^28.1.0", + "jest-watcher": "^28.1.0", "@types/node": "*", - "@jest/console": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", + "@jest/console": "^28.1.0", + "jest-resolve-dependencies": "^28.1.0", "chalk": "^4.0.0", - "@jest/test-result": "^27.5.1", - "jest-util": "^27.5.1", + "@jest/test-result": "^28.1.0", + "jest-util": "^28.1.0", "slash": "^3.0.0", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-validate": "^27.5.1", - "@jest/transform": "^27.5.1", + "jest-message-util": "^28.1.0", + "jest-regex-util": "^28.0.2", + "jest-validate": "^28.1.0", + "@jest/transform": "^28.1.0", "exit": "^0.1.2", "rimraf": "^3.0.0", - "jest-resolve": "^27.5.1", - "@jest/types": "^27.5.1", + "pretty-format": "^28.1.0", + "jest-resolve": "^28.1.0", + "@jest/types": "^28.1.0", "graceful-fs": "^4.2.9", + "ci-info": "^3.2.0", "ansi-escapes": "^4.2.1", "micromatch": "^4.0.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" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -15260,6 +19129,30 @@ } } }, + "node_modules/jest-config/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==", + "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", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -15285,6 +19178,21 @@ } } }, + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/file-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", @@ -15304,6 +19212,14 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/jest-watcher/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/postcss-reduce-transforms": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", @@ -15369,6 +19285,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-result/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -15477,6 +19426,17 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@jest/test-result/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -15508,6 +19468,19 @@ "node": ">=6.9.0" } }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -15573,12 +19546,12 @@ } }, "node_modules/workbox-expiration": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.1.tgz", - "integrity": "sha512-iY/cTADAQATMmPkUBRmQdacqq0TJd2wMHimBQz+tRnPGHSMH+/BoLPABPnu7O7rT/g/s59CUYYRGxe3mEgoJCA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.3.tgz", + "integrity": "sha512-jzYopYR1zD04ZMdlbn/R2Ik6ixiXbi15c9iX5H8CTi6RPDz7uhvMLZPKEndZTpfgmUk8mdmT9Vx/AhbuCl5Sqw==", "dependencies": { "idb": "^6.1.4", - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "node_modules/send/node_modules/ms": { @@ -15596,6 +19569,20 @@ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" }, + "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==", + "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/@babel/plugin-transform-modules-umd": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", @@ -15805,6 +19792,31 @@ "node": ">=6" } }, + "node_modules/@jest/reporters/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==", + "dependencies": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/open": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", @@ -15997,6 +20009,42 @@ "postcss": "^8.2.15" } }, + "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==", + "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/react-scripts/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve-dependencies/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -16104,11 +20152,11 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz", - "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.22.0.tgz", + "integrity": "sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==", "dependencies": { - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/utils": "5.22.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -16145,6 +20193,43 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, + "node_modules/jest-jasmine2/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watch-typeahead/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==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-matcher-utils/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==" + }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/postcss-overflow-shorthand": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", @@ -16176,6 +20261,17 @@ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, + "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==", + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/eslint/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -16211,6 +20307,53 @@ } ] }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-build": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.1.tgz", + "integrity": "sha512-coDUDzHvFZ1ADOl3wKCsCSyOBvkPKlPgcQDb6LMMShN1zgF31Mev/1HzN3+9T2cjjWAgFwZKkuRyExqc1v21Zw==", + "dependencies": { + "workbox-recipes": "6.5.1", + "@babel/core": "^7.11.1", + "@rollup/plugin-node-resolve": "^11.2.1", + "fast-json-stable-stringify": "^2.1.0", + "workbox-google-analytics": "6.5.1", + "workbox-strategies": "6.5.1", + "workbox-routing": "6.5.1", + "common-tags": "^1.8.0", + "workbox-broadcast-update": "6.5.1", + "lodash": "^4.17.20", + "workbox-precaching": "6.5.1", + "rollup": "^2.43.1", + "workbox-range-requests": "6.5.1", + "source-map": "^0.8.0-beta.0", + "@babel/runtime": "^7.11.2", + "fs-extra": "^9.0.1", + "workbox-expiration": "6.5.1", + "stringify-object": "^3.3.0", + "workbox-streams": "6.5.1", + "@babel/preset-env": "^7.11.0", + "@rollup/plugin-replace": "^2.4.1", + "workbox-core": "6.5.1", + "@apideck/better-ajv-errors": "^0.3.1", + "workbox-cacheable-response": "6.5.1", + "@rollup/plugin-babel": "^5.2.0", + "strip-comments": "^2.0.1", + "ajv": "^8.6.0", + "workbox-sw": "6.5.1", + "workbox-window": "6.5.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "tempy": "^0.6.0", + "workbox-background-sync": "6.5.1", + "workbox-navigation-preload": "6.5.1", + "pretty-bytes": "^5.3.0", + "upath": "^1.2.0", + "glob": "^7.1.6", + "rollup-plugin-terser": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/svgo/node_modules/domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", @@ -16220,6 +20363,21 @@ "domelementtype": "1" } }, + "node_modules/@jest/test-sequencer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -16243,6 +20401,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -16262,6 +20428,11 @@ "node": ">=0.8.19" } }, + "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==" + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -16358,9 +20529,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz", - "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz", + "integrity": "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -16391,9 +20562,9 @@ } }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -16439,16 +20610,16 @@ } }, "node_modules/puppeteer": { - "version": "13.5.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.5.1.tgz", - "integrity": "sha512-wWxO//vMiqxlvuzHMAJ0pRJeDHvDtM7DQpW1GKdStz2nZo2G42kOXBDgkmQ+zqjwMCFofKGesBeeKxIkX9BO+w==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", + "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", "hasInstallScript": true, "dependencies": { "cross-fetch": "3.1.5", - "debug": "4.3.3", - "devtools-protocol": "0.0.969999", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.0", + "https-proxy-agent": "5.0.1", "pkg-dir": "4.2.0", "progress": "2.0.3", "proxy-from-env": "1.1.0", @@ -16475,13 +20646,26 @@ "node": ">= 8" } }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16502,9 +20686,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.969999", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.969999.tgz", - "integrity": "sha512-6GfzuDWU0OFAuOvBokXpXPLxjOJ5DZ157Ue3sGQQM3LgAamb8m0R0ruSfN0DDu+XG5XJgT50i6zZ/0o8RglreQ==" + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==" }, "node_modules/del": { "version": "6.0.0", @@ -16586,6 +20770,20 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/jest-mock/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -16632,6 +20830,14 @@ "object-assign": "^4.1.1" } }, + "node_modules/jest-environment-jsdom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/immer": { "version": "9.0.12", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz", @@ -16671,9 +20877,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "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==", "dependencies": { "@sinonjs/commons": "^1.7.0" } @@ -16692,19 +20898,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.1.tgz", + "integrity": "sha512-qObXZ39aFJ2N8X7IUbGrJHKWguliCuU1jOXM/I4MTT84u9BiKD2rHMkIzgeRP1Ixu9+cXU4/XHJq3Cy0Qqc5hw==" + }, "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -16729,6 +20932,39 @@ "postcss": "^8.1.0" } }, + "node_modules/react-scripts/node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "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 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/workbox-webpack-plugin/node_modules/workbox-background-sync": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.1.tgz", + "integrity": "sha512-T5a35fagLXQvV8Dr4+bDU+XYsP90jJ3eBLjZMKuCNELMQZNj+VekCODz1QK44jgoBeQk+vp94pkZV6G+e41pgg==", + "dependencies": { + "idb": "^6.1.4", + "workbox-core": "6.5.1" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -16801,6 +21037,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "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/postcss-gap-properties": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", @@ -16891,6 +21146,20 @@ "node": ">=7.0.0" } }, + "node_modules/jest-jasmine2/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/postcss-minify-selectors": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz", @@ -16911,19 +21180,19 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", + "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^28.1.0", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "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 || ^10.0.0" @@ -16949,12 +21218,12 @@ } }, "node_modules/object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16965,6 +21234,25 @@ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" }, + "node_modules/jest-jasmine2/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/postcss-custom-properties": { "version": "12.1.5", "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.5.tgz", @@ -16997,38 +21285,37 @@ } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.0.tgz", + "integrity": "sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==", "dependencies": { "istanbul-lib-source-maps": "^4.0.0", - "jest-haste-map": "^27.5.1", + "@jridgewell/trace-mapping": "^0.3.7", + "strip-ansi": "^6.0.0", "istanbul-lib-coverage": "^3.0.0", "collect-v8-coverage": "^1.0.0", - "source-map": "^0.6.0", "istanbul-lib-instrument": "^5.1.0", "string-length": "^4.0.1", "@types/node": "*", - "v8-to-istanbul": "^8.1.0", - "@jest/console": "^27.5.1", + "v8-to-istanbul": "^9.0.0", + "@jest/console": "^28.1.0", "chalk": "^4.0.0", - "@jest/test-result": "^27.5.1", - "jest-util": "^27.5.1", + "@jest/test-result": "^28.1.0", + "jest-util": "^28.1.0", "slash": "^3.0.0", "istanbul-reports": "^3.1.3", - "@jest/transform": "^27.5.1", + "@jest/transform": "^28.1.0", "exit": "^0.1.2", - "glob": "^7.1.2", - "jest-resolve": "^27.5.1", - "@jest/types": "^27.5.1", + "glob": "^7.1.3", + "@jest/types": "^28.1.0", "terminal-link": "^2.0.0", "istanbul-lib-report": "^3.0.0", "@bcoe/v8-coverage": "^0.2.3", "graceful-fs": "^4.2.9", - "jest-worker": "^27.5.1" + "jest-worker": "^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" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -17039,6 +21326,14 @@ } } }, + "node_modules/@jest/core/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==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/react-intersection-observer": { "version": "8.33.1", "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-8.33.1.tgz", @@ -17119,6 +21414,17 @@ "node": ">=8" } }, + "node_modules/jest-cli/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/postcss-color-rebeccapurple": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", @@ -17153,6 +21459,20 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, + "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/eslint/node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -17223,13 +21543,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "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==", "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -17336,20 +21655,12 @@ } }, "node_modules/workbox-streams": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.1.tgz", - "integrity": "sha512-7jaTWm6HRGJ/ewECnhb+UgjTT50R42E0/uNCC4eTKQwnLO/NzNGjoXTdQgFjo4zteR+L/K6AtFAiYKH3ZJbAYw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.3.tgz", + "integrity": "sha512-vN4Qi8o+b7zj1FDVNZ+PlmAcy1sBoV7SC956uhqYvZ9Sg1fViSbOpydULOssVJ4tOyKRifH/eoi6h99d+sJ33w==", "dependencies": { - "workbox-core": "6.5.1", - "workbox-routing": "6.5.1" - } - }, - "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==", - "engines": { - "node": ">= 8" + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3" } }, "node_modules/jsonpointer": { @@ -17418,11 +21729,11 @@ } }, "node_modules/workbox-cacheable-response": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.1.tgz", - "integrity": "sha512-3TdtH/luDiytmM+Cn72HCBLZXmbeRNJqZx2yaVOfUZhj0IVwZqQXhNarlGE9/k6U5Jelb+TtpH2mLVhnzfiSMg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.3.tgz", + "integrity": "sha512-6JE/Zm05hNasHzzAGKDkqqgYtZZL2H06ic2GxuRLStA4S/rHUfm2mnLFFXuHAaGR1XuuYyVCEey1M6H3PdZ7SQ==", "dependencies": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "node_modules/text-table": { @@ -17503,16 +21814,16 @@ } }, "node_modules/workbox-recipes": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.1.tgz", - "integrity": "sha512-DGsyKygHggcGPQpWafC/Nmbm1Ny3sB2vE9r//3UbeidXiQ+pLF14KEG1/0NNGRaY+lfOXOagq6d1H7SC8KA+rA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.3.tgz", + "integrity": "sha512-IcgiKYmbGiDvvf3PMSEtmwqxwfQ5zwI7OZPio3GWu4PfehA8jI8JHI3KZj+PCfRiUPZhjQHJ3v1HbNs+SiSkig==", "dependencies": { - "workbox-cacheable-response": "6.5.1", - "workbox-core": "6.5.1", - "workbox-expiration": "6.5.1", - "workbox-precaching": "6.5.1", - "workbox-routing": "6.5.1", - "workbox-strategies": "6.5.1" + "workbox-cacheable-response": "6.5.3", + "workbox-core": "6.5.3", + "workbox-expiration": "6.5.3", + "workbox-precaching": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" } }, "node_modules/bl": { @@ -17611,10 +21922,27 @@ "postcss": "^8.2.15" } }, + "node_modules/@jest/test-sequencer/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -17622,6 +21950,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jest-runtime/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==" + }, "node_modules/postcss-attribute-case-insensitive": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", @@ -17633,6 +21966,21 @@ "postcss": "^8.0.2" } }, + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/portfinder/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -17651,6 +21999,31 @@ "node": ">=8.0.0" } }, + "node_modules/@jest/core/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==", + "dependencies": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", @@ -17814,14 +22187,14 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -17888,21 +22261,12 @@ } }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "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==", "requires": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { @@ -18097,13 +22461,14 @@ } }, "@babel/plugin-proposal-decorators": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz", - "integrity": "sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz", + "integrity": "sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.6", + "@babel/helper-create-class-features-plugin": "^7.17.9", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", "@babel/plugin-syntax-decorators": "^7.17.0", "charcodes": "^0.2.0" } @@ -18375,9 +22740,9 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "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==", "requires": { "@babel/helper-plugin-utils": "^7.16.7" } @@ -18661,9 +23026,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz", + "integrity": "sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig==", "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -18880,9 +23245,9 @@ } }, "@babel/runtime-corejs3": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz", - "integrity": "sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz", + "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==", "requires": { "core-js-pure": "^3.20.2", "regenerator-runtime": "^0.13.4" @@ -19222,18 +23587,47 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", + "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^28.1.0", + "jest-util": "^28.1.0", "slash": "^3.0.0" }, "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -19243,6 +23637,356 @@ "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "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" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", + "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", + "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", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "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", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "@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==", + "requires": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==" + }, + "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==", + "requires": { + "@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.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" + } + }, + "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==" + }, + "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==", + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "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==", + "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==", + "requires": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + } + }, + "jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^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==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "@jest/environment": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", + "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "requires": { + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/node": "*", + "jest-mock": "^28.1.0" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -19258,118 +24002,72 @@ } } }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "@jest/expect": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", + "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "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==", + "requires": { + "jest-get-type": "^28.0.2" }, "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "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==" } } }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", + "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^28.1.0", + "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "jest-message-util": "^28.1.0", + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0" }, "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -19379,50 +24077,535 @@ "supports-color": "^7.1.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "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" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.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==", + "requires": { + "@jest/environment": "^28.1.0", + "@jest/expect": "^28.1.0", + "@jest/types": "^28.1.0" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@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==", + "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": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "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", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.0" + }, + "dependencies": { + "@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==", + "requires": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "@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.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" + } + }, + "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==" + }, + "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==", + "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-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "requires": { + "@sinclair/typebox": "^0.23.3" + } + }, "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", + "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", "requires": { + "@jridgewell/trace-mapping": "^0.3.7", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } + "graceful-fs": "^4.2.9" } }, "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", + "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@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": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", + "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", "requires": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^28.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^28.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "@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.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" + } + }, + "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==" + }, + "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==", + "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-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/transform": { @@ -19552,9 +24735,9 @@ "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.10.tgz", + "integrity": "sha512-Q0YbBd6OTsXm8Y21+YUSDXupHnodNC2M4O18jtd3iwJ3+vMZNdKGols0a9G6JOK0dcJ3IdUUHoh908ZI6qhk8Q==", "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -19703,9 +24886,9 @@ } }, "@rushstack/eslint-patch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.1.tgz", - "integrity": "sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", + "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==" }, "@sentry/core": { "version": "6.19.1", @@ -19774,6 +24957,11 @@ "tslib": "^1.9.3" } }, + "@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==" + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -19783,25 +24971,25 @@ } }, "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "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==", "requires": { "@sinonjs/commons": "^1.7.0" } }, "@stripe/react-stripe-js": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.7.0.tgz", - "integrity": "sha512-L20v8Jq0TDZFL2+y+uXD751t6q9SalSFkSYZpmZ2VWrGZGK7HAGfRQ804dzYSSr5fGenW6iz6y7U0YKfC/TK3g==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.7.2.tgz", + "integrity": "sha512-IAVg2nPUPoSwI//XDRCO7D8mGeK4+N3Xg63fYZHmlfEWAuFVcuaqJKTT67uzIdKYZhHZ/NMdZw/ttz+GOjP/rQ==", "requires": { "prop-types": "^15.7.2" } }, "@stripe/stripe-js": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.25.0.tgz", - "integrity": "sha512-cywIoKu3sJnBPQ1eKi3BzFHWslA2ePqHvQhcxp7iYYlo1tWcVgEKTSh7y7hb6GoR4TyT3DwlK4v1vOZpVg8u4Q==" + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.29.0.tgz", + "integrity": "sha512-OsUxk0VLlum8E2d6onlEdKuQcvLMs7qTrOXCnl/BGV3fAm65qr6h3e1IZ5AX4lgUlPRrzRcddSOA5DvkKKYLvg==" }, "@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", @@ -20149,9 +25337,9 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==" }, "@types/prop-types": { "version": "15.7.4", @@ -20192,9 +25380,9 @@ } }, "@types/react-redux": { - "version": "7.1.23", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.23.tgz", - "integrity": "sha512-D02o3FPfqQlfu2WeEYwh3x2otYd2Dk1o8wAfsA0B1C2AJEFxE663Ozu7JzuWbznGgW248NaOF6wsqCGNq9d3qw==", + "version": "7.1.24", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.24.tgz", + "integrity": "sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ==", "requires": { "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", @@ -20223,9 +25411,9 @@ } }, "@types/redux-form": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/@types/redux-form/-/redux-form-8.3.3.tgz", - "integrity": "sha512-RaxUMCXs72H4vSfwU4i/86/RDbQ4p3rK4/4TQvQXHJ49GTyEgdUgWDIaOnKZc84iNwvJTwv+ohDbw/tfXxLg7Q==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@types/redux-form/-/redux-form-8.3.5.tgz", + "integrity": "sha512-SchB4i7nxgWNbJS4cXEZducztkvHzVrb5xlAXwfLpbrLPo6tMY06+kx1GqMv42+YnGy9TpCAkF51a21HatqWBA==", "requires": { "@types/react": "*", "redux": "^3.6.0 || ^4.0.0" @@ -20292,6 +25480,11 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -20323,13 +25516,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", - "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.22.0.tgz", + "integrity": "sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==", "requires": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/type-utils": "5.16.0", - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/scope-manager": "5.22.0", + "@typescript-eslint/type-utils": "5.22.0", + "@typescript-eslint/utils": "5.22.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -20354,21 +25547,21 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.16.0.tgz", - "integrity": "sha512-bitZtqO13XX64/UOQKoDbVg2H4VHzbHnWWlTRc7ofq7SuQyPCwEycF1Zmn5ZAMTJZ3p5uMS7xJGUdOtZK7LrNw==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.22.0.tgz", + "integrity": "sha512-rKxoCUtAHwEH6IcAoVpqipY6Th+YKW7WFspAKu0IFdbdKZpveFBeqxxE9Xn+GWikhq1o03V3VXbxIe+GdhggiQ==", "requires": { - "@typescript-eslint/utils": "5.16.0" + "@typescript-eslint/utils": "5.22.0" } }, "@typescript-eslint/parser": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz", - "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz", + "integrity": "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==", "requires": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.22.0", + "@typescript-eslint/types": "5.22.0", + "@typescript-eslint/typescript-estree": "5.22.0", "debug": "^4.3.2" }, "dependencies": { @@ -20388,20 +25581,20 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz", - "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz", + "integrity": "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==", "requires": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0" + "@typescript-eslint/types": "5.22.0", + "@typescript-eslint/visitor-keys": "5.22.0" } }, "@typescript-eslint/type-utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz", - "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.22.0.tgz", + "integrity": "sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==", "requires": { - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/utils": "5.22.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -20413,21 +25606,26 @@ "requires": { "ms": "2.1.2" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "@typescript-eslint/types": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz", - "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==" + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz", + "integrity": "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==" }, "@typescript-eslint/typescript-estree": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz", - "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz", + "integrity": "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==", "requires": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0", + "@typescript-eslint/types": "5.22.0", + "@typescript-eslint/visitor-keys": "5.22.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -20451,14 +25649,14 @@ } }, "@typescript-eslint/utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz", - "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.22.0.tgz", + "integrity": "sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==", "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.22.0", + "@typescript-eslint/types": "5.22.0", + "@typescript-eslint/typescript-estree": "5.22.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -20480,11 +25678,11 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz", - "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz", + "integrity": "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==", "requires": { - "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/types": "5.22.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -20849,9 +26047,9 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", + "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==" }, "adjust-sourcemap-loader": { "version": "4.0.0", @@ -21006,13 +26204,13 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" } @@ -21023,23 +26221,25 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "arrify": { @@ -21095,11 +26295,12 @@ "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==" }, "axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "requires": { - "follow-redirects": "^1.14.8" + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" } }, "axobject-query": { @@ -21423,26 +26624,33 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" } } }, @@ -21822,9 +27030,10 @@ } }, "commander": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", - "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==" + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", + "dev": true }, "common-path-prefix": { "version": "3.0.0", @@ -22338,11 +27547,12 @@ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "defined": { @@ -22430,9 +27640,9 @@ "dev": true }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-newline": { "version": "3.1.0", @@ -22464,9 +27674,9 @@ } }, "devtools-protocol": { - "version": "0.0.969999", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.969999.tgz", - "integrity": "sha512-6GfzuDWU0OFAuOvBokXpXPLxjOJ5DZ157Ue3sGQQM3LgAamb8m0R0ruSfN0DDu+XG5XJgT50i6zZ/0o8RglreQ==" + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==" }, "didyoumean": { "version": "1.2.2", @@ -22474,9 +27684,9 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==" }, "dir-glob": { "version": "3.0.1", @@ -22636,9 +27846,9 @@ "integrity": "sha512-z1Axg0Fu54fse8wN4fd+GAINdU5mJmLtcl6bqIcYyzNVGONcfHAeeJi88KYMQVKalhXlYuVPzKkFIU5VD0raUw==" }, "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==" }, "emoji-regex": { "version": "9.2.2", @@ -22703,30 +27913,33 @@ } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz", + "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "regexp.prototype.flags": "^1.4.1", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, "es-module-lexer": { @@ -22734,6 +27947,14 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -22941,9 +28162,9 @@ } }, "eslint-config-react-app": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz", - "integrity": "sha512-xyymoxtIt1EOsSaGag+/jmcywRuieQoA2JbPCjnw9HukFj9/97aGPoZVFioaotzk1K5Qt9sHO5EutZbkrAXS0g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", "requires": { "@babel/core": "^7.16.0", "@babel/eslint-parser": "^7.16.3", @@ -23062,23 +28283,23 @@ } }, "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "requires": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-module-utils": "^2.7.3", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" }, "dependencies": { "doctrine": { @@ -23164,14 +28385,14 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", - "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", + "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==" }, "eslint-plugin-testing-library": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.1.0.tgz", - "integrity": "sha512-YSNzasJUbyhOTe14ZPygeOBvcPvcaNkwHwrj4vdf+uirr2D32JTDaKi6CP5Os2aWtOcvt4uBSPXp9h5xGoqvWQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.4.0.tgz", + "integrity": "sha512-XjxIf4g33KaZXxRNbR33+0WcRQ/zt8N0R58IY6/kkHnrY6zPsC1gs3u5cTZr5eUmCZN/sjoPak3uF5vHGKg2wg==", "requires": { "@typescript-eslint/utils": "^5.13.0" } @@ -23301,57 +28522,158 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", + "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.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": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==" + }, + "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==", + "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" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -23507,17 +28829,24 @@ "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=" }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "find-cache-dir": { @@ -23564,9 +28893,9 @@ "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" }, "fork-ts-checker-webpack-plugin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", - "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", "requires": { "@babel/code-frame": "^7.8.3", "@types/json-schema": "^7.0.5", @@ -23667,9 +28996,9 @@ } }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -23727,11 +29056,27 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -23880,15 +29225,23 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -24031,15 +29384,27 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "http-link-header": { @@ -24101,9 +29466,9 @@ } }, "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==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "requires": { "agent-base": "6", "debug": "4" @@ -24383,9 +29748,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "requires": { "has-tostringtag": "^1.0.0" } @@ -24436,9 +29801,12 @@ "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "2.0.1", @@ -24643,51 +30011,71 @@ } }, "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", + "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", "requires": { - "@jest/core": "^27.5.1", + "@jest/core": "^28.1.0", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^28.1.0" } }, "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "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==", "requires": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "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==", "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@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.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "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": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24723,6 +30111,42 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==", + "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" + } + }, + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -24734,24 +30158,45 @@ } }, "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", + "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@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": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^28.1.0", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24787,6 +30232,60 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, + "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==", + "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==", + "requires": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "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==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -24794,40 +30293,95 @@ "requires": { "has-flag": "^4.0.0" } + }, + "yargs": { + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "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", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } } } }, "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", + "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@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", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "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": "^27.5.1", + "pretty-format": "^28.1.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "dependencies": { + "@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==", + "requires": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24836,6 +30390,40 @@ "color-convert": "^2.0.1" } }, + "babel-jest": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.0.tgz", + "integrity": "sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==", + "requires": { + "@jest/transform": "^28.1.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.0.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.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==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "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==", + "requires": { + "babel-plugin-jest-hoist": "^28.0.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -24863,6 +30451,120 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, + "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==", + "requires": { + "@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.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" + } + }, + "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==" + }, + "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==", + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "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==", + "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==", + "requires": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + } + }, + "jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^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==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -24870,18 +30572,27 @@ "requires": { "has-flag": "^4.0.0" } + }, + "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==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", + "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" }, "dependencies": { "ansi-styles": { @@ -24919,6 +30630,34 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -24930,25 +30669,46 @@ } }, "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", + "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", + "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.0", + "pretty-format": "^28.1.0" }, "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24984,6 +30744,47 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, + "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==", + "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" + } + }, + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25006,19 +30807,200 @@ "jest-mock": "^27.5.1", "jest-util": "^27.5.1", "jsdom": "^16.6.0" + }, + "dependencies": { + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "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==", "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "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" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-get-type": { @@ -25070,6 +31052,82 @@ "throat": "^6.0.1" }, "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25100,11 +31158,149 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25116,23 +31312,51 @@ } }, "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "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==", "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "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==" + }, + "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==" + }, + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "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==" + } } }, "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", + "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^28.1.0", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.0" }, "dependencies": { "ansi-styles": { @@ -25170,6 +31394,34 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25181,21 +31433,140 @@ } }, "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", + "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^28.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", + "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "requires": { + "@jest/types": "^28.1.0", + "@types/node": "*" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25241,15 +31612,6 @@ } } }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } - }, "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", @@ -25302,43 +31664,92 @@ } }, "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "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==", "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.0" + }, + "dependencies": { + "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==" + } } }, "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", + "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@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", + "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", + "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/transform": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.0.tgz", + "integrity": "sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==", + "requires": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25374,6 +31785,134 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, + "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==", + "requires": { + "@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.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" + } + }, + "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==" + }, + "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==", + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "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==", + "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==", + "requires": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + } + }, + "jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^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==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25381,38 +31920,90 @@ "requires": { "has-flag": "^4.0.0" } + }, + "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==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", + "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@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", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "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" }, "dependencies": { + "@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==", + "requires": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25448,6 +32039,120 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, + "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==", + "requires": { + "@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.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" + } + }, + "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==" + }, + "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==", + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.0", + "jest-validate": "^28.1.0", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "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==", + "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==", + "requires": { + "@jest/types": "^28.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.0" + } + }, + "jest-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^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==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25455,6 +32160,15 @@ "requires": { "has-flag": "^4.0.0" } + }, + "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==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, @@ -25468,34 +32182,78 @@ } }, "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", + "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", "requires": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@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.5.1", + "expect": "^28.1.0", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "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.5.1", - "semver": "^7.3.2" + "pretty-format": "^28.1.0", + "semver": "^7.3.5" }, "dependencies": { + "@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==", + "requires": { + "@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.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.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25531,6 +32289,91 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, + "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==", + "requires": { + "@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.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" + } + }, + "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==" + }, + "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==", + "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-worker": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", + "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^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==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.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==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25538,6 +32381,15 @@ "requires": { "has-flag": "^4.0.0" } + }, + "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==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, @@ -25653,14 +32505,14 @@ } }, "jest-watch-typeahead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz", - "integrity": "sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", "requires": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", - "jest-regex-util": "^27.0.0", - "jest-watcher": "^27.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", "slash": "^4.0.0", "string-length": "^5.0.1", "strip-ansi": "^7.0.1" @@ -25688,6 +32540,11 @@ "supports-color": "^7.1.0" } }, + "char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -25706,6 +32563,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==" + }, "slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", @@ -25739,19 +32601,41 @@ } }, "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", + "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@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.5.1", + "emittery": "^0.10.2", + "jest-util": "^28.1.0", "string-length": "^4.0.1" }, "dependencies": { + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "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", + "chalk": "^4.0.0" + } + }, + "@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==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25787,6 +32671,19 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==", + "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" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25880,6 +32777,18 @@ "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "jsesc": { @@ -25938,11 +32847,11 @@ "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==" }, "jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", + "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", "requires": { - "array-includes": "^3.1.3", + "array-includes": "^3.1.4", "object.assign": "^4.1.2" } }, @@ -26022,6 +32931,12 @@ "yargs-parser": "^21.0.0" }, "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, "cssstyle": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz", @@ -26589,12 +33504,12 @@ } }, "object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "object.values": { @@ -26613,9 +33528,9 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -26887,6 +33802,28 @@ "requires": { "locate-path": "^3.0.0" } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" } } }, @@ -27485,6 +34422,11 @@ "svgo": "^2.7.0" }, "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, "css-tree": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", @@ -27651,15 +34593,15 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "puppeteer": { - "version": "13.5.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.5.1.tgz", - "integrity": "sha512-wWxO//vMiqxlvuzHMAJ0pRJeDHvDtM7DQpW1GKdStz2nZo2G42kOXBDgkmQ+zqjwMCFofKGesBeeKxIkX9BO+w==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", + "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", "requires": { "cross-fetch": "3.1.5", - "debug": "4.3.3", - "devtools-protocol": "0.0.969999", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.0", + "https-proxy-agent": "5.0.1", "pkg-dir": "4.2.0", "progress": "2.0.3", "proxy-from-env": "1.1.0", @@ -27670,13 +34612,18 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", @@ -27690,9 +34637,12 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } }, "query-ast": { "version": "1.0.4", @@ -27746,12 +34696,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -27764,11 +34714,12 @@ } }, "react": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", - "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "requires": { - "loose-envify": "^1.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, "react-app-polyfill": { @@ -27802,9 +34753,9 @@ } }, "react-dev-utils": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", - "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "requires": { "@babel/code-frame": "^7.16.0", "address": "^1.1.2", @@ -27825,13 +34776,21 @@ "open": "^8.4.0", "pkg-up": "^3.1.0", "prompts": "^2.4.2", - "react-error-overlay": "^6.0.10", + "react-error-overlay": "^6.0.11", "recursive-readdir": "^2.2.2", "shell-quote": "^1.7.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -27841,6 +34800,19 @@ "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -27868,6 +34840,22 @@ "p-locate": "^5.0.0" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -27889,9 +34877,9 @@ } }, "react-error-overlay": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", - "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==" + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, "react-frontload": { "version": "2.0.0", @@ -27914,22 +34902,22 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-redux": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", - "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.1.tgz", + "integrity": "sha512-LMZMsPY4DYdZfLJgd7i79n5Kps5N9XVLCJJeWAaPYTV+Eah2zTuBjTxKtNEbjiyitbq80/eIkm55CYSLqAub3w==", "requires": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" }, "dependencies": { "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" } } }, @@ -27939,20 +34927,20 @@ "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" }, "react-router": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.2.tgz", - "integrity": "sha512-/MbxyLzd7Q7amp4gDOGaYvXwhEojkJD5BtExkuKmj39VEE0m3l/zipf6h2WIB2jyAO0lI6NGETh4RDcktRm4AQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", + "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==", "requires": { "history": "^5.2.0" } }, "react-router-dom": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.2.tgz", - "integrity": "sha512-AtYEsAST7bDD4dLSQHDnk/qxWLJdad5t1HFa1qJyUrCeGgEuCSw0VB/27ARbF9Fi/W5598ujvJOm3ujUCVzuYQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz", + "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==", "requires": { "history": "^5.2.0", - "react-router": "6.2.2" + "react-router": "6.3.0" } }, "react-router-redux": { @@ -27961,9 +34949,9 @@ "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4=" }, "react-scripts": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", - "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", "requires": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", @@ -27981,7 +34969,7 @@ "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.0", + "eslint-config-react-app": "^7.0.1", "eslint-webpack-plugin": "^3.1.1", "file-loader": "^6.2.0", "fs-extra": "^10.0.0", @@ -27999,7 +34987,7 @@ "postcss-preset-env": "^7.0.1", "prompts": "^2.4.2", "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.0", + "react-dev-utils": "^12.0.1", "react-refresh": "^0.11.0", "resolve": "^1.20.0", "resolve-url-loader": "^4.0.0", @@ -28013,6 +35001,543 @@ "webpack-dev-server": "^4.6.0", "webpack-manifest-plugin": "^4.0.2", "workbox-webpack-plugin": "^6.4.1" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + } + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + } + }, + "jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "requires": { + "@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==" + } + } + } } }, "readable-stream": { @@ -28446,29 +35971,39 @@ "dev": true }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -28518,14 +36053,14 @@ } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "setprototypeof": { @@ -28854,21 +36389,23 @@ } }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string_decoder": { @@ -29354,13 +36891,13 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, "tsconfig-paths": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", - "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, "dependencies": { @@ -29428,19 +36965,19 @@ } }, "typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "peer": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, @@ -29533,6 +37070,11 @@ "punycode": "^2.1.0" } }, + "use-sync-external-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz", + "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==" + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -29570,20 +37112,13 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "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==", "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==" - } + "convert-source-map": "^1.6.0" } }, "valid-url": { @@ -29938,26 +37473,26 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "workbox-background-sync": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.1.tgz", - "integrity": "sha512-T5a35fagLXQvV8Dr4+bDU+XYsP90jJ3eBLjZMKuCNELMQZNj+VekCODz1QK44jgoBeQk+vp94pkZV6G+e41pgg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.3.tgz", + "integrity": "sha512-0DD/V05FAcek6tWv9XYj2w5T/plxhDSpclIcAGjA/b7t/6PdaRkQ7ZgtAX6Q/L7kV7wZ8uYRJUoH11VjNipMZw==", "requires": { "idb": "^6.1.4", - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "workbox-broadcast-update": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.1.tgz", - "integrity": "sha512-mb/oyblyEpDbw167cCTyHnC3RqCnCQHtFYuYZd+QTpuExxM60qZuBH1AuQCgvLtDcztBKdEYK2VFD9SZYgRbaQ==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.3.tgz", + "integrity": "sha512-4AwCIA5DiDrYhlN+Miv/fp5T3/whNmSL+KqhTwRBTZIL6pvTgE4lVuRzAt1JltmqyMcQ3SEfCdfxczuI4kwFQg==", "requires": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "workbox-build": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.1.tgz", - "integrity": "sha512-coDUDzHvFZ1ADOl3wKCsCSyOBvkPKlPgcQDb6LMMShN1zgF31Mev/1HzN3+9T2cjjWAgFwZKkuRyExqc1v21Zw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.3.tgz", + "integrity": "sha512-8JNHHS7u13nhwIYCDea9MNXBNPHXCs5KDZPKI/ZNTr3f4sMGoD7hgFGecbyjX1gw4z6e9bMpMsOEJNyH5htA/w==", "requires": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.11.1", @@ -29981,21 +37516,21 @@ "strip-comments": "^2.0.1", "tempy": "^0.6.0", "upath": "^1.2.0", - "workbox-background-sync": "6.5.1", - "workbox-broadcast-update": "6.5.1", - "workbox-cacheable-response": "6.5.1", - "workbox-core": "6.5.1", - "workbox-expiration": "6.5.1", - "workbox-google-analytics": "6.5.1", - "workbox-navigation-preload": "6.5.1", - "workbox-precaching": "6.5.1", - "workbox-range-requests": "6.5.1", - "workbox-recipes": "6.5.1", - "workbox-routing": "6.5.1", - "workbox-strategies": "6.5.1", - "workbox-streams": "6.5.1", - "workbox-sw": "6.5.1", - "workbox-window": "6.5.1" + "workbox-background-sync": "6.5.3", + "workbox-broadcast-update": "6.5.3", + "workbox-cacheable-response": "6.5.3", + "workbox-core": "6.5.3", + "workbox-expiration": "6.5.3", + "workbox-google-analytics": "6.5.3", + "workbox-navigation-preload": "6.5.3", + "workbox-precaching": "6.5.3", + "workbox-range-requests": "6.5.3", + "workbox-recipes": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3", + "workbox-streams": "6.5.3", + "workbox-sw": "6.5.3", + "workbox-window": "6.5.3" }, "dependencies": { "@apideck/better-ajv-errors": { @@ -30069,106 +37604,106 @@ } }, "workbox-cacheable-response": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.1.tgz", - "integrity": "sha512-3TdtH/luDiytmM+Cn72HCBLZXmbeRNJqZx2yaVOfUZhj0IVwZqQXhNarlGE9/k6U5Jelb+TtpH2mLVhnzfiSMg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.3.tgz", + "integrity": "sha512-6JE/Zm05hNasHzzAGKDkqqgYtZZL2H06ic2GxuRLStA4S/rHUfm2mnLFFXuHAaGR1XuuYyVCEey1M6H3PdZ7SQ==", "requires": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "workbox-core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.1.tgz", - "integrity": "sha512-qObXZ39aFJ2N8X7IUbGrJHKWguliCuU1jOXM/I4MTT84u9BiKD2rHMkIzgeRP1Ixu9+cXU4/XHJq3Cy0Qqc5hw==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.3.tgz", + "integrity": "sha512-Bb9ey5n/M9x+l3fBTlLpHt9ASTzgSGj6vxni7pY72ilB/Pb3XtN+cZ9yueboVhD5+9cNQrC9n/E1fSrqWsUz7Q==" }, "workbox-expiration": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.1.tgz", - "integrity": "sha512-iY/cTADAQATMmPkUBRmQdacqq0TJd2wMHimBQz+tRnPGHSMH+/BoLPABPnu7O7rT/g/s59CUYYRGxe3mEgoJCA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.3.tgz", + "integrity": "sha512-jzYopYR1zD04ZMdlbn/R2Ik6ixiXbi15c9iX5H8CTi6RPDz7uhvMLZPKEndZTpfgmUk8mdmT9Vx/AhbuCl5Sqw==", "requires": { "idb": "^6.1.4", - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "workbox-google-analytics": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.1.tgz", - "integrity": "sha512-qZU46/h4dbionYT6Yk6iBkUwpiEzAfnO1W7KkI+AMmY7G9/gA03dQQ7rpTw8F4vWrG7ahTUGWDFv6fERtaw1BQ==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.3.tgz", + "integrity": "sha512-3GLCHotz5umoRSb4aNQeTbILETcrTVEozSfLhHSBaegHs1PnqCmN0zbIy2TjTpph2AGXiNwDrWGF0AN+UgDNTw==", "requires": { - "workbox-background-sync": "6.5.1", - "workbox-core": "6.5.1", - "workbox-routing": "6.5.1", - "workbox-strategies": "6.5.1" + "workbox-background-sync": "6.5.3", + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" } }, "workbox-navigation-preload": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.1.tgz", - "integrity": "sha512-aKrgAbn2IMgzTowTi/ZyKdQUcES2m++9aGtpxqsX7Gn9ovCY8zcssaMEAMMwrIeveij5HiWNBrmj6MWDHi+0rg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.3.tgz", + "integrity": "sha512-bK1gDFTc5iu6lH3UQ07QVo+0ovErhRNGvJJO/1ngknT0UQ702nmOUhoN9qE5mhuQSrnK+cqu7O7xeaJ+Rd9Tmg==", "requires": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "workbox-precaching": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.1.tgz", - "integrity": "sha512-EzlPBxvmjGfE56YZzsT/vpVkpLG1XJhoplgXa5RPyVWLUL1LbwEAxhkrENElSS/R9tgiTw80IFwysidfUqLihg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.3.tgz", + "integrity": "sha512-sjNfgNLSsRX5zcc63H/ar/hCf+T19fRtTqvWh795gdpghWb5xsfEkecXEvZ8biEi1QD7X/ljtHphdaPvXDygMQ==", "requires": { - "workbox-core": "6.5.1", - "workbox-routing": "6.5.1", - "workbox-strategies": "6.5.1" + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" } }, "workbox-range-requests": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.1.tgz", - "integrity": "sha512-57Da/qRbd9v33YlHX0rlSUVFmE4THCjKqwkmfhY3tNLnSKN2L5YBS3qhWeDO0IrMNgUj+rGve2moKYXeUqQt4A==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.3.tgz", + "integrity": "sha512-pGCP80Bpn/0Q0MQsfETSfmtXsQcu3M2QCJwSFuJ6cDp8s2XmbUXkzbuQhCUzKR86ZH2Vex/VUjb2UaZBGamijA==", "requires": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "workbox-recipes": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.1.tgz", - "integrity": "sha512-DGsyKygHggcGPQpWafC/Nmbm1Ny3sB2vE9r//3UbeidXiQ+pLF14KEG1/0NNGRaY+lfOXOagq6d1H7SC8KA+rA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.3.tgz", + "integrity": "sha512-IcgiKYmbGiDvvf3PMSEtmwqxwfQ5zwI7OZPio3GWu4PfehA8jI8JHI3KZj+PCfRiUPZhjQHJ3v1HbNs+SiSkig==", "requires": { - "workbox-cacheable-response": "6.5.1", - "workbox-core": "6.5.1", - "workbox-expiration": "6.5.1", - "workbox-precaching": "6.5.1", - "workbox-routing": "6.5.1", - "workbox-strategies": "6.5.1" + "workbox-cacheable-response": "6.5.3", + "workbox-core": "6.5.3", + "workbox-expiration": "6.5.3", + "workbox-precaching": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" } }, "workbox-routing": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.1.tgz", - "integrity": "sha512-yAAncdTwanvlR8KPjubyvFKeAok8ZcIws6UKxvIAg0I+wsf7UYi93DXNuZr6RBSQrByrN6HkCyjuhmk8P63+PA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.3.tgz", + "integrity": "sha512-DFjxcuRAJjjt4T34RbMm3MCn+xnd36UT/2RfPRfa8VWJGItGJIn7tG+GwVTdHmvE54i/QmVTJepyAGWtoLPTmg==", "requires": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "workbox-strategies": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.1.tgz", - "integrity": "sha512-JNaTXPy8wXzKkr+6za7/eJX9opoZk7UgY261I2kPxl80XQD8lMjz0vo9EOcBwvD72v3ZhGJbW84ZaDwFEhFvWA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.3.tgz", + "integrity": "sha512-MgmGRrDVXs7rtSCcetZgkSZyMpRGw8HqL2aguszOc3nUmzGZsT238z/NN9ZouCxSzDu3PQ3ZSKmovAacaIhu1w==", "requires": { - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "workbox-streams": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.1.tgz", - "integrity": "sha512-7jaTWm6HRGJ/ewECnhb+UgjTT50R42E0/uNCC4eTKQwnLO/NzNGjoXTdQgFjo4zteR+L/K6AtFAiYKH3ZJbAYw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.3.tgz", + "integrity": "sha512-vN4Qi8o+b7zj1FDVNZ+PlmAcy1sBoV7SC956uhqYvZ9Sg1fViSbOpydULOssVJ4tOyKRifH/eoi6h99d+sJ33w==", "requires": { - "workbox-core": "6.5.1", - "workbox-routing": "6.5.1" + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3" } }, "workbox-sw": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.1.tgz", - "integrity": "sha512-hVrQa19yo9wzN1fQQ/h2JlkzFpkuH2qzYT2/rk7CLaWt6tLnTJVFCNHlGRRPhytZSf++LoIy7zThT714sowT/Q==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.3.tgz", + "integrity": "sha512-BQBzm092w+NqdIEF2yhl32dERt9j9MDGUTa2Eaa+o3YKL4Qqw55W9yQC6f44FdAHdAJrJvp0t+HVrfh8AiGj8A==" }, "workbox-webpack-plugin": { "version": "6.5.1", @@ -30182,11 +37717,61 @@ "workbox-build": "6.5.1" }, "dependencies": { + "@apideck/better-ajv-errors": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.3.tgz", + "integrity": "sha512-9o+HO2MbJhJHjDYZaDxJmSDckvDpiuItEsrIShV0DXeCshXWRHhqYyU/PKHMkuClOmFnZhRd6wzv4vpDu/dRKg==", + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + } + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "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==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, "webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -30195,16 +37780,208 @@ "source-list-map": "^2.0.0", "source-map": "~0.6.1" } + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "workbox-background-sync": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.1.tgz", + "integrity": "sha512-T5a35fagLXQvV8Dr4+bDU+XYsP90jJ3eBLjZMKuCNELMQZNj+VekCODz1QK44jgoBeQk+vp94pkZV6G+e41pgg==", + "requires": { + "idb": "^6.1.4", + "workbox-core": "6.5.1" + } + }, + "workbox-broadcast-update": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.1.tgz", + "integrity": "sha512-mb/oyblyEpDbw167cCTyHnC3RqCnCQHtFYuYZd+QTpuExxM60qZuBH1AuQCgvLtDcztBKdEYK2VFD9SZYgRbaQ==", + "requires": { + "workbox-core": "6.5.1" + } + }, + "workbox-build": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.1.tgz", + "integrity": "sha512-coDUDzHvFZ1ADOl3wKCsCSyOBvkPKlPgcQDb6LMMShN1zgF31Mev/1HzN3+9T2cjjWAgFwZKkuRyExqc1v21Zw==", + "requires": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.1", + "workbox-broadcast-update": "6.5.1", + "workbox-cacheable-response": "6.5.1", + "workbox-core": "6.5.1", + "workbox-expiration": "6.5.1", + "workbox-google-analytics": "6.5.1", + "workbox-navigation-preload": "6.5.1", + "workbox-precaching": "6.5.1", + "workbox-range-requests": "6.5.1", + "workbox-recipes": "6.5.1", + "workbox-routing": "6.5.1", + "workbox-strategies": "6.5.1", + "workbox-streams": "6.5.1", + "workbox-sw": "6.5.1", + "workbox-window": "6.5.1" + }, + "dependencies": { + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "requires": { + "whatwg-url": "^7.0.0" + } + } + } + }, + "workbox-cacheable-response": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.1.tgz", + "integrity": "sha512-3TdtH/luDiytmM+Cn72HCBLZXmbeRNJqZx2yaVOfUZhj0IVwZqQXhNarlGE9/k6U5Jelb+TtpH2mLVhnzfiSMg==", + "requires": { + "workbox-core": "6.5.1" + } + }, + "workbox-core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.1.tgz", + "integrity": "sha512-qObXZ39aFJ2N8X7IUbGrJHKWguliCuU1jOXM/I4MTT84u9BiKD2rHMkIzgeRP1Ixu9+cXU4/XHJq3Cy0Qqc5hw==" + }, + "workbox-expiration": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.1.tgz", + "integrity": "sha512-iY/cTADAQATMmPkUBRmQdacqq0TJd2wMHimBQz+tRnPGHSMH+/BoLPABPnu7O7rT/g/s59CUYYRGxe3mEgoJCA==", + "requires": { + "idb": "^6.1.4", + "workbox-core": "6.5.1" + } + }, + "workbox-google-analytics": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.1.tgz", + "integrity": "sha512-qZU46/h4dbionYT6Yk6iBkUwpiEzAfnO1W7KkI+AMmY7G9/gA03dQQ7rpTw8F4vWrG7ahTUGWDFv6fERtaw1BQ==", + "requires": { + "workbox-background-sync": "6.5.1", + "workbox-core": "6.5.1", + "workbox-routing": "6.5.1", + "workbox-strategies": "6.5.1" + } + }, + "workbox-navigation-preload": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.1.tgz", + "integrity": "sha512-aKrgAbn2IMgzTowTi/ZyKdQUcES2m++9aGtpxqsX7Gn9ovCY8zcssaMEAMMwrIeveij5HiWNBrmj6MWDHi+0rg==", + "requires": { + "workbox-core": "6.5.1" + } + }, + "workbox-precaching": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.1.tgz", + "integrity": "sha512-EzlPBxvmjGfE56YZzsT/vpVkpLG1XJhoplgXa5RPyVWLUL1LbwEAxhkrENElSS/R9tgiTw80IFwysidfUqLihg==", + "requires": { + "workbox-core": "6.5.1", + "workbox-routing": "6.5.1", + "workbox-strategies": "6.5.1" + } + }, + "workbox-range-requests": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.1.tgz", + "integrity": "sha512-57Da/qRbd9v33YlHX0rlSUVFmE4THCjKqwkmfhY3tNLnSKN2L5YBS3qhWeDO0IrMNgUj+rGve2moKYXeUqQt4A==", + "requires": { + "workbox-core": "6.5.1" + } + }, + "workbox-recipes": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.1.tgz", + "integrity": "sha512-DGsyKygHggcGPQpWafC/Nmbm1Ny3sB2vE9r//3UbeidXiQ+pLF14KEG1/0NNGRaY+lfOXOagq6d1H7SC8KA+rA==", + "requires": { + "workbox-cacheable-response": "6.5.1", + "workbox-core": "6.5.1", + "workbox-expiration": "6.5.1", + "workbox-precaching": "6.5.1", + "workbox-routing": "6.5.1", + "workbox-strategies": "6.5.1" + } + }, + "workbox-routing": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.1.tgz", + "integrity": "sha512-yAAncdTwanvlR8KPjubyvFKeAok8ZcIws6UKxvIAg0I+wsf7UYi93DXNuZr6RBSQrByrN6HkCyjuhmk8P63+PA==", + "requires": { + "workbox-core": "6.5.1" + } + }, + "workbox-strategies": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.1.tgz", + "integrity": "sha512-JNaTXPy8wXzKkr+6za7/eJX9opoZk7UgY261I2kPxl80XQD8lMjz0vo9EOcBwvD72v3ZhGJbW84ZaDwFEhFvWA==", + "requires": { + "workbox-core": "6.5.1" + } + }, + "workbox-streams": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.1.tgz", + "integrity": "sha512-7jaTWm6HRGJ/ewECnhb+UgjTT50R42E0/uNCC4eTKQwnLO/NzNGjoXTdQgFjo4zteR+L/K6AtFAiYKH3ZJbAYw==", + "requires": { + "workbox-core": "6.5.1", + "workbox-routing": "6.5.1" + } + }, + "workbox-sw": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.1.tgz", + "integrity": "sha512-hVrQa19yo9wzN1fQQ/h2JlkzFpkuH2qzYT2/rk7CLaWt6tLnTJVFCNHlGRRPhytZSf++LoIy7zThT714sowT/Q==" + }, + "workbox-window": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.1.tgz", + "integrity": "sha512-oRlun9u7b7YEjo2fIDBqJkU2hXtrEljXcOytRhfeQRbqXxjUOpFgXSGRSAkmDx1MlKUNOSbr+zfi8h5n7In3yA==", + "requires": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.1" + } } } }, "workbox-window": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.1.tgz", - "integrity": "sha512-oRlun9u7b7YEjo2fIDBqJkU2hXtrEljXcOytRhfeQRbqXxjUOpFgXSGRSAkmDx1MlKUNOSbr+zfi8h5n7In3yA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.3.tgz", + "integrity": "sha512-GnJbx1kcKXDtoJBVZs/P7ddP0Yt52NNy4nocjBpYPiRhMqTpJCNrSL+fGHZ/i/oP6p/vhE8II0sA6AZGKGnssw==", "requires": { "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.1" + "workbox-core": "6.5.3" } }, "wrap-ansi": { @@ -30314,8 +38091,7 @@ "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 + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" }, "yauzl": { "version": "2.10.0", diff --git a/Accounts/package.json b/Accounts/package.json index 18d91c7661..32dd930f18 100755 --- a/Accounts/package.json +++ b/Accounts/package.json @@ -9,7 +9,7 @@ "@stripe/react-stripe-js": "^1.7.2", "@stripe/stripe-js": "^1.29.0", "@types/compression": "^1.7.2", - "@types/react-dom": "^18.0.3", + "@types/react-dom": "^17.0.2", "@types/react-redux": "^7.1.24", "@types/react-router-redux": "^5.0.21", "@types/redux-form": "^8.3.5", @@ -29,9 +29,9 @@ "prop-types": "^15.8.1", "puppeteer": "^13.7.0", "query-string": "^7.1.1", - "react": "^18.1.0", + "react": "^17.0.2", "react-awesome-reveal": "^3.8.1", - "react-dom": "^18.1.0", + "react-dom": "^17.0.2", "react-frontload": "^2.0.0", "react-ga": "^3.3.0", "react-redux": "^8.0.1", diff --git a/Accounts/src/Actions/changePassword.ts b/Accounts/src/Actions/ChangePassword.ts similarity index 96% rename from Accounts/src/Actions/changePassword.ts rename to Accounts/src/Actions/ChangePassword.ts index 9ba2491e6a..b3ba7be436 100755 --- a/Accounts/src/Actions/changePassword.ts +++ b/Accounts/src/Actions/ChangePassword.ts @@ -1,4 +1,4 @@ -import BackendAPI from 'CommonUI/src/utils/api/backend'; +import BackendAPI from 'CommonUI/src/Utils/API/Backend'; import { Dispatch } from 'redux'; import Route from 'Common/Types/api/route'; import * as types from '../constants/changePassword'; diff --git a/Accounts/src/Actions/login.ts b/Accounts/src/Actions/Login.ts similarity index 100% rename from Accounts/src/Actions/login.ts rename to Accounts/src/Actions/Login.ts diff --git a/Accounts/src/Actions/register.ts b/Accounts/src/Actions/Register.ts similarity index 100% rename from Accounts/src/Actions/register.ts rename to Accounts/src/Actions/Register.ts diff --git a/Accounts/src/Actions/resendToken.ts b/Accounts/src/Actions/ResendToken.ts similarity index 100% rename from Accounts/src/Actions/resendToken.ts rename to Accounts/src/Actions/ResendToken.ts diff --git a/Accounts/src/Actions/resetPassword.ts b/Accounts/src/Actions/ResetPassword.ts similarity index 100% rename from Accounts/src/Actions/resetPassword.ts rename to Accounts/src/Actions/ResetPassword.ts diff --git a/Accounts/src/analytics.ts b/Accounts/src/Analytics.ts similarity index 100% rename from Accounts/src/analytics.ts rename to Accounts/src/Analytics.ts diff --git a/Accounts/src/Components/Basic/CompanySizeList.ts b/Accounts/src/Components/Basic/CompanySizeList.ts deleted file mode 100755 index f980b40309..0000000000 --- a/Accounts/src/Components/Basic/CompanySizeList.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const companySize: $TSFixMe = [ - { name: '1-10', code: '1-10' }, - { name: '11-50', code: '11-50' }, - { name: '51-200', code: '51-200' }, - { name: '200-1000', code: '200-1000' }, - { name: '1000+', code: '1000+' }, -]; diff --git a/Accounts/src/Components/Basic/CountryList.ts b/Accounts/src/Components/Basic/CountryList.ts deleted file mode 100755 index a2e2e6696e..0000000000 --- a/Accounts/src/Components/Basic/CountryList.ts +++ /dev/null @@ -1,245 +0,0 @@ -export const countries: $TSFixMe = [ - { name: 'Afghanistan', code: 'AF' }, - { name: 'Åland Islands', code: 'AX' }, - { name: 'Albania', code: 'AL' }, - { name: 'Algeria', code: 'DZ' }, - { name: 'American Samoa', code: 'AS' }, - { name: 'Andorra', code: 'AD' }, - { name: 'Angola', code: 'AO' }, - { name: 'Anguilla', code: 'AI' }, - { name: 'Antarctica', code: 'AQ' }, - { name: 'Antigua and Barbuda', code: 'AG' }, - { name: 'Argentina', code: 'AR' }, - { name: 'Armenia', code: 'AM' }, - { name: 'Aruba', code: 'AW' }, - { name: 'Australia', code: 'AU' }, - { name: 'Austria', code: 'AT' }, - { name: 'Azerbaijan', code: 'AZ' }, - { name: 'Bahamas', code: 'BS' }, - { name: 'Bahrain', code: 'BH' }, - { name: 'Bangladesh', code: 'BD' }, - { name: 'Barbados', code: 'BB' }, - { name: 'Belarus', code: 'BY' }, - { name: 'Belgium', code: 'BE' }, - { name: 'Belize', code: 'BZ' }, - { name: 'Benin', code: 'BJ' }, - { name: 'Bermuda', code: 'BM' }, - { name: 'Bhutan', code: 'BT' }, - { name: 'Bolivia', code: 'BO' }, - { name: 'Bosnia and Herzegovina', code: 'BA' }, - { name: 'Botswana', code: 'BW' }, - { name: 'Bouvet Island', code: 'BV' }, - { name: 'Brazil', code: 'BR' }, - { name: 'British Indian Ocean Territory', code: 'IO' }, - { name: 'Brunei Darussalam', code: 'BN' }, - { name: 'Bulgaria', code: 'BG' }, - { name: 'Burkina Faso', code: 'BF' }, - { name: 'Burundi', code: 'BI' }, - { name: 'Cambodia', code: 'KH' }, - { name: 'Cameroon', code: 'CM' }, - { name: 'Canada', code: 'CA' }, - { name: 'Cape Verde', code: 'CV' }, - { name: 'Cayman Islands', code: 'KY' }, - { name: 'Central African Republic', code: 'CF' }, - { name: 'Chad', code: 'TD' }, - { name: 'Chile', code: 'CL' }, - { name: 'China', code: 'CN' }, - { name: 'Christmas Island', code: 'CX' }, - { name: 'Cocos (Keeling) Islands', code: 'CC' }, - { name: 'Colombia', code: 'CO' }, - { name: 'Comoros', code: 'KM' }, - { name: 'Congo', code: 'CG' }, - { name: 'Congo, The Democratic Republic of the', code: 'CD' }, - { name: 'Cook Islands', code: 'CK' }, - { name: 'Costa Rica', code: 'CR' }, - { name: "Cote d'Ivoire", code: 'CI' }, - { name: 'Croatia', code: 'HR' }, - { name: 'Cuba', code: 'CU' }, - { name: 'Cyprus', code: 'CY' }, - { name: 'Czech Republic', code: 'CZ' }, - { name: 'Denmark', code: 'DK' }, - { name: 'Djibouti', code: 'DJ' }, - { name: 'Dominica', code: 'DM' }, - { name: 'Dominican Republic', code: 'DO' }, - { name: 'Ecuador', code: 'EC' }, - { name: 'Egypt', code: 'EG' }, - { name: 'El Salvador', code: 'SV' }, - { name: 'Equatorial Guinea', code: 'GQ' }, - { name: 'Eritrea', code: 'ER' }, - { name: 'Estonia', code: 'EE' }, - { name: 'Ethiopia', code: 'ET' }, - { name: 'Falkland Islands (Malvinas)', code: 'FK' }, - { name: 'Faroe Islands', code: 'FO' }, - { name: 'Fiji', code: 'FJ' }, - { name: 'Finland', code: 'FI' }, - { name: 'France', code: 'FR' }, - { name: 'French Guiana', code: 'GF' }, - { name: 'French Polynesia', code: 'PF' }, - { name: 'French Southern Territories', code: 'TF' }, - { name: 'Gabon', code: 'GA' }, - { name: 'Gambia', code: 'GM' }, - { name: 'Georgia', code: 'GE' }, - { name: 'Germany', code: 'DE' }, - { name: 'Ghana', code: 'GH' }, - { name: 'Gibraltar', code: 'GI' }, - { name: 'Greece', code: 'GR' }, - { name: 'Greenland', code: 'GL' }, - { name: 'Grenada', code: 'GD' }, - { name: 'Guadeloupe', code: 'GP' }, - { name: 'Guam', code: 'GU' }, - { name: 'Guatemala', code: 'GT' }, - { name: 'Guernsey', code: 'GG' }, - { name: 'Guinea', code: 'GN' }, - { name: 'Guinea-Bissau', code: 'GW' }, - { name: 'Guyana', code: 'GY' }, - { name: 'Haiti', code: 'HT' }, - { name: 'Heard Island and Mcdonald Islands', code: 'HM' }, - { name: 'Holy See (Vatican City State)', code: 'VA' }, - { name: 'Honduras', code: 'HN' }, - { name: 'Hong Kong', code: 'HK' }, - { name: 'Hungary', code: 'HU' }, - { name: 'Iceland', code: 'IS' }, - { name: 'India', code: 'IN' }, - { name: 'Indonesia', code: 'ID' }, - { name: 'Iran, Islamic Republic Of', code: 'IR' }, - { name: 'Iraq', code: 'IQ' }, - { name: 'Ireland', code: 'IE' }, - { name: 'Isle of Man', code: 'IM' }, - { name: 'Israel', code: 'IL' }, - { name: 'Italy', code: 'IT' }, - { name: 'Jamaica', code: 'JM' }, - { name: 'Japan', code: 'JP' }, - { name: 'Jersey', code: 'JE' }, - { name: 'Jordan', code: 'JO' }, - { name: 'Kazakhstan', code: 'KZ' }, - { name: 'Kenya', code: 'KE' }, - { name: 'Kiribati', code: 'KI' }, - { name: "Korea, Democratic People's Republic of", code: 'KP' }, - { name: 'Korea, Republic of', code: 'KR' }, - { name: 'Kuwait', code: 'KW' }, - { name: 'Kyrgyzstan', code: 'KG' }, - { name: "Lao People's Democratic Republic", code: 'LA' }, - { name: 'Latvia', code: 'LV' }, - { name: 'Lebanon', code: 'LB' }, - { name: 'Lesotho', code: 'LS' }, - { name: 'Liberia', code: 'LR' }, - { name: 'Libyan Arab Jamahiriya', code: 'LY' }, - { name: 'Liechtenstein', code: 'LI' }, - { name: 'Lithuania', code: 'LT' }, - { name: 'Luxembourg', code: 'LU' }, - { name: 'Macao', code: 'MO' }, - { name: 'Macedonia, The Former Yugoslav Republic of', code: 'MK' }, - { name: 'Madagascar', code: 'MG' }, - { name: 'Malawi', code: 'MW' }, - { name: 'Malaysia', code: 'MY' }, - { name: 'Maldives', code: 'MV' }, - { name: 'Mali', code: 'ML' }, - { name: 'Malta', code: 'MT' }, - { name: 'Marshall Islands', code: 'MH' }, - { name: 'Martinique', code: 'MQ' }, - { name: 'Mauritania', code: 'MR' }, - { name: 'Mauritius', code: 'MU' }, - { name: 'Mayotte', code: 'YT' }, - { name: 'Mexico', code: 'MX' }, - { name: 'Micronesia, Federated States of', code: 'FM' }, - { name: 'Moldova, Republic of', code: 'MD' }, - { name: 'Monaco', code: 'MC' }, - { name: 'Mongolia', code: 'MN' }, - { name: 'Montserrat', code: 'MS' }, - { name: 'Morocco', code: 'MA' }, - { name: 'Mozambique', code: 'MZ' }, - { name: 'Myanmar', code: 'MM' }, - { name: 'Namibia', code: 'NA' }, - { name: 'Nauru', code: 'NR' }, - { name: 'Nepal', code: 'NP' }, - { name: 'Netherlands', code: 'NL' }, - { name: 'Netherlands Antilles', code: 'AN' }, - { name: 'New Caledonia', code: 'NC' }, - { name: 'New Zealand', code: 'NZ' }, - { name: 'Nicaragua', code: 'NI' }, - { name: 'Niger', code: 'NE' }, - { name: 'Nigeria', code: 'NG' }, - { name: 'Niue', code: 'NU' }, - { name: 'Norfolk Island', code: 'NF' }, - { name: 'Northern Mariana Islands', code: 'MP' }, - { name: 'Norway', code: 'NO' }, - { name: 'Oman', code: 'OM' }, - { name: 'Pakistan', code: 'PK' }, - { name: 'Palau', code: 'PW' }, - { name: 'Palestinian Territory, Occupied', code: 'PS' }, - { name: 'Panama', code: 'PA' }, - { name: 'Papua New Guinea', code: 'PG' }, - { name: 'Paraguay', code: 'PY' }, - { name: 'Peru', code: 'PE' }, - { name: 'Philippines', code: 'PH' }, - { name: 'Pitcairn', code: 'PN' }, - { name: 'Poland', code: 'PL' }, - { name: 'Portugal', code: 'PT' }, - { name: 'Puerto Rico', code: 'PR' }, - { name: 'Qatar', code: 'QA' }, - { name: 'Reunion', code: 'RE' }, - { name: 'Romania', code: 'RO' }, - { name: 'Russian Federation', code: 'RU' }, - { name: 'RWANDA', code: 'RW' }, - { name: 'Saint Helena', code: 'SH' }, - { name: 'Saint Kitts and Nevis', code: 'KN' }, - { name: 'Saint Lucia', code: 'LC' }, - { name: 'Saint Pierre and Miquelon', code: 'PM' }, - { name: 'Saint Vincent and the Grenadines', code: 'VC' }, - { name: 'Samoa', code: 'WS' }, - { name: 'San Marino', code: 'SM' }, - { name: 'Sao Tome and Principe', code: 'ST' }, - { name: 'Saudi Arabia', code: 'SA' }, - { name: 'Senegal', code: 'SN' }, - { name: 'Serbia and Montenegro', code: 'CS' }, - { name: 'Seychelles', code: 'SC' }, - { name: 'Sierra Leone', code: 'SL' }, - { name: 'Singapore', code: 'SG' }, - { name: 'Slovakia', code: 'SK' }, - { name: 'Slovenia', code: 'SI' }, - { name: 'Solomon Islands', code: 'SB' }, - { name: 'Somalia', code: 'SO' }, - { name: 'South Africa', code: 'ZA' }, - { name: 'South Georgia and the South Sandwich Islands', code: 'GS' }, - { name: 'Spain', code: 'ES' }, - { name: 'Sri Lanka', code: 'LK' }, - { name: 'Sudan', code: 'SD' }, - { name: 'Suriname', code: 'SR' }, - { name: 'Svalbard and Jan Mayen', code: 'SJ' }, - { name: 'Swaziland', code: 'SZ' }, - { name: 'Sweden', code: 'SE' }, - { name: 'Switzerland', code: 'CH' }, - { name: 'Syrian Arab Republic', code: 'SY' }, - { name: 'Taiwan, Province of China', code: 'TW' }, - { name: 'Tajikistan', code: 'TJ' }, - { name: 'Tanzania, United Republic of', code: 'TZ' }, - { name: 'Thailand', code: 'TH' }, - { name: 'Timor-Leste', code: 'TL' }, - { name: 'Togo', code: 'TG' }, - { name: 'Tokelau', code: 'TK' }, - { name: 'Tonga', code: 'TO' }, - { name: 'Trinidad and Tobago', code: 'TT' }, - { name: 'Tunisia', code: 'TN' }, - { name: 'Turkey', code: 'TR' }, - { name: 'Turkmenistan', code: 'TM' }, - { name: 'Turks and Caicos Islands', code: 'TC' }, - { name: 'Tuvalu', code: 'TV' }, - { name: 'Uganda', code: 'UG' }, - { name: 'Ukraine', code: 'UA' }, - { name: 'United Arab Emirates', code: 'AE' }, - { name: 'United Kingdom', code: 'GB' }, - { name: 'United States', code: 'US' }, - { name: 'United States Minor Outlying Islands', code: 'UM' }, - { name: 'Uruguay', code: 'UY' }, - { name: 'Uzbekistan', code: 'UZ' }, - { name: 'Vanuatu', code: 'VU' }, - { name: 'Venezuela', code: 'VE' }, - { name: 'Viet Nam', code: 'VN' }, - { name: 'Virgin Islands, British', code: 'VG' }, - { name: 'Virgin Islands, U.S.', code: 'VI' }, - { name: 'Wallis and Futuna', code: 'WF' }, - { name: 'Western Sahara', code: 'EH' }, - { name: 'Yemen', code: 'YE' }, - { name: 'Zambia', code: 'ZM' }, - { name: 'Zimbabwe', code: 'ZW' }, -]; diff --git a/Accounts/src/config.tsx b/Accounts/src/Config.tsx similarity index 100% rename from Accounts/src/config.tsx rename to Accounts/src/Config.tsx diff --git a/Accounts/src/Constants/changePassword.ts b/Accounts/src/Constants/ChangePassword.ts similarity index 100% rename from Accounts/src/Constants/changePassword.ts rename to Accounts/src/Constants/ChangePassword.ts diff --git a/Accounts/src/Constants/emaildomains.ts b/Accounts/src/Constants/Emaildomains.ts similarity index 100% rename from Accounts/src/Constants/emaildomains.ts rename to Accounts/src/Constants/Emaildomains.ts diff --git a/Accounts/src/Constants/login.ts b/Accounts/src/Constants/Login.ts similarity index 100% rename from Accounts/src/Constants/login.ts rename to Accounts/src/Constants/Login.ts diff --git a/Accounts/src/Constants/register.ts b/Accounts/src/Constants/Register.ts similarity index 100% rename from Accounts/src/Constants/register.ts rename to Accounts/src/Constants/Register.ts diff --git a/Accounts/src/Constants/resendToken.ts b/Accounts/src/Constants/ResendToken.ts similarity index 100% rename from Accounts/src/Constants/resendToken.ts rename to Accounts/src/Constants/ResendToken.ts diff --git a/Accounts/src/Constants/resetPassword.ts b/Accounts/src/Constants/ResetPassword.ts similarity index 100% rename from Accounts/src/Constants/resetPassword.ts rename to Accounts/src/Constants/ResetPassword.ts diff --git a/Accounts/src/errors.ts b/Accounts/src/Errors.ts similarity index 100% rename from Accounts/src/errors.ts rename to Accounts/src/Errors.ts diff --git a/Accounts/src/index.tsx b/Accounts/src/Index.tsx similarity index 99% rename from Accounts/src/index.tsx rename to Accounts/src/Index.tsx index ce707ba60a..ed2966d5c7 100755 --- a/Accounts/src/index.tsx +++ b/Accounts/src/Index.tsx @@ -11,6 +11,7 @@ import './index.css'; if (!isApiServer) { ReactGA.initialize('UA-115085157-1'); } + const target: $TSFixMe = document.getElementById('root'); render( diff --git a/Accounts/src/Pages/index.ts b/Accounts/src/Pages/Index.ts similarity index 100% rename from Accounts/src/Pages/index.ts rename to Accounts/src/Pages/Index.ts diff --git a/Accounts/src/Reducers/ChangePassword.ts b/Accounts/src/Reducers/ChangePassword.ts new file mode 100755 index 0000000000..1cf39ab540 --- /dev/null +++ b/Accounts/src/Reducers/ChangePassword.ts @@ -0,0 +1,7 @@ +import ApiBase from 'CommonUI/src/Reducers/ApiBase'; + +export default class ChangePassword extends ApiBase { + public constructor() { + super('ChangePassword'); + } +} diff --git a/Accounts/src/Reducers/Index.ts b/Accounts/src/Reducers/Index.ts new file mode 100755 index 0000000000..20479196d0 --- /dev/null +++ b/Accounts/src/Reducers/Index.ts @@ -0,0 +1,25 @@ +import { combineReducers } from 'redux'; +import Action from 'CommonUI/src/Types/Action'; +import { routerReducer } from 'react-router-redux'; +import Login from './Login'; +import Register from './Register'; +import { RootState } from '../store'; +import Modal from 'CommonUI/src/Reducers/Modal'; +import ResetPassword from './ResetPassword'; +import ChangePassword from './ChangePassword'; +import ResendToken from './ResendVerifyEmail'; + +export default (state: RootState, action: Action): void => { + if (action.type === 'CLEAR_STORE') { + state = undefined; + } + return combineReducers({ + Routing: routerReducer, + Modal: Modal, + Login: new Login().getReducer(), + Register: new Register().getReducer(), + ResetPassword: new ResetPassword().getReducer(), + ChangePassword: new ChangePassword().getReducer(), + ResendToken: new ResendToken().getReducer(), + })(state, action); +}; diff --git a/Accounts/src/Reducers/Login.ts b/Accounts/src/Reducers/Login.ts new file mode 100755 index 0000000000..ffa973b56a --- /dev/null +++ b/Accounts/src/Reducers/Login.ts @@ -0,0 +1,7 @@ +import ApiBase from 'CommonUI/src/Reducers/ApiBase'; + +export default class ChangePassword extends ApiBase { + public constructor() { + super('Login'); + } +} diff --git a/Accounts/src/Reducers/Register.ts b/Accounts/src/Reducers/Register.ts new file mode 100755 index 0000000000..e000f8367e --- /dev/null +++ b/Accounts/src/Reducers/Register.ts @@ -0,0 +1,7 @@ +import ApiBase from 'CommonUI/src/Reducers/ApiBase'; + +export default class ChangePassword extends ApiBase { + public constructor() { + super('Register'); + } +} diff --git a/Accounts/src/Reducers/ResendVerifyEmail.ts b/Accounts/src/Reducers/ResendVerifyEmail.ts new file mode 100755 index 0000000000..d39a7493bf --- /dev/null +++ b/Accounts/src/Reducers/ResendVerifyEmail.ts @@ -0,0 +1,7 @@ +import ApiBase from 'CommonUI/src/Reducers/ApiBase'; + +export default class ResendVerifyEmail extends ApiBase { + public constructor() { + super('ResendVerifyEmail'); + } +} diff --git a/Accounts/src/Reducers/ResetPassword.ts b/Accounts/src/Reducers/ResetPassword.ts new file mode 100755 index 0000000000..80c472f925 --- /dev/null +++ b/Accounts/src/Reducers/ResetPassword.ts @@ -0,0 +1,7 @@ +import ApiBase from 'CommonUI/src/Reducers/ApiBase'; + +export default class ResetPassword extends ApiBase { + public constructor() { + super('ResetPassword'); + } +} diff --git a/Accounts/src/Reducers/changePassword.ts b/Accounts/src/Reducers/changePassword.ts deleted file mode 100755 index 8dcc5ecefb..0000000000 --- a/Accounts/src/Reducers/changePassword.ts +++ /dev/null @@ -1,48 +0,0 @@ -import * as types from '../constants/changePassword'; - -/* - * The auth reducer. The starting state sets authentication - * Based on a token being in local storage. In a real app, - * We would also want a util to check if the token is expired. - */ - -import Action from 'CommonUI/src/Types/Action'; - -const initialState: $TSFixMe = { - requesting: false, - error: null, - success: false, -}; - -export default function register( - state: $TSFixMe = initialState, - action: Action -): void { - switch (action.type) { - case types.CHANGEPASSWORD_REQUEST: - return Object.assign({}, state, { - requesting: true, - error: null, - }); - - case types.CHANGEPASSWORD_SUCCESS: - return Object.assign({}, state, { - requesting: false, - success: true, - error: null, - }); - - case types.CHANGEPASSWORD_FAILED: - return Object.assign({}, state, { - requesting: false, - success: false, - error: action.payload, - }); - - case types.RESET_CHANGEPASSWORD: - return Object.assign({}, state, initialState); - - default: - return state; - } -} diff --git a/Accounts/src/Reducers/index.ts b/Accounts/src/Reducers/index.ts deleted file mode 100755 index 097472b347..0000000000 --- a/Accounts/src/Reducers/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { combineReducers } from 'redux'; -import Action from 'CommonUI/src/Types/Action'; -import { routerReducer } from 'react-router-redux'; -import login from './login'; -import register from './register'; -import { RootState } from '../store'; -import { reducer as formReducer } from 'redux-form'; -import modal from 'CommonUI/src/reducers/Modal'; -import resetPassword from './resetPassword'; -import changePassword from './changePassword'; -import resendToken from './resendToken'; - -const appReducer: $TSFixMe = combineReducers({ - routing: routerReducer, - login, - register, - form: formReducer, - modal, - resetPassword, - changePassword, - resendToken, -}); - -export default (state: RootState, action: Action): void => { - if (action.type === 'CLEAR_STORE') { - state = undefined; - } - return appReducer(state, action); -}; diff --git a/Accounts/src/Reducers/login.ts b/Accounts/src/Reducers/login.ts deleted file mode 100755 index 2375b65bdb..0000000000 --- a/Accounts/src/Reducers/login.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { - LOGIN_REQUEST, - LOGIN_SUCCESS, - LOGIN_FAILED, - RESET_LOGIN, - SAVE_STATUS_PAGE, - CHANGE_LOGIN, - AUTH_VERIFICATION_FAILED, - AUTH_VERIFICATION_REQUEST, - AUTH_VERIFICATION_SUCCESS, - RESET_AUTH_VERIFICATION, - BACKUP_CODE_VERIFICATION_FAILED, - BACKUP_CODE_VERIFICATION_REQUEST, - BACKUP_CODE_VERIFICATION_SUCCESS, - RESET_BACKUP_CODE_VERIFICATION, - MASTER_ADMIN_EXISTS_REQUEST, - MASTER_ADMIN_EXISTS_FAILED, - MASTER_ADMIN_EXISTS_SUCCESS, - RESET_MASTER_ADMIN_EXISTS, - LOGIN_STATE, -} from '../constants/login'; - -/* - * The auth reducer. The starting state sets authentication - * Based on a token being in local storage. In a real app, - * We would also want a util to check if the token is expired. - */ - -import Action from 'CommonUI/src/Types/Action'; - -const initialState: $TSFixMe = { - requesting: false, - user: {}, - error: null, - success: false, - statusPageLogin: false, - statusPageURL: null, - authToken: { - requesting: false, - error: null, - success: false, - }, - backupCode: { - requesting: false, - error: null, - success: false, - }, - masterAdmin: { - exists: null, - requesting: false, - error: null, - success: false, - }, - loginMethod: 'standard', -}; - -export default function register( - state: $TSFixMe = initialState, - action: Action -): void { - switch (action.type) { - case CHANGE_LOGIN: - return Object.assign({}, state, { - loginMethod: action.payload, - }); - case LOGIN_REQUEST: - return Object.assign({}, state, { - requesting: true, - error: null, - }); - case LOGIN_SUCCESS: - return Object.assign({}, state, { - requesting: false, - success: true, - error: null, - user: action.payload, - }); - case LOGIN_FAILED: - return Object.assign({}, state, { - requesting: false, - success: false, - error: action.payload, - }); - case LOGIN_STATE: - return Object.assign({}, state, { - requesting: false, - success: false, - error: state.error, - user: action.payload, - }); - case RESET_LOGIN: - return Object.assign({}, state, initialState); - - case MASTER_ADMIN_EXISTS_REQUEST: - return Object.assign({}, state, { - masterAdmin: { - ...state.masterAdmin, - requesting: true, - error: null, - }, - }); - - case MASTER_ADMIN_EXISTS_SUCCESS: - return Object.assign({}, state, { - masterAdmin: { - requesting: false, - success: true, - error: null, - exists: action.payload.result, - }, - }); - - case MASTER_ADMIN_EXISTS_FAILED: - return Object.assign({}, state, { - masterAdmin: { - ...state.masterAdmin, - requesting: false, - success: false, - error: action.payload, - }, - }); - - case RESET_MASTER_ADMIN_EXISTS: - return Object.assign({}, state, { - masterAdmin: initialState.masterAdmin, - }); - - case AUTH_VERIFICATION_REQUEST: - return Object.assign({}, state, { - ...initialState, - authToken: { - ...initialState.authToken, - requesting: true, - error: null, - success: true, - }, - user: { ...state.user }, - }); - case AUTH_VERIFICATION_SUCCESS: - return Object.assign({}, state, { - ...initialState, - authToken: { - ...initialState.authToken, - requesting: false, - error: null, - success: true, - }, - }); - case AUTH_VERIFICATION_FAILED: - return Object.assign({}, state, { - ...initialState, - authToken: { - ...initialState.authToken, - requesting: false, - error: action.payload, - success: false, - }, - user: { ...state.user }, - }); - - case RESET_AUTH_VERIFICATION: - return Object.assign({}, state, initialState); - - // Use back up code to login a user - - case BACKUP_CODE_VERIFICATION_REQUEST: - return Object.assign({}, state, { - ...initialState, - backupCode: { - ...initialState.backupCode, - requesting: true, - error: null, - success: true, - }, - user: { ...state.user }, - }); - case BACKUP_CODE_VERIFICATION_SUCCESS: - return Object.assign({}, state, { - ...initialState, - backupCode: { - ...initialState.backupCode, - requesting: false, - error: null, - success: true, - }, - }); - case BACKUP_CODE_VERIFICATION_FAILED: - return Object.assign({}, state, { - ...initialState, - backupCode: { - ...initialState.backupCode, - requesting: false, - error: action.payload, - success: false, - }, - user: { ...state.user }, - }); - - case RESET_BACKUP_CODE_VERIFICATION: - return Object.assign({}, state, initialState); - - case SAVE_STATUS_PAGE: - return Object.assign({}, state, { - statusPageLogin: action.payload.isStatusPageLogin, - statusPageURL: action.payload.statusPageURL, - }); - - default: - return state; - } -} diff --git a/Accounts/src/Reducers/register.ts b/Accounts/src/Reducers/register.ts deleted file mode 100755 index e8438820e0..0000000000 --- a/Accounts/src/Reducers/register.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { - SIGNUP_SUCCESS, - SIGNUP_FAILED, - SIGNUP_STEP_INC, - SIGNUP_STEP_DEC, - SIGNUP_REQUEST, - RESET_SIGNUP, - SAVE_CARD_STATE, - SAVE_USER_STATE, - SAVE_COMPANY_STATE, - IS_USER_INVITED_FAILED, - IS_USER_INVITED_REQUEST, - IS_USER_INVITED_RESET, - IS_USER_INVITED_SUCCESS, - SKIP_CARD_STEP, - ADD_CARD_REQUEST, - ADD_CARD_SUCCESS, - ADD_CARD_FAILED, - SAVE_PLAN_ID, - GET_EMAIL_FROM_TOKEN, -} from '../constants/register.js'; - -// The register state reducer. -import Action from 'CommonUI/src/Types/Action'; - -const initialState: $TSFixMe = { - addCard: { - requesting: false, - error: null, - success: false, - card: {}, - }, - requesting: false, - step: 1, - user: {}, - card: {}, - company: {}, - error: null, - success: false, - planId: null, - isUserInvited: { - requesting: false, - isUserInvited: null, - error: null, - success: false, - }, - email: null, -}; - -export default function register( - state: $TSFixMe = initialState, - action: Action -): void { - let incCount: $TSFixMe, decCount: $TSFixMe, stage: $TSFixMe; - switch (action.type) { - case SIGNUP_REQUEST: - return Object.assign({}, state, { - requesting: true, - error: null, - }); - case SIGNUP_SUCCESS: - state.user.cardRegistered = action.payload.cardRegistered; - return Object.assign({}, state, { - requesting: false, - success: true, - error: null, - user: { ...state.user }, - }); - case SIGNUP_FAILED: - return Object.assign({}, state, { - requesting: false, - isAuthenticated: false, - error: action.payload, - isUserInvited: { - ...state.isUserInvited, - requesting: false, - }, - }); - - case SIGNUP_STEP_INC: - incCount = state.step + 1; - - return Object.assign({}, state, { - step: incCount, - error: null, - }); - - case SKIP_CARD_STEP: - stage = 3; - - return Object.assign({}, state, { - step: stage, - error: null, - }); - - case SIGNUP_STEP_DEC: - decCount = state.step - 1; - - return Object.assign({}, state, { - step: decCount, - error: null, - }); - case SAVE_USER_STATE: - return Object.assign({}, state, { - user: action.payload, - }); - case SAVE_CARD_STATE: - return Object.assign({}, state, { - card: action.payload, - }); - case SAVE_COMPANY_STATE: - return Object.assign({}, state, { - company: action.payload, - }); - - case RESET_SIGNUP: - return Object.assign({}, state, initialState); - - case IS_USER_INVITED_FAILED: - return Object.assign({}, state, { - isUserInvited: { - requesting: false, - isUserInvited: null, - error: action.payload, - success: false, - }, - }); - case IS_USER_INVITED_REQUEST: - return Object.assign({}, state, { - isUserInvited: { - requesting: true, - isUserInvited: null, - error: null, - success: false, - }, - }); - - case IS_USER_INVITED_SUCCESS: - return Object.assign({}, state, { - ...state, - isUserInvited: { - requesting: false, - isUserInvited: action.payload, - error: null, - success: false, - }, - }); - - case IS_USER_INVITED_RESET: - return Object.assign({}, state, { - ...state, - isUserInvited: { - requesting: false, - isUserInvited: null, - error: null, - success: false, - }, - }); - case ADD_CARD_REQUEST: - return Object.assign({}, state, { - ...state, - addCard: { - ...state.addCard, - requesting: true, - }, - }); - - case ADD_CARD_SUCCESS: - return Object.assign({}, state, { - ...state, - addCard: { - requesting: false, - error: null, - success: true, - card: action.payload, - }, - }); - - case ADD_CARD_FAILED: - return Object.assign({}, state, { - ...state, - addCard: { - requesting: false, - success: false, - error: action.payload, - }, - }); - case SAVE_PLAN_ID: - return Object.assign({}, state, { - planId: action.payload, - }); - - case GET_EMAIL_FROM_TOKEN: - return Object.assign({}, state, { - ...state, - email: - action.payload && action.payload.token - ? { email: action.payload.token.userId.email } - : null, - }); - - default: - return state; - } -} diff --git a/Accounts/src/Reducers/resendToken.ts b/Accounts/src/Reducers/resendToken.ts deleted file mode 100755 index 9af8768ef5..0000000000 --- a/Accounts/src/Reducers/resendToken.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - RESENDTOKEN_FAILED, - RESENDTOKEN_REQUEST, - RESENDTOKEN_SUCCESS, - RESENDTOKEN_RESET, -} from '../constants/resendToken'; - -import Action from 'CommonUI/src/Types/Action'; - -const initialState: $TSFixMe = { - requesting: false, - error: null, - success: false, -}; - -export default function register( - state: $TSFixMe = initialState, - action: Action -): void { - switch (action.type) { - case RESENDTOKEN_REQUEST: - return Object.assign({}, state, { - ...state, - requesting: true, - }); - case RESENDTOKEN_SUCCESS: - return Object.assign({}, state, { - requesting: false, - success: true, - error: null, - }); - case RESENDTOKEN_FAILED: - return Object.assign({}, state, { - requesting: false, - success: false, - error: action.payload, - }); - case RESENDTOKEN_RESET: - return Object.assign({}, state, { - requesting: false, - success: false, - error: null, - }); - default: - return state; - } -} diff --git a/Accounts/src/Reducers/resetPassword.ts b/Accounts/src/Reducers/resetPassword.ts deleted file mode 100755 index 45f990e7b4..0000000000 --- a/Accounts/src/Reducers/resetPassword.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - PASSWORDRESET_REQUEST, - PASSWORDRESET_SUCCESS, - PASSWORDRESET_FAILED, - RESET_PASSWORDRESET, -} from '../constants/resetPassword'; - -/* - * The auth reducer. The starting state sets authentication - * Based on a token being in local storage. In a real app, - * We would also want a util to check if the token is expired. - */ - -import Action from 'CommonUI/src/Types/Action'; - -const initialState: $TSFixMe = { - requesting: false, - error: null, - success: false, -}; - -export default function register( - state: $TSFixMe = initialState, - action: Action -): void { - switch (action.type) { - case PASSWORDRESET_REQUEST: - return Object.assign({}, state, { - requesting: true, - error: null, - }); - case PASSWORDRESET_SUCCESS: - return Object.assign({}, state, { - requesting: false, - success: true, - error: null, - }); - case PASSWORDRESET_FAILED: - return Object.assign({}, state, { - requesting: false, - success: false, - error: action.payload, - }); - - case RESET_PASSWORDRESET: - return Object.assign({}, state, initialState); - - default: - return state; - } -} diff --git a/Accounts/src/routes.ts b/Accounts/src/Routes.ts similarity index 100% rename from Accounts/src/routes.ts rename to Accounts/src/Routes.ts diff --git a/Accounts/src/store.ts b/Accounts/src/Store.ts similarity index 100% rename from Accounts/src/store.ts rename to Accounts/src/Store.ts diff --git a/AdminDashboard/package.json b/AdminDashboard/package.json index 41b9279d43..2410a24835 100644 --- a/AdminDashboard/package.json +++ b/AdminDashboard/package.json @@ -1,5 +1,5 @@ { - "name": "oneuptime-AdminDashboard", + "name": "admin-dashboard", "version": "3.0.0", "private": false, "type": "module", diff --git a/ApiDocs/package.json b/ApiDocs/package.json index 4d228cbdcb..ac5cd07cb8 100755 --- a/ApiDocs/package.json +++ b/ApiDocs/package.json @@ -1,5 +1,5 @@ { - "name": "oneuptime-ApiDocs", + "name": "api-docs", "version": "3.0.0", "description": "oneuptime api refernce", "main": "Gruntfile.js", diff --git a/Common/Models/BaseModel.ts b/Common/Models/BaseModel.ts index e44c35a993..6689a91d56 100644 --- a/Common/Models/BaseModel.ts +++ b/Common/Models/BaseModel.ts @@ -7,22 +7,115 @@ import { BaseEntity, } from 'typeorm'; import Columns from '../Types/Database/Columns'; +import TableColumn from '../Types/Database/TableColumn'; +import BadRequestException from '../Types/Exception/BadRequestException'; +import { JSONArray, JSONObject } from '../Types/JSON'; import ObjectID from '../Types/ObjectID'; export default class BaseModel extends BaseEntity { + @TableColumn() + @PrimaryGeneratedColumn('uuid') + public _id!: string; + + @TableColumn() + @CreateDateColumn() + public createdAt!: Date; + + @TableColumn() + @UpdateDateColumn() + public updatedAt!: Date; + + @TableColumn() + @DeleteDateColumn() + public deletedAt?: Date; + + @TableColumn() + @VersionColumn() + public version!: number; + private encryptedColumns: Columns = new Columns([]); private uniqueColumns: Columns = new Columns([]); private requiredColumns: Columns = new Columns([]); + private hashedColumns: Columns = new Columns([]); + private tableColumns: Columns = new Columns([]); - private ownerAccessibleColumns: Columns = new Columns([]); - private adminAccessibleColumns: Columns = new Columns([]); - private memberAccessibleColumns: Columns = new Columns([]); - private viewerAccessibleColumns: Columns = new Columns([]); - private publicAccessibleColumns: Columns = new Columns([]); + private ownerReadableAsItemColumns: Columns = new Columns([]); + private userReadableAsItemColumns: Columns = new Columns([]); + private adminReadableAsItemColumns: Columns = new Columns([]); + private memberReadableAsItemColumns: Columns = new Columns([]); + private viewerReadableAsItemColumns: Columns = new Columns([]); + private publicReadableAsItemColumns: Columns = new Columns([]); + + private ownerReadableAsListColumns: Columns = new Columns([]); + private userReadableAsListColumns: Columns = new Columns([]); + private adminReadableAsListColumns: Columns = new Columns([]); + private memberReadableAsListColumns: Columns = new Columns([]); + private viewerReadableAsListColumns: Columns = new Columns([]); + private publicReadableAsListColumns: Columns = new Columns([]); + + private ownerUpdateableColumns: Columns = new Columns([]); + private userUpdateableColumns: Columns = new Columns([]); + private adminUpdateableColumns: Columns = new Columns([]); + private memberUpdateableColumns: Columns = new Columns([]); + private viewerUpdateableColumns: Columns = new Columns([]); + private publicUpdateableColumns: Columns = new Columns([]); + + private ownerCreateableColumns: Columns = new Columns([]); + private userCreateableColumns: Columns = new Columns([]); + private adminCreateableColumns: Columns = new Columns([]); + private memberCreateableColumns: Columns = new Columns([]); + private viewerCreateableColumns: Columns = new Columns([]); + private publicCreateableColumns: Columns = new Columns([]); + + private ownerDeleteableColumns: Columns = new Columns([]); + private userDeleteableColumns: Columns = new Columns([]); + private adminDeleteableColumns: Columns = new Columns([]); + private memberDeleteableColumns: Columns = new Columns([]); + private viewerDeleteableColumns: Columns = new Columns([]); + private publicDeleteableColumns: Columns = new Columns([]); + + private canAdminCreateRecord = false; + private canAdminDeleteRecord = false; + private canAdminUpdateRecord = false; + private canAdminReadItemRecord = false; + private canAdminReadListRecord = false; + + private canPublicCreateRecord = false; + private canPublicDeleteRecord = false; + private canPublicUpdateRecord = false; + private canPublicReadItemRecord = false; + private canPublicReadListRecord = false; + + private canOwnerCreateRecord = false; + private canOwnerDeleteRecord = false; + private canOwnerUpdateRecord = false; + private canOwnerReadItemRecord = false; + private canOwnerReadListRecord = false; + + private canMemberCreateRecord = false; + private canMemberDeleteRecord = false; + private canMemberUpdateRecord = false; + private canMemberReadItemRecord = false; + private canMemberReadListRecord = false; + + private canViewerCreateRecord = false; + private canViewerDeleteRecord = false; + private canViewerUpdateRecord = false; + private canViewerReadItemRecord = false; + private canViewerReadListRecord = false; + + private canUserCreateRecord = false; + private canUserDeleteRecord = false; + private canUserUpdateRecord = false; + private canUserReadItemRecord = false; + private canUserReadListRecord = false; private slugifyColumn!: string | null; private saveSlugToColumn!: string | null; + // If this resource is by projectId, which column does projectId belong to? + private projectIdColumn!: string | null; + public constructor(id?: ObjectID) { super(); if (id) { @@ -30,6 +123,17 @@ export default class BaseModel extends BaseEntity { } } + public getHashedColumns(): Columns { + return this.hashedColumns; + } + + public addHashedColumn(columnName: string): void { + if (!this.hashedColumns) { + this.hashedColumns = new Columns([]); + } + this.hashedColumns.addColumn(columnName); + } + public getEncryptedColumns(): Columns { return this.encryptedColumns; } @@ -41,63 +145,349 @@ export default class BaseModel extends BaseEntity { this.encryptedColumns.addColumn(columnName); } + public getTableColumns(): Columns { + return this.tableColumns; + } + + public addTableColumn(columnName: string): void { + if (!this.tableColumns) { + this.tableColumns = new Columns([]); + } + this.tableColumns.addColumn(columnName); + } + public getUniqueColumns(): Columns { return this.uniqueColumns; } - public getOwnerAccessibleColumns(): Columns { - return this.ownerAccessibleColumns; + public getUserCreateableColumns(): Columns { + return this.userCreateableColumns; } - public addOwnerAccessibleColumn(columnName: string): void { - if (!this.ownerAccessibleColumns) { - this.ownerAccessibleColumns = new Columns([]); + public addUserCreateableColumn(columnName: string): void { + if (!this.userCreateableColumns) { + this.userCreateableColumns = new Columns([]); } - this.ownerAccessibleColumns.addColumn(columnName); + this.userCreateableColumns.addColumn(columnName); } - public getPublicAccessibleColumns(): Columns { - return this.publicAccessibleColumns; + public getUserDeleteableColumns(): Columns { + return this.userDeleteableColumns; } - public addPublicAccessibleColumn(columnName: string): void { - if (!this.publicAccessibleColumns) { - this.publicAccessibleColumns = new Columns([]); + public addUserDeleteableColumn(columnName: string): void { + if (!this.userDeleteableColumns) { + this.userDeleteableColumns = new Columns([]); } - this.publicAccessibleColumns.addColumn(columnName); + this.userDeleteableColumns.addColumn(columnName); } - public addAdminAccessibleColumn(columnName: string): void { - if (!this.adminAccessibleColumns) { - this.adminAccessibleColumns = new Columns([]); + public getUserUpdateableColumns(): Columns { + return this.userUpdateableColumns; + } + + public addUserUpdateableColumn(columnName: string): void { + if (!this.userUpdateableColumns) { + this.userUpdateableColumns = new Columns([]); } - this.adminAccessibleColumns.addColumn(columnName); + this.userUpdateableColumns.addColumn(columnName); } - public getAdminAccessibleColumns(): Columns { - return this.adminAccessibleColumns; + public getOwnerCreateableColumns(): Columns { + return this.ownerCreateableColumns; } - public addMemberAccessibleColumn(columnName: string): void { - if (!this.memberAccessibleColumns) { - this.memberAccessibleColumns = new Columns([]); + public getOwnerDeleteableColumns(): Columns { + return this.ownerDeleteableColumns; + } + + public getOwnerReadableAsItemColumns(): Columns { + return this.ownerReadableAsItemColumns; + } + + public addOwnerReadableAsItemColumn(columnName: string): void { + if (!this.ownerReadableAsItemColumns) { + this.ownerReadableAsItemColumns = new Columns([]); } - this.memberAccessibleColumns.addColumn(columnName); + this.ownerReadableAsItemColumns.addColumn(columnName); } - public getMemberAccessibleColumns(): Columns { - return this.memberAccessibleColumns; + public getUserReadableAsItemColumns(): Columns { + return this.userReadableAsItemColumns; } - public addViewerAccessibleColumn(columnName: string): void { - if (!this.viewerAccessibleColumns) { - this.viewerAccessibleColumns = new Columns([]); + public addUserReadableAsItemColumn(columnName: string): void { + if (!this.userReadableAsItemColumns) { + this.userReadableAsItemColumns = new Columns([]); } - this.viewerAccessibleColumns.addColumn(columnName); + this.userReadableAsItemColumns.addColumn(columnName); } - public getViewerAccessibleColumns(): Columns { - return this.viewerAccessibleColumns; + public getPublicReadableAsItemColumns(): Columns { + return this.publicReadableAsItemColumns; + } + + public addPublicReadableAsItemColumn(columnName: string): void { + if (!this.publicReadableAsItemColumns) { + this.publicReadableAsItemColumns = new Columns([]); + } + this.publicReadableAsItemColumns.addColumn(columnName); + } + + public addAdminReadableAsItemColumn(columnName: string): void { + if (!this.adminReadableAsItemColumns) { + this.adminReadableAsItemColumns = new Columns([]); + } + this.adminReadableAsItemColumns.addColumn(columnName); + } + + public getAdminReadableAsItemColumns(): Columns { + return this.adminReadableAsItemColumns; + } + + public addMemberReadableAsItemColumn(columnName: string): void { + if (!this.memberReadableAsItemColumns) { + this.memberReadableAsItemColumns = new Columns([]); + } + this.memberReadableAsItemColumns.addColumn(columnName); + } + + public getMemberReadableAsItemColumns(): Columns { + return this.memberReadableAsItemColumns; + } + + public addViewerReadableAsItemColumn(columnName: string): void { + if (!this.viewerReadableAsItemColumns) { + this.viewerReadableAsItemColumns = new Columns([]); + } + this.viewerReadableAsItemColumns.addColumn(columnName); + } + + public getViewerReadableAsItemColumns(): Columns { + return this.viewerReadableAsItemColumns; + } + + public getOwnerReadableAsListColumns(): Columns { + return this.ownerReadableAsListColumns; + } + + public addOwnerReadableAsListColumn(columnName: string): void { + if (!this.ownerReadableAsListColumns) { + this.ownerReadableAsListColumns = new Columns([]); + } + this.ownerReadableAsListColumns.addColumn(columnName); + } + + public getUserReadableAsListColumns(): Columns { + return this.userReadableAsListColumns; + } + + public addUserReadableAsListColumn(columnName: string): void { + if (!this.userReadableAsListColumns) { + this.userReadableAsListColumns = new Columns([]); + } + this.userReadableAsListColumns.addColumn(columnName); + } + + public getPublicReadableAsListColumns(): Columns { + return this.publicReadableAsListColumns; + } + + public addPublicReadableAsListColumn(columnName: string): void { + if (!this.publicReadableAsListColumns) { + this.publicReadableAsListColumns = new Columns([]); + } + this.publicReadableAsListColumns.addColumn(columnName); + } + + public addAdminReadableAsListColumn(columnName: string): void { + if (!this.adminReadableAsListColumns) { + this.adminReadableAsListColumns = new Columns([]); + } + this.adminReadableAsListColumns.addColumn(columnName); + } + + public getAdminReadableAsListColumns(): Columns { + return this.adminReadableAsListColumns; + } + + public addMemberReadableAsListColumn(columnName: string): void { + if (!this.memberReadableAsListColumns) { + this.memberReadableAsListColumns = new Columns([]); + } + this.memberReadableAsListColumns.addColumn(columnName); + } + + public getMemberReadableAsListColumns(): Columns { + return this.memberReadableAsListColumns; + } + + public addViewerReadableAsListColumn(columnName: string): void { + if (!this.viewerReadableAsListColumns) { + this.viewerReadableAsListColumns = new Columns([]); + } + this.viewerReadableAsListColumns.addColumn(columnName); + } + + public getViewerReadableAsListColumns(): Columns { + return this.viewerReadableAsListColumns; + } + + public getOwnerUpdateableColumns(): Columns { + return this.ownerUpdateableColumns; + } + + public addOwnerUpdateableColumn(columnName: string): void { + if (!this.ownerUpdateableColumns) { + this.ownerUpdateableColumns = new Columns([]); + } + this.ownerUpdateableColumns.addColumn(columnName); + } + + public getPublicUpdateableColumns(): Columns { + return this.publicUpdateableColumns; + } + + public addPublicUpdateableColumn(columnName: string): void { + if (!this.publicUpdateableColumns) { + this.publicUpdateableColumns = new Columns([]); + } + this.publicUpdateableColumns.addColumn(columnName); + } + + public addAdminUpdateableColumn(columnName: string): void { + if (!this.adminUpdateableColumns) { + this.adminUpdateableColumns = new Columns([]); + } + this.adminUpdateableColumns.addColumn(columnName); + } + + public getAdminUpdateableColumns(): Columns { + return this.adminUpdateableColumns; + } + + public addMemberUpdateableColumn(columnName: string): void { + if (!this.memberUpdateableColumns) { + this.memberUpdateableColumns = new Columns([]); + } + this.memberUpdateableColumns.addColumn(columnName); + } + + public getMemberUpdateableColumns(): Columns { + return this.memberUpdateableColumns; + } + + public addViewerUpdateableColumn(columnName: string): void { + if (!this.viewerUpdateableColumns) { + this.viewerUpdateableColumns = new Columns([]); + } + this.viewerUpdateableColumns.addColumn(columnName); + } + + public getViewerUpdateableColumns(): Columns { + return this.viewerUpdateableColumns; + } + + public addOwnerCreateableColumn(columnName: string): void { + if (!this.ownerCreateableColumns) { + this.ownerCreateableColumns = new Columns([]); + } + this.ownerCreateableColumns.addColumn(columnName); + } + + public getPublicCreateableColumns(): Columns { + return this.publicCreateableColumns; + } + + public addPublicCreateableColumn(columnName: string): void { + if (!this.publicCreateableColumns) { + this.publicCreateableColumns = new Columns([]); + } + this.publicCreateableColumns.addColumn(columnName); + } + + public addAdminCreateableColumn(columnName: string): void { + if (!this.adminCreateableColumns) { + this.adminCreateableColumns = new Columns([]); + } + this.adminCreateableColumns.addColumn(columnName); + } + + public getAdminCreateableColumns(): Columns { + return this.adminCreateableColumns; + } + + public addMemberCreateableColumn(columnName: string): void { + if (!this.memberCreateableColumns) { + this.memberCreateableColumns = new Columns([]); + } + this.memberCreateableColumns.addColumn(columnName); + } + + public getMemberCreateableColumns(): Columns { + return this.memberCreateableColumns; + } + + public addViewerCreateableColumn(columnName: string): void { + if (!this.viewerCreateableColumns) { + this.viewerCreateableColumns = new Columns([]); + } + this.viewerCreateableColumns.addColumn(columnName); + } + + public getViewerCreateableColumns(): Columns { + return this.viewerCreateableColumns; + } + + public addOwnerDeleteableColumn(columnName: string): void { + if (!this.ownerDeleteableColumns) { + this.ownerDeleteableColumns = new Columns([]); + } + this.ownerDeleteableColumns.addColumn(columnName); + } + + public getPublicDeleteableColumns(): Columns { + return this.publicDeleteableColumns; + } + + public addPublicDeleteableColumn(columnName: string): void { + if (!this.publicDeleteableColumns) { + this.publicDeleteableColumns = new Columns([]); + } + this.publicDeleteableColumns.addColumn(columnName); + } + + public addAdminDeleteableColumn(columnName: string): void { + if (!this.adminDeleteableColumns) { + this.adminDeleteableColumns = new Columns([]); + } + this.adminDeleteableColumns.addColumn(columnName); + } + + public getAdminDeleteableColumns(): Columns { + return this.adminDeleteableColumns; + } + + public addMemberDeleteableColumn(columnName: string): void { + if (!this.memberDeleteableColumns) { + this.memberDeleteableColumns = new Columns([]); + } + this.memberDeleteableColumns.addColumn(columnName); + } + + public getMemberDeleteableColumns(): Columns { + return this.memberDeleteableColumns; + } + + public addViewerDeleteableColumn(columnName: string): void { + if (!this.viewerDeleteableColumns) { + this.viewerDeleteableColumns = new Columns([]); + } + this.viewerDeleteableColumns.addColumn(columnName); + } + + public getViewerDeleteableColumns(): Columns { + return this.viewerDeleteableColumns; } public setSlugifyColumn(columnName: string): void { @@ -130,6 +520,10 @@ export default class BaseModel extends BaseEntity { return this.saveSlugToColumn; } + public getProjectIdColumn(): string | null { + return this.projectIdColumn; + } + public get id(): ObjectID { return new ObjectID(this._id); } @@ -138,18 +532,541 @@ export default class BaseModel extends BaseEntity { this._id = value.toString(); } - @PrimaryGeneratedColumn('uuid') - public _id!: string; + private static _fromJSON(json: JSONObject): T { + const baseModel: BaseModel = new BaseModel(); - @CreateDateColumn() - public createdAt!: Date; + for (const key of Object.keys(json)) { + (baseModel as any)[key] = json[key]; + } - @UpdateDateColumn() - public updatedAt!: Date; + return baseModel as T; + } - @DeleteDateColumn() - public deletedAt?: Date; + public static fromJSON(json: JSONObject): T { + return this._fromJSON(json); + } - @VersionColumn() - public version!: number; + private static keepColumns( + data: T, + columnsToKeep: Columns + ): T { + const baseModel: BaseModel = new BaseModel(); + + for (const key of Object.keys(data)) { + if (!columnsToKeep) { + (baseModel as any)[key] = (data as any)[key]; + } + + if ( + columnsToKeep && + columnsToKeep.columns.length > 0 && + columnsToKeep.columns.includes(key) + ) { + (baseModel as any)[key] = (data as any)[key]; + } + } + + return baseModel as T; + } + + public static asPublicCreateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canPublicCreateRecord) { + throw new BadRequestException( + 'A user of role public cannot create this record.' + ); + } + + return this.keepColumns(data, data.getPublicCreateableColumns()); + } + + public static asPublicUpdateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canPublicUpdateRecord) { + throw new BadRequestException( + 'A user of role public cannot update this record.' + ); + } + + return this.keepColumns(data, data.getPublicUpdateableColumns()); + } + + public static asPublicReadableItem( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canPublicReadItemRecord) { + throw new BadRequestException( + 'A user of role public cannot read this record.' + ); + } + + return this.keepColumns(data, data.getPublicReadableAsItemColumns()); + } + + public static asPublicReadableList( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canPublicReadListRecord) { + throw new BadRequestException( + 'A user of role public cannot read this record.' + ); + } + + return this.keepColumns(data, data.getPublicReadableAsListColumns()); + } + + public static asPublicDeleteable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canPublicDeleteRecord) { + throw new BadRequestException( + 'A user of role public cannot delete this record.' + ); + } + + return this.keepColumns(data, data.getPublicDeleteableColumns()); + } + + public static asOwnerCreateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canOwnerCreateRecord) { + throw new BadRequestException( + 'A user of role owner cannot create this record.' + ); + } + + return this.keepColumns(data, data.getOwnerCreateableColumns()); + } + + public static asOwnerUpdateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canOwnerUpdateRecord) { + throw new BadRequestException( + 'A user of role owner cannot update this record.' + ); + } + + return this.keepColumns(data, data.getOwnerUpdateableColumns()); + } + + public static asOwnerReadableItem( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canOwnerReadItemRecord) { + throw new BadRequestException( + 'A user of role owner cannot delete this record.' + ); + } + + return this.keepColumns(data, data.getOwnerReadableAsItemColumns()); + } + + public static asOwnerReadableList( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canOwnerReadListRecord) { + throw new BadRequestException( + 'A user of role owner cannot delete this record.' + ); + } + + return this.keepColumns(data, data.getOwnerReadableAsListColumns()); + } + + public static asOwnerDeleteable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canOwnerDeleteRecord) { + throw new BadRequestException( + 'A user of role owner cannot delete this record.' + ); + } + + return this.keepColumns(data, data.getOwnerDeleteableColumns()); + } + + public static asUserCreateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canUserCreateRecord) { + throw new BadRequestException( + 'A user of role viewer cannot create this record.' + ); + } + + return this.keepColumns(data, data.getUserCreateableColumns()); + } + + public static asUserUpdateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canUserUpdateRecord) { + throw new BadRequestException( + 'A user of role viewer cannot update this record.' + ); + } + + return this.keepColumns(data, data.getUserUpdateableColumns()); + } + + public static asUserReadableItem( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canUserReadItemRecord) { + throw new BadRequestException( + 'A user of role viewer cannot read this record.' + ); + } + + return this.keepColumns(data, data.getUserReadableAsItemColumns()); + } + + public static asUserReadableList( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canUserReadListRecord) { + throw new BadRequestException( + 'A user of role viewer cannot read this record.' + ); + } + + return this.keepColumns(data, data.getUserReadableAsListColumns()); + } + + public static asUserDeleteable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canUserDeleteRecord) { + throw new BadRequestException( + 'A user of role viewer cannot delete this record.' + ); + } + + return this.keepColumns(data, data.getUserDeleteableColumns()); + } + + public static asViewerCreateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canViewerCreateRecord) { + throw new BadRequestException( + 'A user of role viewer cannot create this record.' + ); + } + + return this.keepColumns(data, data.getViewerCreateableColumns()); + } + + public static asViewerUpdateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canViewerUpdateRecord) { + throw new BadRequestException( + 'A user of role viewer cannot update this record.' + ); + } + + return this.keepColumns(data, data.getViewerUpdateableColumns()); + } + + public static asViewerReadableItem( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canViewerReadItemRecord) { + throw new BadRequestException( + 'A user of role viewer cannot read this record.' + ); + } + + return this.keepColumns(data, data.getViewerReadableAsItemColumns()); + } + + public static asViewerReadableList( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canViewerReadListRecord) { + throw new BadRequestException( + 'A user of role viewer cannot read this record.' + ); + } + + return this.keepColumns(data, data.getViewerReadableAsListColumns()); + } + + public static asViewerDeleteable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canViewerDeleteRecord) { + throw new BadRequestException( + 'A user of role viewer cannot delete this record.' + ); + } + + return this.keepColumns(data, data.getViewerDeleteableColumns()); + } + + public static asMemberCreateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canMemberCreateRecord) { + throw new BadRequestException( + 'A user of role member cannot create this record.' + ); + } + + return this.keepColumns(data, data.getMemberCreateableColumns()); + } + + public static asMemberUpdateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canMemberUpdateRecord) { + throw new BadRequestException( + 'A user of role member cannot update this record.' + ); + } + + return this.keepColumns(data, data.getMemberUpdateableColumns()); + } + + public static asMemberReadableItem( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canMemberReadItemRecord) { + throw new BadRequestException( + 'A user of role member cannot read this record.' + ); + } + + return this.keepColumns(data, data.getMemberReadableAsItemColumns()); + } + + public static asMemberReadableList( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canMemberReadListRecord) { + throw new BadRequestException( + 'A user of role member cannot read this record.' + ); + } + + return this.keepColumns(data, data.getMemberReadableAsListColumns()); + } + + public static asMemberDeleteable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canMemberDeleteRecord) { + throw new BadRequestException( + 'A user of role member cannot delete this record.' + ); + } + + return this.keepColumns(data, data.getMemberDeleteableColumns()); + } + + public static asAdminCreateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canAdminCreateRecord) { + throw new BadRequestException( + 'A user of role admin cannot create this record.' + ); + } + + return this.keepColumns(data, data.getAdminCreateableColumns()); + } + + public static asAdminUpdateable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canAdminUpdateRecord) { + throw new BadRequestException( + 'A user of role admin cannot update this record.' + ); + } + + return this.keepColumns(data, data.getAdminUpdateableColumns()); + } + + public static asAdminReadableList( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canAdminReadListRecord) { + throw new BadRequestException( + 'A user of role admin cannot read this record.' + ); + } + + return this.keepColumns(data, data.getAdminReadableAsListColumns()); + } + + public static asAdminReadableItem( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canAdminReadItemRecord) { + throw new BadRequestException( + 'A user of role admin cannot read this record.' + ); + } + + return this.keepColumns(data, data.getAdminReadableAsItemColumns()); + } + + public static asAdminDeleteable( + data: JSONObject | T + ): T { + if (!(data instanceof BaseModel)) { + data = this._fromJSON(data); + } + + if (!data.canAdminDeleteRecord) { + throw new BadRequestException( + 'A user of role admin cannot delete this record.' + ); + } + + return this.keepColumns(data, data.getAdminDeleteableColumns()); + } + + public toJSON(): JSONObject { + const json: JSONObject = {}; + for (const column of this.tableColumns.columns) { + if ((this as any)[column]) { + json[column] = (this as any)[column]; + } + } + + return json; + } + + public static toJSONArray(list: Array): JSONArray { + const array: JSONArray = []; + + for (const item of list) { + array.push(item.toJSON()); + } + + return array; + } } diff --git a/Common/Models/EmailVerificationToken.ts b/Common/Models/EmailVerificationToken.ts new file mode 100755 index 0000000000..c7366a51f0 --- /dev/null +++ b/Common/Models/EmailVerificationToken.ts @@ -0,0 +1,64 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm'; +import ColumnType from '../Types/Database/ColumnType'; +import ObjectID from '../Types/ObjectID'; +import BaseModel from './BaseModel'; +import RequiredColumn from '../Types/Database/RequiredColumn'; +import UniqueColumn from '../Types/Database/UniqueColumn'; + +import User from './User'; +import ColumnLength from '../Types/Database/ColumnLength'; +import Email from '../Types/Email'; + +@Entity({ + name: 'EmailVerificationToken', +}) +export default class EmailVerificationToken extends BaseModel { + @RequiredColumn() + @ManyToOne( + (_type: string) => { + return User; + }, + { + eager: false, + nullable: false, + onDelete: 'CASCADE', + orphanedRowAction: 'nullify', + } + ) + @JoinColumn({ name: 'userId' }) + public user!: User; + + @Column({ + type: ColumnType.ObjectID, + nullable: false, + transformer: ObjectID.getDatabaseTransformer(), + }) + public userId!: ObjectID; + + @Column({ + type: ColumnType.Email, + length: ColumnLength.Email, + nullable: false, + transformer: Email.getDatabaseTransformer(), + }) + public email!: Email; + + @Index() + @RequiredColumn() + @UniqueColumn() + @Column({ + type: ColumnType.ObjectID, + nullable: false, + unique: true, + length: ColumnLength.ObjectID, + transformer: ObjectID.getDatabaseTransformer(), + }) + public token!: ObjectID; + + @RequiredColumn() + @Column({ + nullable: false, + type: ColumnType.Date, + }) + public expires!: Date; +} diff --git a/Common/Models/Index.ts b/Common/Models/Index.ts index 42fe90ad6d..28baa564a8 100644 --- a/Common/Models/Index.ts +++ b/Common/Models/Index.ts @@ -1,5 +1,6 @@ import User from './User'; import Probe from './Probe'; import Project from './Project'; +import EmailVerificationToken from './EmailVerificationToken'; -export default [User, Probe, Project]; +export default [User, Probe, Project, EmailVerificationToken]; diff --git a/Common/Models/Probe.ts b/Common/Models/Probe.ts index 7552b0e89f..fc0412dfe8 100755 --- a/Common/Models/Probe.ts +++ b/Common/Models/Probe.ts @@ -5,17 +5,19 @@ import ColumnType from '../Types/Database/ColumnType'; import Project from './Project'; import ObjectID from '../Types/ObjectID'; import Version from '../Types/Version'; -import RequiredColumn from '../Types/Database/RequiredColumnDecorator'; -import UniqueColumn from '../Types/Database/UniqueColumnDecorator'; -import SlugifyColumn from '../Types/Database/SlugifyColumnDecorator'; +import RequiredColumn from '../Types/Database/RequiredColumn'; +import UniqueColumn from '../Types/Database/UniqueColumn'; +import SlugifyColumn from '../Types/Database/SlugifyColumn'; import URL from '../Types/API/URL'; import User from './User'; +import TableColumn from '../Types/Database/TableColumn'; @SlugifyColumn('name', 'slug') @Entity({ name: 'Probe', }) export default class Probe extends BaseModel { + @TableColumn() @RequiredColumn() @UniqueColumn() @Column({ @@ -27,6 +29,7 @@ export default class Probe extends BaseModel { }) public key!: ObjectID; + @TableColumn() @RequiredColumn() @Column({ nullable: false, @@ -35,6 +38,7 @@ export default class Probe extends BaseModel { }) public name!: string; + @TableColumn() @RequiredColumn() @UniqueColumn() @Column({ @@ -44,6 +48,7 @@ export default class Probe extends BaseModel { }) public slug!: string; + @TableColumn() @RequiredColumn() @Column({ nullable: false, @@ -53,6 +58,7 @@ export default class Probe extends BaseModel { }) public probeVersion!: Version; + @TableColumn() @RequiredColumn() @Column({ nullable: false, @@ -63,6 +69,7 @@ export default class Probe extends BaseModel { }) public lastAlive!: Date; + @TableColumn() @Column({ type: ColumnType.ShortURL, nullable: true, @@ -72,6 +79,7 @@ export default class Probe extends BaseModel { public iconUrl?: URL; // If this probe is custom to the project and only monitoring reosurces in this project. + @TableColumn() @ManyToOne( (_type: string) => { return Project; @@ -87,6 +95,7 @@ export default class Probe extends BaseModel { @JoinColumn({ name: 'projectId' }) public project?: Project; + @TableColumn() @Column({ type: ColumnType.ObjectID, nullable: true, @@ -94,6 +103,7 @@ export default class Probe extends BaseModel { }) public projectId?: ObjectID; + @TableColumn() @ManyToOne( (_type: string) => { return User; @@ -109,6 +119,7 @@ export default class Probe extends BaseModel { @JoinColumn({ name: 'deletedByUserId' }) public deletedByUser?: User; + @TableColumn() @Column({ type: ColumnType.ObjectID, nullable: true, @@ -116,6 +127,7 @@ export default class Probe extends BaseModel { }) public deletedByUserId?: ObjectID; + @TableColumn() @ManyToOne( (_type: string) => { return User; @@ -130,6 +142,7 @@ export default class Probe extends BaseModel { @JoinColumn({ name: 'createdByUserId' }) public createdByUser?: User; + @TableColumn() @Column({ type: ColumnType.ObjectID, nullable: true, diff --git a/Common/Models/Project.ts b/Common/Models/Project.ts index e72149574d..c810395478 100644 --- a/Common/Models/Project.ts +++ b/Common/Models/Project.ts @@ -1,19 +1,21 @@ import { Column, Entity, JoinColumn, ManyToOne } from 'typeorm'; import BaseModel from './BaseModel'; -import RequiredColumn from '../Types/Database/RequiredColumnDecorator'; -import UniqueColumn from '../Types/Database/UniqueColumnDecorator'; +import RequiredColumn from '../Types/Database/RequiredColumn'; +import UniqueColumn from '../Types/Database/UniqueColumn'; import User from './User'; import Project from './Project'; import ColumnType from '../Types/Database/ColumnType'; import PositiveNumber from '../Types/PositiveNumber'; import ObjectID from '../Types/ObjectID'; import ColumnLength from '../Types/Database/ColumnLength'; +import TableColumn from '../Types/Database/TableColumn'; @Entity({ name: 'Project', }) export default class Model extends BaseModel { @RequiredColumn() + @TableColumn() @Column({ nullable: false, type: ColumnType.Name, @@ -23,6 +25,7 @@ export default class Model extends BaseModel { @RequiredColumn() @UniqueColumn() + @TableColumn() @Column({ nullable: false, type: ColumnType.Slug, @@ -30,6 +33,7 @@ export default class Model extends BaseModel { }) public slug!: string; + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -38,6 +42,7 @@ export default class Model extends BaseModel { }) public paymentProviderPlanId?: string; + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -46,6 +51,7 @@ export default class Model extends BaseModel { }) public paymentProviderSubscriptionId?: string; + @TableColumn() @ManyToOne( (_type: string) => { return Project; @@ -61,6 +67,7 @@ export default class Model extends BaseModel { @JoinColumn({ name: 'parentProjectId' }) public parentProject?: Project; + @TableColumn() @Column({ type: ColumnType.ObjectID, nullable: true, @@ -68,6 +75,7 @@ export default class Model extends BaseModel { }) public parentProjectId?: ObjectID; + @TableColumn() @Column({ type: ColumnType.SmallPositiveNumber, nullable: false, @@ -76,6 +84,7 @@ export default class Model extends BaseModel { }) public numberOfLicensesIssued!: PositiveNumber; + @TableColumn() @ManyToOne( (_type: string) => { return User; @@ -90,6 +99,7 @@ export default class Model extends BaseModel { @JoinColumn({ name: 'createdByUserId' }) public createdByUser?: User; + @TableColumn() @Column({ type: ColumnType.ObjectID, nullable: true, @@ -97,6 +107,7 @@ export default class Model extends BaseModel { }) public createdByUserId?: ObjectID; + @TableColumn() @ManyToOne( (_type: string) => { return User; @@ -112,6 +123,7 @@ export default class Model extends BaseModel { @JoinColumn({ name: 'deletedByUserId' }) public deletedByUser?: User; + @TableColumn() @Column({ type: ColumnType.ObjectID, nullable: false, @@ -121,6 +133,7 @@ export default class Model extends BaseModel { public apiKey!: ObjectID; @RequiredColumn() + @TableColumn() @Column({ type: ColumnType.Boolean, nullable: false, @@ -130,6 +143,7 @@ export default class Model extends BaseModel { public alertsEnabled!: boolean; @RequiredColumn() + @TableColumn() @Column({ type: ColumnType.SmallPositiveNumber, nullable: false, @@ -139,6 +153,7 @@ export default class Model extends BaseModel { public alertAccountBalance!: number; @RequiredColumn() + @TableColumn() @Column({ type: ColumnType.Boolean, nullable: false, @@ -147,6 +162,7 @@ export default class Model extends BaseModel { }) public isBlocked!: boolean; + @TableColumn() @Column({ type: ColumnType.SmallPositiveNumber, nullable: true, @@ -154,6 +170,7 @@ export default class Model extends BaseModel { }) public unpaidSubscriptionNotificationCount!: PositiveNumber; + @TableColumn() @Column({ type: ColumnType.Date, nullable: true, @@ -161,6 +178,7 @@ export default class Model extends BaseModel { }) public paymentFailedDate?: Date; + @TableColumn() @Column({ type: ColumnType.Date, nullable: true, diff --git a/Common/Models/User.ts b/Common/Models/User.ts index b21e9bf1ff..70331e5dba 100644 --- a/Common/Models/User.ts +++ b/Common/Models/User.ts @@ -1,11 +1,10 @@ import { Column, Entity } from 'typeorm'; import BaseModel from './BaseModel'; -import EncryptedColumn from '../Types/Database/EncryptedColumnDecorator'; import ColumnType from '../Types/Database/ColumnType'; import ColumnLength from '../Types/Database/ColumnLength'; -import RequiredColumn from '../Types/Database/RequiredColumnDecorator'; -import UniqueColumn from '../Types/Database/UniqueColumnDecorator'; -import SlugifyColumn from '../Types/Database/SlugifyColumnDecorator'; +import RequiredColumn from '../Types/Database/RequiredColumn'; +import UniqueColumn from '../Types/Database/UniqueColumn'; +import SlugifyColumn from '../Types/Database/SlugifyColumn'; import Phone from '../Types/Phone'; import Email from '../Types/Email'; import Name from '../Types/Name'; @@ -13,20 +12,48 @@ import URL from '../Types/API/URL'; import Timezone from '../Types/Timezone'; import CompanySize from '../Types/Company/CompanySize'; import JobRole from '../Types/Company/JobRole'; +import HashedColumn from '../Types/Database/HashedColumn'; +import HashedString from '../Types/HashedString'; +import PublicRecordPermissions from '../Types/Database/AccessControls/Public/PublicRecordPermissions'; +import TableColumn from '../Types/Database/TableColumn'; +import PublicColumnPermissions from '../Types/Database/AccessControls/Public/PublicColumnPermissions'; +@PublicRecordPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, +}) @SlugifyColumn('name', 'slug') @Entity({ name: 'User', }) class User extends BaseModel { - @RequiredColumn() + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() @Column({ type: ColumnType.Name, length: ColumnLength.Name, - nullable: false, + nullable: true, + unique: false, }) public name!: Name; + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() @UniqueColumn() @RequiredColumn() @Column({ @@ -37,6 +64,7 @@ class User extends BaseModel { }) public email!: Email; + @TableColumn() @Column({ type: ColumnType.Email, length: ColumnLength.Email, @@ -45,48 +73,86 @@ class User extends BaseModel { }) public newUnverifiedTemporaryEmail?: string; - @EncryptedColumn() + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() + @HashedColumn() @Column({ - type: ColumnType.Password, - length: ColumnLength.Password, + type: ColumnType.HashedString, + length: ColumnLength.HashedString, unique: false, nullable: true, }) - public password?: string; + public password?: HashedString; + @TableColumn() @Column({ type: ColumnType.Boolean, default: false, }) public isEmailVerified!: boolean; - @RequiredColumn() + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() @Column({ type: ColumnType.Name, length: ColumnLength.Name, - nullable: false, + nullable: true, unique: false, }) public companyName!: string; - @RequiredColumn() + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, - nullable: false, + nullable: true, unique: false, }) public jobRole!: JobRole; - @RequiredColumn() + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, - nullable: false, + nullable: true, unique: false, }) public companySize!: CompanySize; + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -95,16 +161,24 @@ class User extends BaseModel { }) public referral?: string; - @RequiredColumn() + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() @Column({ type: ColumnType.Phone, length: ColumnLength.Phone, - nullable: false, + nullable: true, unique: false, transformer: Phone.getDatabaseTransformer(), }) public companyPhoneNumber!: Phone; + @TableColumn() @Column({ type: ColumnType.ShortURL, length: ColumnLength.ShortURL, @@ -115,6 +189,7 @@ class User extends BaseModel { public profilePicImageUrl?: URL; @RequiredColumn() + @TableColumn() @Column({ type: ColumnType.Boolean, default: false, @@ -123,6 +198,7 @@ class User extends BaseModel { }) public twoFactorAuthEnabled!: boolean; + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -131,6 +207,7 @@ class User extends BaseModel { }) public twoFactorSecretCode?: string; + @TableColumn() @Column({ type: ColumnType.ShortURL, length: ColumnLength.ShortURL, @@ -138,8 +215,9 @@ class User extends BaseModel { unique: false, transformer: URL.getDatabaseTransformer(), }) - public otpAuthUrl?: URL; + public twoFactorAuthUrl?: URL; + @TableColumn() @Column({ type: ColumnType.Array, nullable: true, @@ -147,6 +225,7 @@ class User extends BaseModel { }) public backupCodes?: Array; + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -155,6 +234,7 @@ class User extends BaseModel { }) public jwtRefreshToken?: string; + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -163,6 +243,7 @@ class User extends BaseModel { }) public paymentProviderCustomerId?: string; + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -171,6 +252,7 @@ class User extends BaseModel { }) public resetPasswordToken!: string; + @TableColumn() @Column({ type: ColumnType.Date, nullable: true, @@ -178,6 +260,7 @@ class User extends BaseModel { }) public resetPasswordExpires?: Date; + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -186,14 +269,22 @@ class User extends BaseModel { }) public timezone?: Timezone; - @RequiredColumn() + @TableColumn() @Column({ type: ColumnType.Date, - nullable: false, + nullable: true, unique: false, }) public lastActive!: Date; + @PublicColumnPermissions({ + create: true, + readAsList: false, + readAsItem: false, + update: false, + delete: false, + }) + @TableColumn() @Column({ type: ColumnType.ShortText, length: ColumnLength.ShortText, @@ -203,6 +294,7 @@ class User extends BaseModel { public promotionName!: string; @RequiredColumn() + @TableColumn() @Column({ type: ColumnType.Boolean, nullable: false, @@ -211,6 +303,7 @@ class User extends BaseModel { }) public isDisabled!: boolean; + @TableColumn() @Column({ type: ColumnType.Date, nullable: true, @@ -219,6 +312,7 @@ class User extends BaseModel { public paymentFailedDate!: Date; @RequiredColumn() + @TableColumn() @Column({ type: ColumnType.Boolean, nullable: false, @@ -228,6 +322,7 @@ class User extends BaseModel { public isMasterAdmin!: boolean; @RequiredColumn() + @TableColumn() @Column({ type: ColumnType.Boolean, nullable: false, @@ -236,6 +331,7 @@ class User extends BaseModel { }) public isBlocked!: boolean; + @TableColumn() @Column({ type: ColumnType.Phone, length: ColumnLength.Phone, @@ -244,6 +340,7 @@ class User extends BaseModel { }) public alertPhoneNumber?: Phone; + @TableColumn() @Column({ type: ColumnType.OTP, length: ColumnLength.OTP, @@ -252,6 +349,7 @@ class User extends BaseModel { }) public alertPhoneVerificationCode?: string; + @TableColumn() @Column({ type: ColumnType.Date, nullable: true, @@ -259,6 +357,7 @@ class User extends BaseModel { }) public alertPhoneVerificationCodeRequestTime?: Date; + @TableColumn() @Column({ type: ColumnType.Phone, length: ColumnLength.Phone, diff --git a/Common/Models/UserVerificationToken.ts b/Common/Models/UserVerificationToken.ts deleted file mode 100755 index a06be20a5d..0000000000 --- a/Common/Models/UserVerificationToken.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Column, Entity, Index } from 'typeorm'; -import BaseModel from './BaseModel'; - -import User from './User'; - -@Entity({ - name: 'UserVerificationToken', -}) -export default class UserVerificationToken extends BaseModel { - @Column({ nullable: false }) - public user!: User; - - @Index() - @Column({ nullable: false }) - public token!: string; - - @Column({ nullable: false }) - public expires!: Date; -} diff --git a/Common/Types/Countries.ts b/Common/Types/Countries.ts new file mode 100644 index 0000000000..300cc63343 --- /dev/null +++ b/Common/Types/Countries.ts @@ -0,0 +1,247 @@ +enum Countries { + 'Afghanistan' = 'Afghanistan', + 'Åland Islands' = 'Åland Islands', + 'Albania' = 'Albania', + 'Algeria' = 'Algeria', + 'American Samoa' = 'American Samoa', + 'Andorra' = 'Andorra', + 'Angola' = 'Angola', + 'Anguilla' = 'Anguilla', + 'Antarctica' = 'Antarctica', + 'Antigua and Barbuda' = 'Antigua and Barbuda', + 'Argentina' = 'Argentina', + 'Armenia' = 'Armenia', + 'Aruba' = 'Aruba', + 'Australia' = 'Australia', + 'Austria' = 'Austria', + 'Azerbaijan' = 'Azerbaijan', + 'Bahamas' = 'Bahamas', + 'Bahrain' = 'Bahrain', + 'Bangladesh' = 'Bangladesh', + 'Barbados' = 'Barbados', + 'Belarus' = 'Belarus', + 'Belgium' = 'Belgium', + 'Belize' = 'Belize', + 'Benin' = 'Benin', + 'Bermuda' = 'Bermuda', + 'Bhutan' = 'Bhutan', + 'Bolivia' = 'Bolivia', + 'Bosnia and Herzegovina' = 'Bosnia and Herzegovina', + 'Botswana' = 'Botswana', + 'Bouvet Island' = 'Bouvet Island', + 'Brazil' = 'Brazil', + 'British Indian Ocean Territory' = 'British Indian Ocean Territory', + 'Brunei Darussalam' = 'Brunei Darussalam', + 'Bulgaria' = 'Bulgaria', + 'Burkina Faso' = 'Burkina Faso', + 'Burundi' = 'Burundi', + 'Cambodia' = 'Cambodia', + 'Cameroon' = 'Cameroon', + 'Canada' = 'Canada', + 'Cape Verde' = 'Cape Verde', + 'Cayman Islands' = 'Cayman Islands', + 'Central African Republic' = 'Central African Republic', + 'Chad' = 'Chad', + 'Chile' = 'Chile', + 'China' = 'China', + 'Christmas Island' = 'Christmas Island', + 'Cocos (Keeling) Islands' = 'Cocos (Keeling) Islands', + 'Colombia' = 'Colombia', + 'Comoros' = 'Comoros', + 'Congo' = 'Congo', + 'Congo, The Democratic Republic of the' = 'Congo, The Democratic Republic of the', + 'Cook Islands' = 'Cook Islands', + 'Costa Rica' = 'Costa Rica', + "Cote d'Ivoire" = "Cote d'Ivoire", + 'Croatia' = 'Croatia', + 'Cuba' = 'Cuba', + 'Cyprus' = 'Cyprus', + 'Czech Republic' = 'Czech Republic', + 'Denmark' = 'Denmark', + 'Djibouti' = 'Djibouti', + 'Dominica' = 'Dominica', + 'Dominican Republic' = 'Dominican Republic', + 'Ecuador' = 'Ecuador', + 'Egypt' = 'Egypt', + 'El Salvador' = 'El Salvador', + 'Equatorial Guinea' = 'Equatorial Guinea', + 'Eritrea' = 'Eritrea', + 'Estonia' = 'Estonia', + 'Ethiopia' = 'Ethiopia', + 'Falkland Islands (Malvinas)' = 'Falkland Islands (Malvinas)', + 'Faroe Islands' = 'Faroe Islands', + 'Fiji' = 'Fiji', + 'Finland' = 'Finland', + 'France' = 'France', + 'French Guiana' = 'French Guiana', + 'French Polynesia' = 'French Polynesia', + 'French Southern Territories' = 'French Southern Territories', + 'Gabon' = 'Gabon', + 'Gambia' = 'Gambia', + 'Georgia' = 'Georgia', + 'Germany' = 'Germany', + 'Ghana' = 'Ghana', + 'Gibraltar' = 'Gibraltar', + 'Greece' = 'Greece', + 'Greenland' = 'Greenland', + 'Grenada' = 'Grenada', + 'Guadeloupe' = 'Guadeloupe', + 'Guam' = 'Guam', + 'Guatemala' = 'Guatemala', + 'Guernsey' = 'Guernsey', + 'Guinea' = 'Guinea', + 'Guinea-Bissau' = 'Guinea-Bissau', + 'Guyana' = 'Guyana', + 'Haiti' = 'Haiti', + 'Heard Island and Mcdonald Islands' = 'Heard Island and Mcdonald Islands', + 'Holy See (Vatican City State)' = 'Holy See (Vatican City State)', + 'Honduras' = 'Honduras', + 'Hong Kong' = 'Hong Kong', + 'Hungary' = 'Hungary', + 'Iceland' = 'Iceland', + 'India' = 'India', + 'Indonesia' = 'Indonesia', + 'Iran, Islamic Republic Of' = 'Iran, Islamic Republic Of', + 'Iraq' = 'Iraq', + 'Ireland' = 'Ireland', + 'Isle of Man' = 'Isle of Man', + 'Israel' = 'Israel', + 'Italy' = 'Italy', + 'Jamaica' = 'Jamaica', + 'Japan' = 'Japan', + 'Jersey' = 'Jersey', + 'Jordan' = 'Jordan', + 'Kazakhstan' = 'Kazakhstan', + 'Kenya' = 'Kenya', + 'Kiribati' = 'Kiribati', + "Korea, Democratic People's Republic of" = "Korea, Democratic People's Republic of", + 'Korea, Republic of' = 'Korea, Republic of', + 'Kuwait' = 'Kuwait', + 'Kyrgyzstan' = 'Kyrgyzstan', + "Lao People's Democratic Republic" = "Lao People's Democratic Republic", + 'Latvia' = 'Latvia', + 'Lebanon' = 'Lebanon', + 'Lesotho' = 'Lesotho', + 'Liberia' = 'Liberia', + 'Libyan Arab Jamahiriya' = 'Libyan Arab Jamahiriya', + 'Liechtenstein' = 'Liechtenstein', + 'Lithuania' = 'Lithuania', + 'Luxembourg' = 'Luxembourg', + 'Macao' = 'Macao', + 'Macedonia, The Former Yugoslav Republic of' = 'Macedonia, The Former Yugoslav Republic of', + 'Madagascar' = 'Madagascar', + 'Malawi' = 'Malawi', + 'Malaysia' = 'Malaysia', + 'Maldives' = 'Maldives', + 'Mali' = 'Mali', + 'Malta' = 'Malta', + 'Marshall Islands' = 'Marshall Islands', + 'Martinique' = 'Martinique', + 'Mauritania' = 'Mauritania', + 'Mauritius' = 'Mauritius', + 'Mayotte' = 'Mayotte', + 'Mexico' = 'Mexico', + 'Micronesia, Federated States of' = 'Micronesia, Federated States of', + 'Moldova, Republic of' = 'Moldova, Republic of', + 'Monaco' = 'Monaco', + 'Mongolia' = 'Mongolia', + 'Montserrat' = 'Montserrat', + 'Morocco' = 'Morocco', + 'Mozambique' = 'Mozambique', + 'Myanmar' = 'Myanmar', + 'Namibia' = 'Namibia', + 'Nauru' = 'Nauru', + 'Nepal' = 'Nepal', + 'Netherlands' = 'Netherlands', + 'Netherlands Antilles' = 'Netherlands Antilles', + 'New Caledonia' = 'New Caledonia', + 'New Zealand' = 'New Zealand', + 'Nicaragua' = 'Nicaragua', + 'Niger' = 'Niger', + 'Nigeria' = 'Nigeria', + 'Niue' = 'Niue', + 'Norfolk Island' = 'Norfolk Island', + 'Northern Mariana Islands' = 'Northern Mariana Islands', + 'Norway' = 'Norway', + 'Oman' = 'Oman', + 'Pakistan' = 'Pakistan', + 'Palau' = 'Palau', + 'Palestinian Territory, Occupied' = 'Palestinian Territory, Occupied', + 'Panama' = 'Panama', + 'Papua New Guinea' = 'Papua New Guinea', + 'Paraguay' = 'Paraguay', + 'Peru' = 'Peru', + 'Philippines' = 'Philippines', + 'Pitcairn' = 'Pitcairn', + 'Poland' = 'Poland', + 'Portugal' = 'Portugal', + 'Puerto Rico' = 'Puerto Rico', + 'Qatar' = 'Qatar', + 'Reunion' = 'Reunion', + 'Romania' = 'Romania', + 'Russian Federation' = 'Russian Federation', + 'RWANDA' = 'RWANDA', + 'Saint Helena' = 'Saint Helena', + 'Saint Kitts and Nevis' = 'Saint Kitts and Nevis', + 'Saint Lucia' = 'Saint Lucia', + 'Saint Pierre and Miquelon' = 'Saint Pierre and Miquelon', + 'Saint Vincent and the Grenadines' = 'Saint Vincent and the Grenadines', + 'Samoa' = 'Samoa', + 'San Marino' = 'San Marino', + 'Sao Tome and Principe' = 'Sao Tome and Principe', + 'Saudi Arabia' = 'Saudi Arabia', + 'Senegal' = 'Senegal', + 'Serbia and Montenegro' = 'Serbia and Montenegro', + 'Seychelles' = 'Seychelles', + 'Sierra Leone' = 'Sierra Leone', + 'Singapore' = 'Singapore', + 'Slovakia' = 'Slovakia', + 'Slovenia' = 'Slovenia', + 'Solomon Islands' = 'Solomon Islands', + 'Somalia' = 'Somalia', + 'South Africa' = 'South Africa', + 'South Georgia and the South Sandwich Islands' = 'South Georgia and the South Sandwich Islands', + 'Spain' = 'Spain', + 'Sri Lanka' = 'Sri Lanka', + 'Sudan' = 'Sudan', + 'Suriname' = 'Suriname', + 'Svalbard and Jan Mayen' = 'Svalbard and Jan Mayen', + 'Swaziland' = 'Swaziland', + 'Sweden' = 'Sweden', + 'Switzerland' = 'Switzerland', + 'Syrian Arab Republic' = 'Syrian Arab Republic', + 'Taiwan, Province of China' = 'Taiwan, Province of China', + 'Tajikistan' = 'Tajikistan', + 'Tanzania, United Republic of' = 'Tanzania, United Republic of', + 'Thailand' = 'Thailand', + 'Timor-Leste' = 'Timor-Leste', + 'Togo' = 'Togo', + 'Tokelau' = 'Tokelau', + 'Tonga' = 'Tonga', + 'Trinidad and Tobago' = 'Trinidad and Tobago', + 'Tunisia' = 'Tunisia', + 'Turkey' = 'Turkey', + 'Turkmenistan' = 'Turkmenistan', + 'Turks and Caicos Islands' = 'Turks and Caicos Islands', + 'Tuvalu' = 'Tuvalu', + 'Uganda' = 'Uganda', + 'Ukraine' = 'Ukraine', + 'United Arab Emirates' = 'United Arab Emirates', + 'United Kingdom' = 'United Kingdom', + 'United States' = 'United States', + 'United States Minor Outlying Islands' = 'United States Minor Outlying Islands', + 'Uruguay' = 'Uruguay', + 'Uzbekistan' = 'Uzbekistan', + 'Vanuatu' = 'Vanuatu', + 'Venezuela' = 'Venezuela', + 'Viet Nam' = 'Viet Nam', + 'Virgin Islands, British' = 'Virgin Islands, British', + 'Virgin Islands, U.S.' = 'Virgin Islands, U.S.', + 'Wallis and Futuna' = 'Wallis and Futuna', + 'Western Sahara' = 'Western Sahara', + 'Yemen' = 'Yemen', + 'Zambia' = 'Zambia', + 'Zimbabwe' = 'Zimbabwe', +} + +export default Countries; diff --git a/Common/Types/Database/AccessControls/AccessControl.ts b/Common/Types/Database/AccessControls/AccessControl.ts new file mode 100644 index 0000000000..81f238c822 --- /dev/null +++ b/Common/Types/Database/AccessControls/AccessControl.ts @@ -0,0 +1,7 @@ +export default interface AccessControl { + create: boolean; + readAsItem: boolean; + readAsList: boolean; + update: boolean; + delete: boolean; +} diff --git a/Common/Types/Database/AccessControls/Admin/AdminColumnPermissions.ts b/Common/Types/Database/AccessControls/Admin/AdminColumnPermissions.ts new file mode 100644 index 0000000000..4eb424005b --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/AdminColumnPermissions.ts @@ -0,0 +1,27 @@ +import BaseModel from '../../../../Models/BaseModel'; +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + if (accessControl.create) { + baseModel.addAdminCreateableColumn(propertyKey); + } + + if (accessControl.delete) { + baseModel.addAdminDeleteableColumn(propertyKey); + } + + if (accessControl.readAsItem) { + baseModel.addAdminReadableAsItemColumn(propertyKey); + } + + if (accessControl.readAsList) { + baseModel.addAdminReadableAsListColumn(propertyKey); + } + + if (accessControl.update) { + baseModel.addAdminUpdateableColumn(propertyKey); + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/AdminRecordPermissions.ts b/Common/Types/Database/AccessControls/Admin/AdminRecordPermissions.ts new file mode 100644 index 0000000000..9237b3c287 --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/AdminRecordPermissions.ts @@ -0,0 +1,25 @@ +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (ctr: Function) => { + if (accessControl.create) { + ctr.prototype.canAdminCreateRecord = true; + } + + if (accessControl.readAsItem) { + ctr.prototype.canAdminReadItemRecord = true; + } + + if (accessControl.readAsList) { + ctr.prototype.canAdminReadListRecord = true; + } + + if (accessControl.update) { + ctr.prototype.canAdminUpdateRecord = true; + } + + if (accessControl.delete) { + ctr.prototype.canAdminDeleteRecord = true; + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminColumnCreateable.ts b/Common/Types/Database/AccessControls/Admin/IsAdminColumnCreateable.ts new file mode 100644 index 0000000000..b6172ce6c8 --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminColumnCreateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addAdminCreateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminColumnDeleteable.ts b/Common/Types/Database/AccessControls/Admin/IsAdminColumnDeleteable.ts new file mode 100644 index 0000000000..867143e07d --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminColumnDeleteable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addAdminDeleteableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminColumnReadableAsItem.ts b/Common/Types/Database/AccessControls/Admin/IsAdminColumnReadableAsItem.ts new file mode 100644 index 0000000000..2e0198f765 --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminColumnReadableAsItem.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addAdminReadableAsItemColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminColumnReadableAsList.ts b/Common/Types/Database/AccessControls/Admin/IsAdminColumnReadableAsList.ts new file mode 100644 index 0000000000..b731a1b411 --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminColumnReadableAsList.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addAdminReadableAsListColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminColumnUpdateable.ts b/Common/Types/Database/AccessControls/Admin/IsAdminColumnUpdateable.ts new file mode 100644 index 0000000000..a352f42c43 --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminColumnUpdateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addAdminUpdateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminRecordCreateable.ts b/Common/Types/Database/AccessControls/Admin/IsAdminRecordCreateable.ts new file mode 100644 index 0000000000..7719e95913 --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminRecordCreateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canAdminCreateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminRecordDeleteable.ts b/Common/Types/Database/AccessControls/Admin/IsAdminRecordDeleteable.ts new file mode 100644 index 0000000000..9bf69e506f --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminRecordDeleteable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canAdminDeleteRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminRecordReadableAsItem.ts b/Common/Types/Database/AccessControls/Admin/IsAdminRecordReadableAsItem.ts new file mode 100644 index 0000000000..d0a2e63add --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminRecordReadableAsItem.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canAdminReadItemRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminRecordReadableAsList.ts b/Common/Types/Database/AccessControls/Admin/IsAdminRecordReadableAsList.ts new file mode 100644 index 0000000000..1591976fbb --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminRecordReadableAsList.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canAdminReadListRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Admin/IsAdminRecordUpdateable.ts b/Common/Types/Database/AccessControls/Admin/IsAdminRecordUpdateable.ts new file mode 100644 index 0000000000..9f7b295591 --- /dev/null +++ b/Common/Types/Database/AccessControls/Admin/IsAdminRecordUpdateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canAdminUpdateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberColumnCreateable.ts b/Common/Types/Database/AccessControls/Member/IsMemberColumnCreateable.ts new file mode 100644 index 0000000000..8d142a2ba4 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberColumnCreateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addMemberCreateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberColumnDeleteable.ts b/Common/Types/Database/AccessControls/Member/IsMemberColumnDeleteable.ts new file mode 100644 index 0000000000..7955c04b02 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberColumnDeleteable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addMemberDeleteableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberColumnReadableAsItem.ts b/Common/Types/Database/AccessControls/Member/IsMemberColumnReadableAsItem.ts new file mode 100644 index 0000000000..2e0198f765 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberColumnReadableAsItem.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addAdminReadableAsItemColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberColumnReadableAsList.ts b/Common/Types/Database/AccessControls/Member/IsMemberColumnReadableAsList.ts new file mode 100644 index 0000000000..b731a1b411 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberColumnReadableAsList.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addAdminReadableAsListColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberColumnUpdateable.ts b/Common/Types/Database/AccessControls/Member/IsMemberColumnUpdateable.ts new file mode 100644 index 0000000000..3f2ef27457 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberColumnUpdateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addMemberUpdateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberRecordCreateable.ts b/Common/Types/Database/AccessControls/Member/IsMemberRecordCreateable.ts new file mode 100644 index 0000000000..f9678f6ab0 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberRecordCreateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canMemberCreateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberRecordDeleteable.ts b/Common/Types/Database/AccessControls/Member/IsMemberRecordDeleteable.ts new file mode 100644 index 0000000000..4299c6d725 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberRecordDeleteable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canMemberDeleteRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberRecordReadableAsItem.ts b/Common/Types/Database/AccessControls/Member/IsMemberRecordReadableAsItem.ts new file mode 100644 index 0000000000..70a2da1b75 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberRecordReadableAsItem.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canMemberReadItemRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberRecordReadableAsList.ts b/Common/Types/Database/AccessControls/Member/IsMemberRecordReadableAsList.ts new file mode 100644 index 0000000000..6ccec812c1 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberRecordReadableAsList.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canMemberReadListRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/IsMemberRecordUpdateable.ts b/Common/Types/Database/AccessControls/Member/IsMemberRecordUpdateable.ts new file mode 100644 index 0000000000..4297084ca3 --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/IsMemberRecordUpdateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canMemberUpdateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/MemberColumnPermissions.ts b/Common/Types/Database/AccessControls/Member/MemberColumnPermissions.ts new file mode 100644 index 0000000000..c2a1aab5fb --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/MemberColumnPermissions.ts @@ -0,0 +1,27 @@ +import BaseModel from '../../../../Models/BaseModel'; +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + if (accessControl.create) { + baseModel.addMemberCreateableColumn(propertyKey); + } + + if (accessControl.delete) { + baseModel.addMemberDeleteableColumn(propertyKey); + } + + if (accessControl.readAsItem) { + baseModel.addMemberReadableAsItemColumn(propertyKey); + } + + if (accessControl.readAsList) { + baseModel.addMemberReadableAsListColumn(propertyKey); + } + + if (accessControl.update) { + baseModel.addMemberUpdateableColumn(propertyKey); + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Member/MemberRecordPermissions.ts b/Common/Types/Database/AccessControls/Member/MemberRecordPermissions.ts new file mode 100644 index 0000000000..02b0fb413c --- /dev/null +++ b/Common/Types/Database/AccessControls/Member/MemberRecordPermissions.ts @@ -0,0 +1,25 @@ +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (ctr: Function) => { + if (accessControl.create) { + ctr.prototype.canMemberCreateRecord = true; + } + + if (accessControl.readAsItem) { + ctr.prototype.canMemberReadItemRecord = true; + } + + if (accessControl.readAsList) { + ctr.prototype.canMemberReadListRecord = true; + } + + if (accessControl.update) { + ctr.prototype.canMemberUpdateRecord = true; + } + + if (accessControl.delete) { + ctr.prototype.canMemberDeleteRecord = true; + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerColumnCreateable.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnCreateable.ts new file mode 100644 index 0000000000..c607da0126 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnCreateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addOwnerCreateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerColumnDeleteable.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnDeleteable.ts new file mode 100644 index 0000000000..f1e7f5b294 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnDeleteable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addOwnerDeleteableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerColumnReadableAsItem.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnReadableAsItem.ts new file mode 100644 index 0000000000..7b0e616079 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnReadableAsItem.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addOwnerReadableAsItemColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerColumnReadableAsList.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnReadableAsList.ts new file mode 100644 index 0000000000..c609036d39 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnReadableAsList.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addOwnerReadableAsListColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerColumnUpdateable.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnUpdateable.ts new file mode 100644 index 0000000000..7975a59269 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerColumnUpdateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addOwnerUpdateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerRecordCreateable.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordCreateable.ts new file mode 100644 index 0000000000..7799e869a0 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordCreateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canOwnerCreateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerRecordDeleteable.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordDeleteable.ts new file mode 100644 index 0000000000..70d626bd83 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordDeleteable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canOwnerDeleteRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerRecordReadableAsItem.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordReadableAsItem.ts new file mode 100644 index 0000000000..25742a4e89 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordReadableAsItem.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canOwnerReadItemRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerRecordReadableAsList.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordReadableAsList.ts new file mode 100644 index 0000000000..04f279bf12 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordReadableAsList.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canOwnerReadListRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/IsOwnerRecordUpdateable.ts b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordUpdateable.ts new file mode 100644 index 0000000000..0d6e3ddbc7 --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/IsOwnerRecordUpdateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canOwnerUpdateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/OwnerColumnPermissions.ts b/Common/Types/Database/AccessControls/Owner/OwnerColumnPermissions.ts new file mode 100644 index 0000000000..c1bc2e142d --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/OwnerColumnPermissions.ts @@ -0,0 +1,27 @@ +import BaseModel from '../../../../Models/BaseModel'; +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + if (accessControl.create) { + baseModel.addOwnerCreateableColumn(propertyKey); + } + + if (accessControl.delete) { + baseModel.addOwnerDeleteableColumn(propertyKey); + } + + if (accessControl.readAsItem) { + baseModel.addOwnerReadableAsItemColumn(propertyKey); + } + + if (accessControl.readAsList) { + baseModel.addOwnerReadableAsListColumn(propertyKey); + } + + if (accessControl.update) { + baseModel.addOwnerUpdateableColumn(propertyKey); + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Owner/OwnerRecordPermissions.ts b/Common/Types/Database/AccessControls/Owner/OwnerRecordPermissions.ts new file mode 100644 index 0000000000..30321f6d6c --- /dev/null +++ b/Common/Types/Database/AccessControls/Owner/OwnerRecordPermissions.ts @@ -0,0 +1,25 @@ +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (ctr: Function) => { + if (accessControl.create) { + ctr.prototype.canOwnerCreateRecord = true; + } + + if (accessControl.readAsItem) { + ctr.prototype.canOwnerReadItemRecord = true; + } + + if (accessControl.readAsList) { + ctr.prototype.canOwnerReadListRecord = true; + } + + if (accessControl.update) { + ctr.prototype.canOwnerUpdateRecord = true; + } + + if (accessControl.delete) { + ctr.prototype.canOwnerDeleteRecord = true; + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicColumnCreateable.ts b/Common/Types/Database/AccessControls/Public/IsPublicColumnCreateable.ts new file mode 100644 index 0000000000..07506ccdcf --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicColumnCreateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addPublicCreateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicColumnDeleteable.ts b/Common/Types/Database/AccessControls/Public/IsPublicColumnDeleteable.ts new file mode 100644 index 0000000000..22c839f7e3 --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicColumnDeleteable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addPublicDeleteableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicColumnReadableAsItem.ts b/Common/Types/Database/AccessControls/Public/IsPublicColumnReadableAsItem.ts new file mode 100644 index 0000000000..be6ed581fe --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicColumnReadableAsItem.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addPublicReadableAsItemColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicColumnReadableAsList.ts b/Common/Types/Database/AccessControls/Public/IsPublicColumnReadableAsList.ts new file mode 100644 index 0000000000..ddb9f2a6f9 --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicColumnReadableAsList.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addPublicReadableAsListColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicColumnUpdateable.ts b/Common/Types/Database/AccessControls/Public/IsPublicColumnUpdateable.ts new file mode 100644 index 0000000000..b4cc16931a --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicColumnUpdateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addPublicUpdateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicRecordCreateable.ts b/Common/Types/Database/AccessControls/Public/IsPublicRecordCreateable.ts new file mode 100644 index 0000000000..a681f6c835 --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicRecordCreateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canPublicCreateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicRecordDeleteable.ts b/Common/Types/Database/AccessControls/Public/IsPublicRecordDeleteable.ts new file mode 100644 index 0000000000..25e862833b --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicRecordDeleteable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canPublicDeleteRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicRecordReadableAsItem.ts b/Common/Types/Database/AccessControls/Public/IsPublicRecordReadableAsItem.ts new file mode 100644 index 0000000000..2404e8d11d --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicRecordReadableAsItem.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canPublicReadItemRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicRecordReadableAsList.ts b/Common/Types/Database/AccessControls/Public/IsPublicRecordReadableAsList.ts new file mode 100644 index 0000000000..5f3933fc95 --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicRecordReadableAsList.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canPublicReadListRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/IsPublicRecordUpdateable.ts b/Common/Types/Database/AccessControls/Public/IsPublicRecordUpdateable.ts new file mode 100644 index 0000000000..88111b9d29 --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/IsPublicRecordUpdateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canPublicUpdateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/PublicColumnPermissions.ts b/Common/Types/Database/AccessControls/Public/PublicColumnPermissions.ts new file mode 100644 index 0000000000..1e3f48313b --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/PublicColumnPermissions.ts @@ -0,0 +1,27 @@ +import BaseModel from '../../../../Models/BaseModel'; +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + if (accessControl.create) { + baseModel.addPublicCreateableColumn(propertyKey); + } + + if (accessControl.delete) { + baseModel.addPublicDeleteableColumn(propertyKey); + } + + if (accessControl.readAsItem) { + baseModel.addPublicReadableAsItemColumn(propertyKey); + } + + if (accessControl.readAsList) { + baseModel.addPublicReadableAsListColumn(propertyKey); + } + + if (accessControl.update) { + baseModel.addPublicUpdateableColumn(propertyKey); + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Public/PublicRecordPermissions.ts b/Common/Types/Database/AccessControls/Public/PublicRecordPermissions.ts new file mode 100644 index 0000000000..2e6cb139ea --- /dev/null +++ b/Common/Types/Database/AccessControls/Public/PublicRecordPermissions.ts @@ -0,0 +1,25 @@ +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (ctr: Function) => { + if (accessControl.create) { + ctr.prototype.canPublicCreateRecord = true; + } + + if (accessControl.readAsItem) { + ctr.prototype.canPublicReadItemRecord = true; + } + + if (accessControl.readAsList) { + ctr.prototype.canPublicReadListRecord = true; + } + + if (accessControl.update) { + ctr.prototype.canPublicUpdateRecord = true; + } + + if (accessControl.delete) { + ctr.prototype.canPublicDeleteRecord = true; + } + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserColumnCreateable.ts b/Common/Types/Database/AccessControls/User/IsUserColumnCreateable.ts new file mode 100644 index 0000000000..be92546af7 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserColumnCreateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addUserCreateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserColumnDeleteable.ts b/Common/Types/Database/AccessControls/User/IsUserColumnDeleteable.ts new file mode 100644 index 0000000000..e10bedc5c1 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserColumnDeleteable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addUserDeleteableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserColumnReadableAsItem.ts b/Common/Types/Database/AccessControls/User/IsUserColumnReadableAsItem.ts new file mode 100644 index 0000000000..2e5e922fc6 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserColumnReadableAsItem.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addUserReadableAsItemColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserColumnReadableAsList.ts b/Common/Types/Database/AccessControls/User/IsUserColumnReadableAsList.ts new file mode 100644 index 0000000000..7d179041f6 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserColumnReadableAsList.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addUserReadableAsListColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserColumnUpdateable.ts b/Common/Types/Database/AccessControls/User/IsUserColumnUpdateable.ts new file mode 100644 index 0000000000..0c043800d8 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserColumnUpdateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addUserUpdateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserRecordCreateable.ts b/Common/Types/Database/AccessControls/User/IsUserRecordCreateable.ts new file mode 100644 index 0000000000..08c9f9cba5 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserRecordCreateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canUserCreateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserRecordDeleteable.ts b/Common/Types/Database/AccessControls/User/IsUserRecordDeleteable.ts new file mode 100644 index 0000000000..809517f787 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserRecordDeleteable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canUserDeleteRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserRecordReadableAsItem.ts b/Common/Types/Database/AccessControls/User/IsUserRecordReadableAsItem.ts new file mode 100644 index 0000000000..1eab04d1cf --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserRecordReadableAsItem.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canUserReadItemRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserRecordReadableAsList.ts b/Common/Types/Database/AccessControls/User/IsUserRecordReadableAsList.ts new file mode 100644 index 0000000000..3a4c621615 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserRecordReadableAsList.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canUserReadListRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/User/IsUserRecordUpdateable.ts b/Common/Types/Database/AccessControls/User/IsUserRecordUpdateable.ts new file mode 100644 index 0000000000..4ee94f9dd8 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/IsUserRecordUpdateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canUserUpdateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/User/UserColumnPermissions.ts b/Common/Types/Database/AccessControls/User/UserColumnPermissions.ts new file mode 100644 index 0000000000..15661f6217 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/UserColumnPermissions.ts @@ -0,0 +1,27 @@ +import BaseModel from '../../../../Models/BaseModel'; +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + if (accessControl.create) { + baseModel.addUserCreateableColumn(propertyKey); + } + + if (accessControl.delete) { + baseModel.addUserDeleteableColumn(propertyKey); + } + + if (accessControl.readAsItem) { + baseModel.addUserReadableAsItemColumn(propertyKey); + } + + if (accessControl.readAsList) { + baseModel.addUserReadableAsListColumn(propertyKey); + } + + if (accessControl.update) { + baseModel.addUserUpdateableColumn(propertyKey); + } + }; +}; diff --git a/Common/Types/Database/AccessControls/User/UserRecordPermissions.ts b/Common/Types/Database/AccessControls/User/UserRecordPermissions.ts new file mode 100644 index 0000000000..6efb28b084 --- /dev/null +++ b/Common/Types/Database/AccessControls/User/UserRecordPermissions.ts @@ -0,0 +1,25 @@ +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (ctr: Function) => { + if (accessControl.create) { + ctr.prototype.canUserCreateRecord = true; + } + + if (accessControl.readAsItem) { + ctr.prototype.canUserReadItemRecord = true; + } + + if (accessControl.readAsList) { + ctr.prototype.canUserReadListRecord = true; + } + + if (accessControl.update) { + ctr.prototype.canUserUpdateRecord = true; + } + + if (accessControl.delete) { + ctr.prototype.canUserDeleteRecord = true; + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerColumnCreateable.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnCreateable.ts new file mode 100644 index 0000000000..8f359d1090 --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnCreateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addViewerCreateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerColumnDeleteable.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnDeleteable.ts new file mode 100644 index 0000000000..b632b8afd9 --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnDeleteable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addViewerDeleteableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerColumnReadableAsItem.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnReadableAsItem.ts new file mode 100644 index 0000000000..99b5e357e9 --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnReadableAsItem.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addViewerReadableAsItemColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerColumnReadableAsList.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnReadableAsList.ts new file mode 100644 index 0000000000..86482e2728 --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnReadableAsList.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addViewerReadableAsListColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerColumnUpdateable.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnUpdateable.ts new file mode 100644 index 0000000000..6cd65b467f --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerColumnUpdateable.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addViewerUpdateableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerRecordCreateable.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordCreateable.ts new file mode 100644 index 0000000000..77f6b399a6 --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordCreateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canViewerCreateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerRecordDeleteable.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordDeleteable.ts new file mode 100644 index 0000000000..c64f72365e --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordDeleteable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canViewerDeleteRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerRecordReadableAsItem.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordReadableAsItem.ts new file mode 100644 index 0000000000..baaa9913c2 --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordReadableAsItem.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canViewerReadItemRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerRecordReadableAsList.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordReadableAsList.ts new file mode 100644 index 0000000000..c08211b6ba --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordReadableAsList.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canViewerReadListRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/IsViewerRecordUpdateable.ts b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordUpdateable.ts new file mode 100644 index 0000000000..a9372f3f0e --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/IsViewerRecordUpdateable.ts @@ -0,0 +1,5 @@ +export default () => { + return (ctr: Function) => { + ctr.prototype.canViewerUpdateRecord = true; + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/ViewerColumnPermissions.ts b/Common/Types/Database/AccessControls/Viewer/ViewerColumnPermissions.ts new file mode 100644 index 0000000000..336575f3ab --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/ViewerColumnPermissions.ts @@ -0,0 +1,27 @@ +import BaseModel from '../../../../Models/BaseModel'; +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + if (accessControl.create) { + baseModel.addViewerCreateableColumn(propertyKey); + } + + if (accessControl.delete) { + baseModel.addViewerDeleteableColumn(propertyKey); + } + + if (accessControl.readAsItem) { + baseModel.addViewerReadableAsItemColumn(propertyKey); + } + + if (accessControl.readAsList) { + baseModel.addViewerReadableAsListColumn(propertyKey); + } + + if (accessControl.update) { + baseModel.addViewerUpdateableColumn(propertyKey); + } + }; +}; diff --git a/Common/Types/Database/AccessControls/Viewer/ViewerRecordPermissions.ts b/Common/Types/Database/AccessControls/Viewer/ViewerRecordPermissions.ts new file mode 100644 index 0000000000..e651c1c052 --- /dev/null +++ b/Common/Types/Database/AccessControls/Viewer/ViewerRecordPermissions.ts @@ -0,0 +1,25 @@ +import AccessControl from '../AccessControl'; + +export default (accessControl: AccessControl) => { + return (ctr: Function) => { + if (accessControl.create) { + ctr.prototype.canViewerCreateRecord = true; + } + + if (accessControl.readAsItem) { + ctr.prototype.canViewerReadItemRecord = true; + } + + if (accessControl.readAsList) { + ctr.prototype.canViewerReadListRecord = true; + } + + if (accessControl.update) { + ctr.prototype.canViewerUpdateRecord = true; + } + + if (accessControl.delete) { + ctr.prototype.canViewerDeleteRecord = true; + } + }; +}; diff --git a/Common/Types/Database/ColumnLength.ts b/Common/Types/Database/ColumnLength.ts index 06c51060f2..37c58e7146 100644 --- a/Common/Types/Database/ColumnLength.ts +++ b/Common/Types/Database/ColumnLength.ts @@ -8,6 +8,7 @@ enum ColumnLength { ObjectID = 50, ShortURL = 100, ShortText = 100, + HashedString = 64, Phone = 30, OTP = 8, } diff --git a/Common/Types/Database/ColumnType.ts b/Common/Types/Database/ColumnType.ts index 0abb4bf5b8..17f3bf6eb2 100644 --- a/Common/Types/Database/ColumnType.ts +++ b/Common/Types/Database/ColumnType.ts @@ -1,6 +1,7 @@ enum ColumnType { Version = 'varchar', Phone = 'varchar', + HashedString = 'varchar', Password = 'varchar', Email = 'varchar', Slug = 'varchar', diff --git a/Common/Types/Database/EncryptedColumnDecorator.ts b/Common/Types/Database/EncryptedColumn.ts similarity index 100% rename from Common/Types/Database/EncryptedColumnDecorator.ts rename to Common/Types/Database/EncryptedColumn.ts diff --git a/Common/Types/Database/HashedColumn.ts b/Common/Types/Database/HashedColumn.ts new file mode 100644 index 0000000000..57cb4960e2 --- /dev/null +++ b/Common/Types/Database/HashedColumn.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addHashedColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/ProjectColumn.ts b/Common/Types/Database/ProjectColumn.ts new file mode 100644 index 0000000000..4493875460 --- /dev/null +++ b/Common/Types/Database/ProjectColumn.ts @@ -0,0 +1,5 @@ +export default (columnName: string) => { + return (ctr: Function) => { + ctr.prototype.projectIdColumn = columnName; + }; +}; diff --git a/Common/Types/Database/RequiredColumnDecorator.ts b/Common/Types/Database/RequiredColumn.ts similarity index 100% rename from Common/Types/Database/RequiredColumnDecorator.ts rename to Common/Types/Database/RequiredColumn.ts diff --git a/Common/Types/Database/SlugifyColumnDecorator.ts b/Common/Types/Database/SlugifyColumn.ts similarity index 100% rename from Common/Types/Database/SlugifyColumnDecorator.ts rename to Common/Types/Database/SlugifyColumn.ts diff --git a/Common/Types/Database/TableColumn.ts b/Common/Types/Database/TableColumn.ts new file mode 100644 index 0000000000..958da0b201 --- /dev/null +++ b/Common/Types/Database/TableColumn.ts @@ -0,0 +1,8 @@ +import BaseModel from '../../Models/BaseModel'; + +export default () => { + return (target: Object, propertyKey: string) => { + const baseModel: BaseModel = target as BaseModel; + baseModel.addTableColumn(propertyKey); + }; +}; diff --git a/Common/Types/Database/UniqueColumnDecorator.ts b/Common/Types/Database/UniqueColumn.ts similarity index 100% rename from Common/Types/Database/UniqueColumnDecorator.ts rename to Common/Types/Database/UniqueColumn.ts diff --git a/Common/Types/Date.ts b/Common/Types/Date.ts index d2f09686a1..23aefb7729 100644 --- a/Common/Types/Date.ts +++ b/Common/Types/Date.ts @@ -42,6 +42,38 @@ export default class OneUptimeDate { .toDate(); } + public static getOneMinAfter(): Date { + return this.getSomeMinutesAfter(new PositiveNumber(1)); + } + + public static getOneDayAfter(): Date { + return this.getSomeDaysAfter(new PositiveNumber(1)); + } + + public static getSomeMinutesAfter(minutes: PositiveNumber): Date { + return this.getCurrentMomentDate() + .add(minutes.toNumber(), 'minutes') + .toDate(); + } + + public static getSomeHoursAfter(hours: PositiveNumber): Date { + return this.getCurrentMomentDate() + .add(hours.toNumber(), 'hours') + .toDate(); + } + + public static getSomeDaysAfter(days: PositiveNumber): Date { + return this.getCurrentMomentDate() + .add(days.toNumber(), 'days') + .toDate(); + } + + public static getSomeSecondsAfter(seconds: PositiveNumber): Date { + return this.getCurrentMomentDate() + .add(seconds.toNumber(), 'days') + .toDate(); + } + public static momentToDate(moment: moment.Moment): Date { return moment.toDate(); } diff --git a/Common/Types/Email/EmailSubjects.ts b/Common/Types/Email/EmailSubjects.ts new file mode 100644 index 0000000000..930962a3a0 --- /dev/null +++ b/Common/Types/Email/EmailSubjects.ts @@ -0,0 +1,26 @@ +import Dictionary from '../Dictionary'; +import BadOperationException from '../Exception/BadOperationException'; +import EmailTemplateType from './EmailTemplateType'; + +class EmailSubjects { + private subjectMap: Dictionary = {}; + + public constructor() { + this.subjectMap[EmailTemplateType.SIGNUP_WELCOME_EMAIL] = + 'Welcome to OneUptime.'; + this.subjectMap[EmailTemplateType.SIGNUP_VERIFICATION_EMAIL] = + 'Welcome to OneUptime. Please verify your email.'; + } + + public getSubjectByType(emailTemplateType: EmailTemplateType): string { + if (this.subjectMap[emailTemplateType]) { + return this.subjectMap[emailTemplateType] as string; + } + + throw new BadOperationException( + `Subject for ${emailTemplateType} not found.` + ); + } +} + +export default new EmailSubjects(); diff --git a/Common/Types/Email/EmailTemplateType.ts b/Common/Types/Email/EmailTemplateType.ts index 5fb9e0d403..8c01a237d7 100644 --- a/Common/Types/Email/EmailTemplateType.ts +++ b/Common/Types/Email/EmailTemplateType.ts @@ -1,5 +1,6 @@ enum EmailTemplateType { - SIGNUP_EMAIL = 'Signup Email', + SIGNUP_WELCOME_EMAIL = 'SignupWelcomeEmail', + SIGNUP_VERIFICATION_EMAIL = 'SignupVerificationEmail', SUBSCRIBER_INCIDENT_CREATED = 'Subscriber Incident Created', SUBSCRIBER_INCIDENT_ACKNOWLEDGED = 'Subscriber Incident Acknowledged', SUBSCRIBER_INCIDENT_RESOLVED = 'Subscriber Incident Resolved', diff --git a/Common/Types/EncryptionAlgorithm.ts b/Common/Types/EncryptionAlgorithm.ts new file mode 100644 index 0000000000..5fe2e0796e --- /dev/null +++ b/Common/Types/EncryptionAlgorithm.ts @@ -0,0 +1,5 @@ +enum EncryptionAlgorithm { + SHA256 = 'SHA-256', +} + +export default EncryptionAlgorithm; diff --git a/Common/Types/Exception/BadOperationException.ts b/Common/Types/Exception/BadOperationException.ts new file mode 100644 index 0000000000..29614de92f --- /dev/null +++ b/Common/Types/Exception/BadOperationException.ts @@ -0,0 +1,8 @@ +import Exception from './Exception'; +import ExceptionCode from './ExceptionCode'; + +export default class BadOperationException extends Exception { + public constructor(message: string) { + super(ExceptionCode.BadOperationException, message); + } +} diff --git a/Common/Types/Exception/BadRequestException.ts b/Common/Types/Exception/BadRequestException.ts new file mode 100644 index 0000000000..8463628dde --- /dev/null +++ b/Common/Types/Exception/BadRequestException.ts @@ -0,0 +1,8 @@ +import Exception from './Exception'; +import ExceptionCode from './ExceptionCode'; + +export default class BadRequestException extends Exception { + public constructor(message: string) { + super(ExceptionCode.BadDataException, message); + } +} diff --git a/Common/Types/Exception/ExceptionCode.ts b/Common/Types/Exception/ExceptionCode.ts index 135633b4e1..d3384e2db5 100644 --- a/Common/Types/Exception/ExceptionCode.ts +++ b/Common/Types/Exception/ExceptionCode.ts @@ -3,7 +3,9 @@ enum ExceptionCode { GeneralException = 1, APIException = 2, DatabaseNotConnected = 3, + BadOperationException = 5, BadDataException = 400, + BadRequestException = 400, } export default ExceptionCode; diff --git a/Common/Types/Exception/NotImplementedException.ts b/Common/Types/Exception/NotImplementedException.ts index e727b6b075..0bb13269ad 100644 --- a/Common/Types/Exception/NotImplementedException.ts +++ b/Common/Types/Exception/NotImplementedException.ts @@ -1,7 +1,7 @@ import Exception from './Exception'; import ExceptionCode from './ExceptionCode'; -export default class BadDataException extends Exception { +export default class NotImplementedException extends Exception { public constructor() { super( ExceptionCode.NotImplementedException, diff --git a/Common/Types/HashedString.ts b/Common/Types/HashedString.ts new file mode 100644 index 0000000000..4e0a35f36c --- /dev/null +++ b/Common/Types/HashedString.ts @@ -0,0 +1,102 @@ +import { FindOperator } from 'typeorm'; +import UUID from '../Utils/UUID'; +import DatabaseProperty from './Database/DatabaseProperty'; +import BadOperationException from './Exception/BadOperationException'; +import EncryptionAlgorithm from './EncryptionAlgorithm'; +import ObjectID from './ObjectID'; + +export default class HashedString extends DatabaseProperty { + private isHashed: boolean = false; + + private _value: string = ''; + public get value(): string { + return this._value; + } + public set value(v: string) { + this._value = v; + } + + public constructor(value: string, isValueHashed: boolean = false) { + super(); + this.value = value; + this.isHashed = isValueHashed; + } + + public override toString(): string { + return this.value; + } + + public static generate(): HashedString { + return new this(UUID.generate()); + } + + protected static override toDatabase( + _value: HashedString | FindOperator + ): string | null { + if (_value) { + return _value.toString(); + } + + return null; + } + + public isValueHashed(): boolean { + return this.isHashed; + } + + public async hashValue(encryptionSecret: ObjectID | null): Promise { + if (!this.value) { + return ''; + } + + if (this.isHashed) { + throw new BadOperationException('Value is alredy hashed'); + } + + const valueToHash: string = (encryptionSecret || '') + this.value; + this.isHashed = true; + + // encode as UTF-8 + const msgBuffer: Uint8Array = new TextEncoder().encode(valueToHash); + + // hash the message + const hashBuffer: ArrayBuffer = await crypto.subtle.digest( + EncryptionAlgorithm.SHA256, + msgBuffer + ); + + // convert ArrayBuffer to Array + const hashArray: Array = Array.from(new Uint8Array(hashBuffer)); + + // convert bytes to hex string + const hashHex: string = hashArray + .map((b: number) => { + return b.toString(16).padStart(2, '0'); + }) + .join(''); + this.value = hashHex; + return hashHex; + } + + public static async hashValue( + value: string, + encryptionSecret: ObjectID | null + ): Promise { + const hashstring: HashedString = new HashedString(value, false); + return await hashstring.hashValue(encryptionSecret); + } + + protected static override fromDatabase( + _value: string + ): HashedString | null { + if (_value) { + return new HashedString(_value, true); + } + + return null; + } + + public static fromString(value: string): HashedString { + return new HashedString(value, false); + } +} diff --git a/Common/Types/ObjectID.ts b/Common/Types/ObjectID.ts index 54337c5b54..80a93d1b3b 100644 --- a/Common/Types/ObjectID.ts +++ b/Common/Types/ObjectID.ts @@ -42,4 +42,8 @@ export default class ObjectID extends DatabaseProperty { return null; } + + public static fromString(id: string): ObjectID { + return new ObjectID(id); + } } diff --git a/Common/Types/Role.ts b/Common/Types/Role.ts index 5790e84f89..6b6b4b0f2c 100644 --- a/Common/Types/Role.ts +++ b/Common/Types/Role.ts @@ -3,6 +3,7 @@ enum Role { Administrator = 'Administrator', Member = 'Member', Viewer = 'Viewer', + Public = 'Public', } export const RoleArray: Array = [...new Set(Object.keys(Role))]; // Returns ["Owner", "Administrator"...] diff --git a/Common/Types/UserRole.ts b/Common/Types/UserRole.ts new file mode 100644 index 0000000000..b581e40916 --- /dev/null +++ b/Common/Types/UserRole.ts @@ -0,0 +1,31 @@ +import { JSONObject } from './JSON'; +import ObjectID from './ObjectID'; +import Role from './Role'; + +export default class UserRole { + public projectId!: ObjectID; + public userId!: ObjectID; + public role!: Role; + + public constructor(projectId: ObjectID, userId: ObjectID, role: Role) { + this.projectId = projectId; + this.userId = userId; + this.role = role; + } + + public toJSON(): JSONObject { + return { + userId: this.userId.toString(), + projectId: this.projectId.toString(), + role: this.role, + }; + } + + public static fromJSON(data: JSONObject): UserRole { + return new UserRole( + new ObjectID(data['projectId'] as string), + new ObjectID(data['userId'] as string), + data['role'] as Role + ); + } +} diff --git a/CommonServer/API/BaseAPI.ts b/CommonServer/API/BaseAPI.ts new file mode 100644 index 0000000000..49a598d6d0 --- /dev/null +++ b/CommonServer/API/BaseAPI.ts @@ -0,0 +1,187 @@ +import BaseModel from 'Common/Models/BaseModel'; +import DatabaseService from '../Services/DatabaseService'; +import Express, { + ExpressRequest, + ExpressResponse, + ExpressRouter, + OneUptimeRequest, +} from '../Utils/Express'; +import UserMiddleware from '../Middleware/UserAuthorization'; +import PositiveNumber from 'Common/Types/PositiveNumber'; +import BadRequestException from 'Common/Types/Exception/BadRequestException'; +import Response from '../Utils/Response'; +import ObjectID from 'Common/Types/ObjectID'; +import { JSONObject } from 'Common/Types/JSON'; + +export default class BaseAPI< + TBaseModel extends BaseModel, + TBaseService extends DatabaseService +> { + private entityName: string; + + public router: ExpressRouter; + private service: TBaseService; + + public constructor(type: { new (): TBaseModel }, service: TBaseService) { + this.entityName = type.name; + const router: ExpressRouter = Express.getRouter(); + + // Create + router.post( + `${this.entityName}/`, + UserMiddleware.getUserMiddleware, + this.createItem + ); + + // List + router.get( + `${this.entityName}/list`, + UserMiddleware.getUserMiddleware, + this.getList + ); + + // Get Item + router.get( + `${this.entityName}/id/:id`, + UserMiddleware.getUserMiddleware, + this.getItem + ); + + // Update + router.put( + `${this.entityName}/id/:id`, + UserMiddleware.getUserMiddleware, + this.updateItem + ); + + // Delete + router.delete( + `${this.entityName}/id/:id`, + UserMiddleware.getUserMiddleware, + this.deleteItem + ); + + this.router = router; + this.service = service; + } + + public async getList( + req: ExpressRequest, + res: ExpressResponse + ): Promise { + const oneuptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + + const skip: PositiveNumber = req.query['skip'] + ? new PositiveNumber(req.query['skip'] as string) + : new PositiveNumber(0); + + const limit: PositiveNumber = req.query['limit'] + ? new PositiveNumber(req.query['limit'] as string) + : new PositiveNumber(10); + + if (limit.toNumber() > 50) { + throw new BadRequestException('Limit should be less than 50'); + } + + const list: Array = await this.service.getListByRole( + oneuptimeRequest.role, + { + query: {}, + skip: skip, + limit: limit, + } + ); + + const count: PositiveNumber = await this.service.countBy({ + query: {}, + }); + + return Response.sendListResponse(req, res, list, count); + } + + public async getItem( + req: ExpressRequest, + res: ExpressResponse + ): Promise { + const oneuptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + + const objectId: ObjectID = new ObjectID(req.params['id'] as string); + + const item: BaseModel | null = await this.service.getItemByRole( + oneuptimeRequest.role, + { + query: { + _id: objectId.toString(), + }, + } + ); + + return Response.sendItemResponse(req, res, item?.toJSON() || {}); + } + + public async deleteItem( + req: ExpressRequest, + res: ExpressResponse + ): Promise { + const oneuptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + + const objectId: ObjectID = new ObjectID(req.params['id'] as string); + + await this.service.deleteByRole(oneuptimeRequest.role, { + query: { + _id: objectId.toString(), + }, + }); + + return Response.sendEmptyResponse(req, res); + } + + public async updateItem( + req: ExpressRequest, + res: ExpressResponse + ): Promise { + const oneuptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + const objectId: ObjectID = new ObjectID(req.params['id'] as string); + const body: JSONObject = req.body; + + const item: TBaseModel = BaseModel.fromJSON( + body['data'] as JSONObject + ); + + await this.service.updateByRole(oneuptimeRequest.role, { + query: { + _id: objectId.toString(), + }, + data: item, + }); + + return Response.sendEmptyResponse(req, res); + } + + public async createItem( + req: ExpressRequest, + res: ExpressResponse + ): Promise { + const oneuptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + const body: JSONObject = req.body; + + const item: TBaseModel = BaseModel.fromJSON( + body['data'] as JSONObject + ); + + const savedItem: BaseModel = await this.service.createByRole( + oneuptimeRequest.role, + { data: item } + ); + + return Response.sendItemResponse(req, res, savedItem); + } + + public getRouter(): ExpressRouter { + return this.router; + } + + public getEntityName(): string { + return this.entityName; + } +} diff --git a/CommonServer/API/Index.ts b/CommonServer/API/Index.ts index 77114920fb..ec808a8efe 100644 --- a/CommonServer/API/Index.ts +++ b/CommonServer/API/Index.ts @@ -1,5 +1,5 @@ -import version from './Version'; -import status from './Status'; +import version from './VersionAPI'; +import status from './StatusAPI'; import Express, { ExpressApplication } from '../Utils/Express'; const app: ExpressApplication = Express.getExpressApp(); diff --git a/CommonServer/API/Status.ts b/CommonServer/API/StatusAPI.ts similarity index 100% rename from CommonServer/API/Status.ts rename to CommonServer/API/StatusAPI.ts diff --git a/CommonServer/API/UserAPI.ts b/CommonServer/API/UserAPI.ts new file mode 100644 index 0000000000..e27aef84e5 --- /dev/null +++ b/CommonServer/API/UserAPI.ts @@ -0,0 +1,10 @@ +import User from 'Common/Models/User'; +import UserService from '../Services/UserService'; +import BaseAPI from './BaseAPI'; +import Service from '../Services/Index'; + +export default class UserAPI extends BaseAPI { + public constructor() { + super(User, Service.UserService); + } +} diff --git a/CommonServer/API/Version.ts b/CommonServer/API/VersionAPI.ts similarity index 100% rename from CommonServer/API/Version.ts rename to CommonServer/API/VersionAPI.ts diff --git a/CommonServer/Config.ts b/CommonServer/Config.ts index 085330ba07..cb1095a9c8 100644 --- a/CommonServer/Config.ts +++ b/CommonServer/Config.ts @@ -3,6 +3,10 @@ import ObjectID from 'Common/Types/ObjectID'; import Port from 'Common/Types/Port'; import Hostname from 'Common/Types/API/Hostname'; +export const DisableSignup: boolean = Boolean(process.env['DISABLE_SIGNUP']); + +export const IsSaaSService: boolean = Boolean(process.env['IS_SAAS_SERVICE']); + export const DatabaseHost: Hostname = new Hostname( process.env['DATABASE_HOST'] || '' ); @@ -17,7 +21,9 @@ export const DatabasePassword: string = process.env['DATABASE_PASSWORD'] || ''; export const DatabaseName: string = process.env['DATABASE_NAME'] || 'oneuptimedb'; -export const EncryptionSecret: string = process.env['ENCRYPTIOJN_SECRET'] || ''; +export const EncryptionSecret: ObjectID = new ObjectID( + process.env['ENCRYPTIOJN_SECRET'] || '' +); export const AirtableApiKey: string = process.env['AIRTABLE_API_KEY'] || ''; @@ -31,6 +37,10 @@ export const RealtimeHostname: Hostname = new Hostname( process.env['REALTIME_HOSTNAME'] || '' ); +export const MailHostname: Hostname = new Hostname( + process.env['MAIL_HOSTNAME'] || '' +); + export const DashboardApiHostname: Hostname = new Hostname( process.env['DASHBOARD_API_HOSTNAME'] || '' ); @@ -43,6 +53,18 @@ export const DataIngestorHostname: Hostname = new Hostname( process.env['DATA_INGESTOR_HOSTNAME'] || '' ); +export const AccountsHostname: Hostname = new Hostname( + process.env['ACCOUNTS_HOSTNAME'] || '' +); + +export const HomeHostname: Hostname = new Hostname( + process.env['HOME_HOSTNAME'] || '' +); + +export const DashboardHostname: Hostname = new Hostname( + process.env['DASHBOARD_HOSTNAME'] || '' +); + export const Env: string = process.env['NODE_ENV'] || ''; export const Version: string = process.env['npm_package_version'] || ''; diff --git a/CommonServer/Middleware/ClusterKeyAuthorization.ts b/CommonServer/Middleware/ClusterKeyAuthorization.ts index dcc608bb78..93d7a85606 100644 --- a/CommonServer/Middleware/ClusterKeyAuthorization.ts +++ b/CommonServer/Middleware/ClusterKeyAuthorization.ts @@ -5,12 +5,12 @@ import { NextFunction, } from '../Utils/Express'; -import { sendErrorResponse } from '../Utils/Response'; +import Response from '../Utils/Response'; import BadDataException from 'Common/Types/Exception/BadDataException'; import ObjectID from 'Common/Types/ObjectID'; export default class ClusterKeyAuthorization { - public static async isAuthorizedService( + public static async isAuthorizedServiceMiddleware( req: ExpressRequest, res: ExpressResponse, next: NextFunction @@ -27,7 +27,7 @@ export default class ClusterKeyAuthorization { } else if (req.body && req.body.clusterKey) { clusterKey = new ObjectID(req.body.clusterKey); } else { - return sendErrorResponse( + return Response.sendErrorResponse( req, res, new BadDataException('Cluster key not found.') @@ -37,7 +37,7 @@ export default class ClusterKeyAuthorization { const isAuthorized: boolean = clusterKey === CLUSTER_KEY; if (!isAuthorized) { - return sendErrorResponse( + return Response.sendErrorResponse( req, res, new BadDataException('Invalid cluster key provided') diff --git a/CommonServer/Middleware/ProbeAuthorization.ts b/CommonServer/Middleware/ProbeAuthorization.ts index 18b064cc15..7c91114808 100644 --- a/CommonServer/Middleware/ProbeAuthorization.ts +++ b/CommonServer/Middleware/ProbeAuthorization.ts @@ -1,6 +1,5 @@ import Services from '../Services/Index'; import ProbeServiceClass from '../Services/ProbeService'; -import { sendErrorResponse } from '../Utils/Response'; import BadDataException from 'Common/Types/Exception/BadDataException'; import Version from 'Common/Types/Version'; @@ -18,10 +17,10 @@ import Probe from 'Common/Models/Probe'; const ProbeService: ProbeServiceClass = Services.ProbeService; -export default { - async isAuthorizedProbe( +export default class ProbeMiddleware { + public static async isAuthorizedProbeMiddleware( req: ExpressRequest, - res: ExpressResponse, + _res: ExpressResponse, next: NextFunction ): Promise { let probeKey: ObjectID | undefined, @@ -42,11 +41,7 @@ export default { } if (!probeKey) { - return sendErrorResponse( - req, - res, - new BadDataException('Probe key not found.') - ); + throw new BadDataException('Probe key not found.'); } if (req.params && req.params['probeName']) { @@ -61,11 +56,7 @@ export default { } if (!probeName) { - return sendErrorResponse( - req, - res, - new BadDataException('Probe Name not found.') - ); + throw new BadDataException('Probe Name not found.'); } if (req.params && req.params['clusterKey']) { @@ -91,11 +82,7 @@ export default { } if (!probeVersion) { - return sendErrorResponse( - req, - res, - new BadDataException('Probe version not found.') - ); + throw new BadDataException('Probe version not found.'); } if (clusterKey && clusterKey === CLUSTER_KEY) { @@ -144,10 +131,8 @@ export default { } if (!probeId && (!clusterKey || clusterKey !== CLUSTER_KEY)) { - return sendErrorResponse( - req, - res, - new BadDataException('Probe key and probe name do not match.') + throw new BadDataException( + 'Probe key and probe name do not match.' ); } @@ -192,11 +177,7 @@ export default { const oneuptimeRequest: OneUptimeRequest = req as OneUptimeRequest; if (!probeId) { - return sendErrorResponse( - req, - res, - new BadDataException('Probe ID not found') - ); + throw new BadDataException('Probe ID not found'); } oneuptimeRequest.probe = { @@ -218,5 +199,5 @@ export default { } return next(); - }, -}; + } +} diff --git a/CommonServer/Middleware/ProjectAuthorization.ts b/CommonServer/Middleware/ProjectAuthorization.ts new file mode 100644 index 0000000000..91c8c8fc62 --- /dev/null +++ b/CommonServer/Middleware/ProjectAuthorization.ts @@ -0,0 +1,88 @@ +import ProjectServiceType from '../Services/ProjectService'; +import BadDataException from 'Common/Types/Exception/BadDataException'; +import ObjectID from 'Common/Types/ObjectID'; +import { + AuthorizationType, + ExpressRequest, + ExpressResponse, + NextFunction, + OneUptimeRequest, +} from '../Utils/Express'; +import Services from '../Services/Index'; +import PositiveNumber from 'Common/Types/PositiveNumber'; +import Role from 'Common/Types/Role'; + +const ProjectService: ProjectServiceType = Services.ProjectService; + +export default class ProjectMiddleware { + public static getProjectId(req: ExpressRequest): ObjectID | null { + let projectId: ObjectID | null = null; + if (req.params && req.params['projectId']) { + projectId = new ObjectID(req.params['projectId']); + } else if (req.query && req.query['projectId']) { + projectId = new ObjectID(req.query['projectId'] as string); + } else if (req.headers && req.headers['projectid']) { + // Header keys are automatically transformed to lowercase + projectId = new ObjectID(req.headers['projectid'] as string); + } else if (req.body && req.body.projectId) { + projectId = new ObjectID(req.body.projectId as string); + } + + return projectId; + } + + public static getApiKey(req: ExpressRequest): ObjectID | null { + let apiKey: ObjectID | null = null; + + if (req.query && req.query['apiKey']) { + apiKey = new ObjectID(req.query['apiKey'] as string); + } else if (req.headers && req.headers['apikey']) { + apiKey = new ObjectID(req.headers['apikey'] as string); + } else if (req.body && req.body.apiKey) { + apiKey = req.body.apiKey; + } + + return apiKey; + } + + public static hasApiKey(req: ExpressRequest): boolean { + return Boolean(this.getApiKey(req)); + } + + public static hasProjectID(req: ExpressRequest): boolean { + return Boolean(this.getProjectId(req)); + } + + public static async isValidProjectIdAndApiKeyMiddleware( + req: ExpressRequest, + _res: ExpressResponse, + next: NextFunction + ): Promise { + const projectId: ObjectID | null = this.getProjectId(req); + const apiKey: ObjectID | null = this.getApiKey(req); + + if (!projectId) { + throw new BadDataException('ProjectID not found in the request'); + } + + if (!apiKey) { + throw new BadDataException('ApiKey not found in the request'); + } + + const projectCount: PositiveNumber = await ProjectService.countBy({ + query: { + _id: projectId.toString(), + apiKey: apiKey, + }, + }); + + if (projectCount.toNumber() > 0) { + (req as OneUptimeRequest).authorizationType = AuthorizationType.API; + (req as OneUptimeRequest).role = Role.Administrator; + (req as OneUptimeRequest).projectId = projectId; + return next(); + } + + throw new BadDataException('Invalid Project ID or API Key'); + } +} diff --git a/CommonServer/Middleware/UserAuthorization.ts b/CommonServer/Middleware/UserAuthorization.ts new file mode 100644 index 0000000000..f73c00df09 --- /dev/null +++ b/CommonServer/Middleware/UserAuthorization.ts @@ -0,0 +1,97 @@ +import { + ExpressResponse, + ExpressRequest, + NextFunction, + OneUptimeRequest, + AuthorizationType, +} from '../Utils/Express'; +import Service from '../Services/Index'; +import UserServiceType from '../Services/UserService'; +import ProjectMiddleware from './ProjectAuthorization'; +import JSONWebToken from '../Utils/JsonWebToken'; +import ObjectID from 'Common/Types/ObjectID'; +import UserRole from 'Common/Types/UserRole'; + +const UserService: UserServiceType = Service.UserService; + +export default class UserMiddleware { + /* + * Description: Checking if user is authorized to access the page and decode jwt to get user data. + * Params: + * Param 1: req.headers-> {token} + * Returns: 401: User is unauthorized since unauthorized token was present. + */ + + public static getAccessToken(req: ExpressRequest): string | null { + let accessToken: string | null = null; + + if (req.headers['authorization']) { + accessToken = req.headers['authorization'] as string; + } + + if (req.query['accessToken']) { + accessToken = req.query['accessToken'] as string; + } + + if (accessToken?.includes(' ')) { + accessToken = accessToken.split(' ')[1] || ''; + } + + return accessToken; + } + + public static async getUserMiddleware( + req: ExpressRequest, + res: ExpressResponse, + next: NextFunction + ): Promise { + const projectId: ObjectID | null = ProjectMiddleware.getProjectId(req); + const oneuptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + + if (projectId) { + oneuptimeRequest.projectId = projectId; + + if (ProjectMiddleware.hasApiKey(req)) { + return await ProjectMiddleware.isValidProjectIdAndApiKeyMiddleware( + req, + res, + next + ); + } + } + + const accessToken: string | null = this.getAccessToken(req); + + if (!accessToken) { + oneuptimeRequest.authorizationType = AuthorizationType.Public; + return next(); + } + + oneuptimeRequest.userAuthorization = JSONWebToken.decode(accessToken); + + if (oneuptimeRequest.userAuthorization.isMasterAdmin) { + oneuptimeRequest.authorizationType = AuthorizationType.MasterAdmin; + } else { + oneuptimeRequest.authorizationType = AuthorizationType.User; + } + + UserService.updateOneBy({ + query: { + _id: oneuptimeRequest.userAuthorization.userId.toString(), + }, + data: { lastActive: Date.now() }, + }); + + const userRole: UserRole | undefined | null = + projectId && + oneuptimeRequest.userAuthorization.roles.find((role: UserRole) => { + return role.projectId.toString() === role.projectId.toString(); + }); + + if (userRole) { + oneuptimeRequest.role = userRole.role; + } + + return next(); + } +} diff --git a/CommonServer/Services/DatabaseService.ts b/CommonServer/Services/DatabaseService.ts index b7b8e76020..50e6f75d84 100644 --- a/CommonServer/Services/DatabaseService.ts +++ b/CommonServer/Services/DatabaseService.ts @@ -21,6 +21,11 @@ import PostgresDatabase from '../Infrastructure/PostgresDatabase'; import { DataSource, Repository } from 'typeorm'; import SortOrder from '../Types/DB/SortOrder'; import HardDeleteBy from '../Types/DB/HardDeleteBy'; +import { EncryptionSecret } from '../Config'; +import HashedString from 'Common/Types/HashedString'; +import UpdateByID from '../Types/DB/UpdateByID'; +import ObjectID from 'Common/Types/ObjectID'; +import Role from 'Common/Types/Role'; class DatabaseService { public entityName!: string; @@ -96,6 +101,18 @@ class DatabaseService { return data; } + protected async hash(data: TBaseModel): Promise { + for (const key of data.getHashedColumns().columns) { + if (!((data as any)[key] as HashedString).isValueHashed) { + await ((data as any)[key] as HashedString).hashValue( + EncryptionSecret + ); + } + } + + return data; + } + protected decrypt(data: TBaseModel): TBaseModel { const iv: Buffer = (data as any)['iv']; @@ -218,6 +235,9 @@ class DatabaseService { // Encrypt data data = this.encrypt(data); + // hash data + data = await this.hash(data); + try { if (data.getSlugifyColumn()) { (data as any)[data.getSaveSlugToColumn() as string] = @@ -271,6 +291,124 @@ class DatabaseService { return await this._deleteBy(deleteOneBy); } + public async deleteByRole( + role: Role, + deleteBy: DeleteBy + ): Promise { + if (role === Role.Administrator) { + return await this.deleteByForAdmin(deleteBy); + } + + if (role === Role.Member) { + return await this.deleteByForMember(deleteBy); + } + + if (role === Role.Public) { + return await this.deleteByForPublic(deleteBy); + } + + if (role === Role.Viewer) { + return await this.deleteByForViewer(deleteBy); + } + + if (role === Role.Owner) { + return await this.deleteByForOwner(deleteBy); + } + + throw new BadDataException(`Invalid role - ${role}`); + } + + public async updateByRole( + role: Role, + updateBy: UpdateBy + ): Promise { + if (role === Role.Administrator) { + await this.updateBy(updateBy); + } + + if (role === Role.Member) { + await this.updateBy(updateBy); + } + + if (role === Role.Public) { + await this.updateBy(updateBy); + } + + if (role === Role.Viewer) { + await this.updateBy(updateBy); + } + + if (role === Role.Owner) { + await this.updateBy(updateBy); + } + + throw new BadDataException(`Invalid role - ${role}`); + } + + public async createByRole( + role: Role, + createBy: CreateBy + ): Promise { + if (role === Role.Administrator) { + return await this.create({ + data: BaseModel.asAdminCreateable(createBy.data), + }); + } + + if (role === Role.Member) { + return await this.create({ + data: BaseModel.asMemberCreateable(createBy.data), + }); + } + + if (role === Role.Public) { + return await this.create({ + data: BaseModel.asPublicCreateable(createBy.data), + }); + } + + if (role === Role.Viewer) { + return await this.create({ + data: BaseModel.asViewerCreateable(createBy.data), + }); + } + + if (role === Role.Owner) { + return await this.create({ + data: BaseModel.asOwnerCreateable(createBy.data), + }); + } + + throw new BadDataException(`Invalid role - ${role}`); + } + + public deleteByForOwner( + deleteBy: DeleteBy + ): PromiseLike { + return this.deleteBy(deleteBy); + } + public deleteByForViewer( + deleteBy: DeleteBy + ): PromiseLike { + return this.deleteBy(deleteBy); + } + public deleteByForPublic( + deleteBy: DeleteBy + ): PromiseLike { + return this.deleteBy(deleteBy); + } + public deleteByForMember( + deleteBy: DeleteBy + ): PromiseLike { + return this.deleteBy(deleteBy); + } + + public deleteByForAdmin( + deleteBy: DeleteBy + ): PromiseLike { + return this.deleteBy(deleteBy); + } + public async deleteBy(deleteBy: DeleteBy): Promise { return await this._deleteBy(deleteBy); } @@ -340,6 +478,33 @@ class DatabaseService { return await this.findBy(findBy); } + public async getListByRole( + role: Role, + findBy: FindBy + ): Promise> { + if (role === Role.Administrator) { + return await this.getListForAdmin(findBy); + } + + if (role === Role.Member) { + return await this.getListForMember(findBy); + } + + if (role === Role.Public) { + return await this.getListForPublic(findBy); + } + + if (role === Role.Viewer) { + return await this.getListForViewer(findBy); + } + + if (role === Role.Owner) { + return await this.getListForOwner(findBy); + } + + throw new BadDataException(`Invalid role - ${role}`); + } + public async getListForPublic( findBy: FindBy ): Promise> { @@ -376,6 +541,33 @@ class DatabaseService { return await this.findOneBy(findOneBy); } + public async getItemByRole( + role: Role, + findOneBy: FindOneBy + ): Promise { + if (role === Role.Administrator) { + return await this.getItemForAdmin(findOneBy); + } + + if (role === Role.Member) { + return await this.getItemForMember(findOneBy); + } + + if (role === Role.Public) { + return await this.getItemForPublic(findOneBy); + } + + if (role === Role.Viewer) { + return await this.getItemForViewer(findOneBy); + } + + if (role === Role.Owner) { + return await this.getItemForOwner(findOneBy); + } + + throw new BadDataException(`Invalid role - ${role}`); + } + public async findBy( findBy: FindBy ): Promise> { @@ -434,6 +626,14 @@ class DatabaseService { return null; } + public async findOneById(id: ObjectID): Promise { + return await this.findOneBy({ + query: { + _id: id.toString() as any, + }, + }); + } + private async _updateBy({ query, data, @@ -476,6 +676,24 @@ class DatabaseService { return await this._updateBy({ query, data }); } + public async updateOneById( + updateById: UpdateByID + ): Promise { + await this.updateOneBy({ + query: { + _id: updateById.id.toString() as any, + }, + data: updateById.data, + }); + } + + public async updateOneByIdAndFetch( + updateById: UpdateByID + ): Promise { + await this.updateOneById(updateById); + return this.findOneById(updateById.id); + } + public async searchBy({ skip, limit, diff --git a/CommonServer/Services/EmailVerificationTokenService.ts b/CommonServer/Services/EmailVerificationTokenService.ts new file mode 100644 index 0000000000..378fbb3cd1 --- /dev/null +++ b/CommonServer/Services/EmailVerificationTokenService.ts @@ -0,0 +1,9 @@ +import PostgresDatabase from '../Infrastructure/PostgresDatabase'; +import Model from 'Common/Models/EmailVerificationToken'; +import DatabaseService from './DatabaseService'; + +export default class Service extends DatabaseService { + public constructor(database: PostgresDatabase) { + super(Model, database); + } +} diff --git a/CommonServer/Services/Index.ts b/CommonServer/Services/Index.ts index 8f69751d97..3050c495a1 100644 --- a/CommonServer/Services/Index.ts +++ b/CommonServer/Services/Index.ts @@ -5,15 +5,26 @@ import GlobalConfigService from './GlobalConfigService'; import ProjectSmtpConfigService from './ProjectSmtpConfigService'; import EmailLogService from './EmailLogService'; import MonitorService from './MonitorService'; +import ProjectService from './ProjectService'; +import EmailVerificationTokenService from './EmailVerificationTokenService'; +import MailService from './MailService'; const postgresDatabase: PostgresDatabase = new PostgresDatabase(); await postgresDatabase.connect(postgresDatabase.getDatasourceOptions()); export default { + //Database Services ProbeService: new ProbeService(postgresDatabase), UserService: new UserService(postgresDatabase), GlobalConfigService: new GlobalConfigService(postgresDatabase), ProjectSmtpConfigService: new ProjectSmtpConfigService(postgresDatabase), EmailLogService: new EmailLogService(postgresDatabase), MonitorService: new MonitorService(postgresDatabase), + ProjectService: new ProjectService(postgresDatabase), + EmailVerificationTokenService: new EmailVerificationTokenService( + postgresDatabase + ), + + // Other Services. + MailService: new MailService(), }; diff --git a/CommonServer/Services/MailService.ts b/CommonServer/Services/MailService.ts new file mode 100644 index 0000000000..572156c89b --- /dev/null +++ b/CommonServer/Services/MailService.ts @@ -0,0 +1,50 @@ +import HTTPResponse from 'Common/Types/API/Response'; +import Route from 'Common/Types/API/Route'; +import URL from 'Common/Types/API/URL'; +import Dictionary from 'Common/Types/Dictionary'; +import Email from 'Common/Types/Email'; +import EmailTemplateType from 'Common/Types/Email/EmailTemplateType'; +import { JSONObject } from 'Common/Types/JSON'; +import ObjectID from 'Common/Types/ObjectID'; +import API from 'Common/Utils/API'; +import { ClusterKey, HttpProtocol, MailHostname } from '../Config'; + +export default class MailService { + public async sendMail( + to: Email, + subject: string, + template: EmailTemplateType, + vars: Dictionary, + options?: { + projectId?: ObjectID; + forceSendFromGlobalMailServer?: boolean; + } + ): Promise { + const body: JSONObject = { + toEmail: to.toString(), + subject, + vars: vars, + }; + + if (options?.projectId) { + body['projectId'] = options.projectId; + } + + if (options?.forceSendFromGlobalMailServer) { + body['forceSendFromGlobalMailServer'] = + options.forceSendFromGlobalMailServer; + } + + return await API.post( + new URL( + HttpProtocol, + MailHostname, + new Route('/email/' + template) + ), + body, + { + clusterkey: ClusterKey.toString(), + } + ); + } +} diff --git a/CommonServer/Types/DB/UpdateByID.ts b/CommonServer/Types/DB/UpdateByID.ts new file mode 100644 index 0000000000..e094115507 --- /dev/null +++ b/CommonServer/Types/DB/UpdateByID.ts @@ -0,0 +1,8 @@ +import BaseModel from 'Common/Models/BaseModel'; +import ObjectID from 'Common/Types/ObjectID'; +import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity'; + +export default interface UpdateBy { + id: ObjectID; + data: QueryDeepPartialEntity; +} diff --git a/CommonServer/Utils/Encryption.ts b/CommonServer/Utils/Encryption.ts index fa31bf8cf7..3dca25a495 100644 --- a/CommonServer/Utils/Encryption.ts +++ b/CommonServer/Utils/Encryption.ts @@ -5,7 +5,7 @@ export default class Encryption { public static encrypt(text: string, iv: Buffer): string { const cipher: Crypto.Cipher = Crypto.createCipheriv( 'aes-256-cbc', - EncryptionSecret, + EncryptionSecret.toString(), iv ); return cipher.update(text, 'utf8', 'hex') + cipher.final('hex'); @@ -14,7 +14,7 @@ export default class Encryption { public static decrypt(encrypted: string, iv: Buffer): string { const decipher: Crypto.Cipher = Crypto.createDecipheriv( 'aes-256-cbc', - EncryptionSecret, + EncryptionSecret.toString(), iv ); return ( diff --git a/CommonServer/Utils/Express.ts b/CommonServer/Utils/Express.ts index 611b6b38e8..8c94c213a0 100644 --- a/CommonServer/Utils/Express.ts +++ b/CommonServer/Utils/Express.ts @@ -2,7 +2,8 @@ import express from 'express'; import logger from './Logger'; import { JSONObjectOrArray } from 'Common/Types/JSON'; import ObjectID from 'Common/Types/ObjectID'; - +import { JSONWebTokenData } from '../Utils/JsonWebToken'; +import Role from 'Common/Types/Role'; export type RequestHandler = express.RequestHandler; export type NextFunction = express.NextFunction; @@ -19,11 +20,22 @@ export type ExpressResponse = express.Response; export type ExpressApplication = express.Application; export type ExpressRouter = express.Router; +export enum AuthorizationType { + API = 'API', + User = 'User', + MasterAdmin = 'MasterAdmin', + Public = 'Public', +} + export interface OneUptimeRequest extends express.Request { probe?: ProbeRequest; id: ObjectID; - requestStartedAt: Date; - requestEndedAt: Date; + requestStartedAt?: Date; + requestEndedAt?: Date; + authorizationType?: string; + userAuthorization?: JSONWebTokenData; + projectId?: ObjectID; + role: Role; } export interface OneUptimeResponse extends express.Response { diff --git a/CommonServer/Utils/JsonWebToken.ts b/CommonServer/Utils/JsonWebToken.ts index 08e9b59630..fc62b4af9f 100644 --- a/CommonServer/Utils/JsonWebToken.ts +++ b/CommonServer/Utils/JsonWebToken.ts @@ -1,11 +1,60 @@ +import Email from 'Common/Types/Email'; +import BadDataException from 'Common/Types/Exception/BadDataException'; +import { JSONArray, JSONObject } from 'Common/Types/JSON'; +import ObjectID from 'Common/Types/ObjectID'; +import UserRole from 'Common/Types/UserRole'; import jwt from 'jsonwebtoken'; import { EncryptionSecret } from '../Config'; +export interface JSONWebTokenData { + userId: ObjectID; + email: Email; + roles: Array; + isMasterAdmin: boolean; +} + class JSONWebToken { - public static sign(data: string, expiresIn: Date): string { - return jwt.sign({ data }, EncryptionSecret, { - expiresIn: String(expiresIn), - }); + public static sign( + data: JSONWebTokenData | string, + expiresIn: Date + ): string { + return jwt.sign( + typeof data !== 'string' + ? { + userId: data.userId.toString(), + email: data.email.toString(), + roles: data.roles.map((role: UserRole): JSONObject => { + return role.toJSON(); + }), + isMasterAdmin: data.isMasterAdmin, + } + : data, + EncryptionSecret.toString(), + { + expiresIn: String(expiresIn), + } + ); + } + + public static decode(token: string): JSONWebTokenData { + try { + const decoded: JSONObject = JSON.parse( + jwt.verify(token, EncryptionSecret.toString()) as string + ); + + return { + userId: new ObjectID(decoded['userId'] as string), + email: new Email(decoded['email'] as string), + roles: (decoded['roles'] as JSONArray).map( + (obj: JSONObject): UserRole => { + return UserRole.fromJSON(obj); + } + ), + isMasterAdmin: Boolean(decoded['isMasterAdmin']), + }; + } catch (e) { + throw new BadDataException('AccessToken is invalid or expired'); + } } } diff --git a/CommonServer/Utils/Response.ts b/CommonServer/Utils/Response.ts index 10946bd3c4..65f1d4cf42 100644 --- a/CommonServer/Utils/Response.ts +++ b/CommonServer/Utils/Response.ts @@ -12,183 +12,205 @@ import Exception from 'Common/Types/Exception/Exception'; import ListData from 'Common/Types/ListData'; import PositiveNumber from 'Common/Types/PositiveNumber'; import URL from 'Common/Types/API/URL'; +import BaseModel from 'Common/Models/BaseModel'; -function logResponse( - req: ExpressRequest, - res: ExpressResponse, - responsebody?: JSONObjectOrArray -): void { - const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; - const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; +export default class Response { + private static logResponse( + req: ExpressRequest, + res: ExpressResponse, + responsebody?: JSONObjectOrArray + ): void { + const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; - const requestEndedAt: Date = new Date(); - const method: string = oneUptimeRequest.method; - const url: URL = URL.fromString(oneUptimeRequest.url); + const requestEndedAt: Date = new Date(); + const method: string = oneUptimeRequest.method; + const url: URL = URL.fromString(oneUptimeRequest.url); - const duration_info: string = `OUTGOING RESPONSE ID: ${ - oneUptimeRequest.id - } -- POD NAME: ${ - process.env['POD_NAME'] || 'NONE' - } -- METHOD: ${method} -- URL: ${url.toString()} -- DURATION: ${( - requestEndedAt.getTime() - oneUptimeRequest.requestStartedAt.getTime() - ).toString()}ms -- STATUS: ${oneUptimeResponse.statusCode}`; + const duration_info: string = `OUTGOING RESPONSE ID: ${ + oneUptimeRequest.id + } -- POD NAME: ${ + process.env['POD_NAME'] || 'NONE' + } -- METHOD: ${method} -- URL: ${url.toString()} -- DURATION: ${( + requestEndedAt.getTime() - + (oneUptimeRequest.requestStartedAt as Date).getTime() + ).toString()}ms -- STATUS: ${oneUptimeResponse.statusCode}`; - const body_info: string = `OUTGOING RESPONSE ID: ${ - oneUptimeRequest.id - } -- RESPONSE BODY: ${ - responsebody ? JSON.stringify(responsebody, null, 2) : 'EMPTY' - }`; + const body_info: string = `OUTGOING RESPONSE ID: ${ + oneUptimeRequest.id + } -- RESPONSE BODY: ${ + responsebody ? JSON.stringify(responsebody, null, 2) : 'EMPTY' + }`; - if (oneUptimeResponse.statusCode > 299) { - logger.error(duration_info); - logger.error(body_info); - } else { - logger.info(duration_info); - logger.info(body_info); + if (oneUptimeResponse.statusCode > 299) { + logger.error(duration_info); + logger.error(body_info); + } else { + logger.info(duration_info); + logger.info(body_info); + } + } + + public static sendEmptyResponse( + req: ExpressRequest, + res: ExpressResponse + ): void { + const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; + + oneUptimeResponse.set( + 'ExpressRequest-Id', + oneUptimeRequest.id.toString() + ); + oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']); + + oneUptimeResponse.status(200).send(); + + return this.logResponse(req, res, undefined); + } + + public static async sendFileResponse( + req: ExpressRequest | ExpressRequest, + res: ExpressResponse, + file: File + ): Promise { + /** Create read stream */ + + const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; + + /* + * const gfs: GridFSBucket = new GridFSBucket(await Database.getDatabase(), { + * bucketName: 'uploads', + * }); + */ + + /* + * const readstream: GridFSBucketReadStream = gfs.openDownloadStreamByName( + * file.name + * ); + */ + + /** Set the proper content type */ + oneUptimeResponse.set('Content-Type', file.contentType); + oneUptimeResponse.status(200); + /** Return response */ + // readstream.pipe(res); + + this.logResponse(req, res); + } + + public static sendErrorResponse( + req: ExpressRequest, + res: ExpressResponse, + error: Exception + ): void { + const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; + + oneUptimeResponse.logBody = { message: error.message }; // To be used in 'auditLog' middleware to log reponse data; + const status: number = error.code || 500; + const message: string = error.message || 'Server Error'; + + logger.error(error); + + oneUptimeResponse.set( + 'ExpressRequest-Id', + oneUptimeRequest.id.toString() + ); + oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']); + + oneUptimeResponse.status(status).send({ message }); + return this.logResponse(req, res, { message }); + } + + public static sendListResponse( + req: ExpressRequest, + res: ExpressResponse, + list: JSONArray | Array, + count: PositiveNumber + ): void { + const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; + + oneUptimeResponse.set( + 'ExpressRequest-Id', + oneUptimeRequest.id.toString() + ); + oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']); + + const listData: ListData = new ListData({ + data: [], + count: new PositiveNumber(0), + skip: new PositiveNumber(0), + limit: new PositiveNumber(0), + }); + + if (!list) { + list = []; + } + + if (list.length > 0 && list[0] instanceof BaseModel) { + listData.data = BaseModel.toJSONArray(list as Array); + } else { + listData.data = list as JSONArray; + } + + if (count) { + listData.count = count; + } else if (list) { + listData.count = new PositiveNumber(list.length); + } + + if (oneUptimeRequest.query['skip']) { + listData.skip = new PositiveNumber( + parseInt(oneUptimeRequest.query['skip'].toString()) + ); + } + + if (oneUptimeRequest.query['limit']) { + listData.limit = new PositiveNumber( + parseInt(oneUptimeRequest.query['limit'].toString()) + ); + } + + if (oneUptimeRequest.query['output-type'] === 'csv') { + const csv: string = JsonToCsv.ToCsv(listData.data); + oneUptimeResponse.status(200).send(csv); + } else { + oneUptimeResponse.status(200).send(listData); + oneUptimeResponse.logBody = listData.toJSON(); // To be used in 'auditLog' middleware to log reponse data; + oneUptimeResponse.status(200).send(listData); + this.logResponse(req, res, listData.toJSON()); + } + } + + public static sendItemResponse( + req: ExpressRequest, + res: ExpressResponse, + item: JSONObject | BaseModel + ): void { + if (item instanceof BaseModel) { + item = item.toJSON(); + } + + const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; + const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; + + oneUptimeResponse.set( + 'ExpressRequest-Id', + oneUptimeRequest.id.toString() + ); + oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']); + + if (oneUptimeRequest.query['output-type'] === 'csv') { + const csv: string = JsonToCsv.ToCsv([item]); + oneUptimeResponse.status(200).send(csv); + this.logResponse(req, res); + return; + } + + oneUptimeResponse.logBody = item; + oneUptimeResponse.status(200).send(item); + this.logResponse(req, res, item); } } - -export const sendEmptyResponse: Function = ( - req: ExpressRequest, - res: ExpressResponse -): void => { - const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; - const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; - - oneUptimeResponse.set('ExpressRequest-Id', oneUptimeRequest.id.toString()); - oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']); - - oneUptimeResponse.status(200).send(); - - return logResponse(req, res, undefined); -}; - -export const sendFileResponse: Function = async ( - req: ExpressRequest | ExpressRequest, - res: ExpressResponse, - file: File -): Promise => { - /** Create read stream */ - - const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; - - /* - * const gfs: GridFSBucket = new GridFSBucket(await Database.getDatabase(), { - * bucketName: 'uploads', - * }); - */ - - /* - * const readstream: GridFSBucketReadStream = gfs.openDownloadStreamByName( - * file.name - * ); - */ - - /** Set the proper content type */ - oneUptimeResponse.set('Content-Type', file.contentType); - oneUptimeResponse.status(200); - /** Return response */ - // readstream.pipe(res); - - logResponse(req, res); -}; - -export const sendErrorResponse: Function = ( - req: ExpressRequest, - res: ExpressResponse, - error: Exception -): void => { - const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; - const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; - - oneUptimeResponse.logBody = { message: error.message }; // To be used in 'auditLog' middleware to log reponse data; - const status: number = error.code || 500; - const message: string = error.message || 'Server Error'; - - logger.error(error); - - oneUptimeResponse.set('ExpressRequest-Id', oneUptimeRequest.id.toString()); - oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']); - - oneUptimeResponse.status(status).send({ message }); - return logResponse(req, res, { message }); -}; - -export const sendListResponse: Function = async ( - req: ExpressRequest, - res: ExpressResponse, - list: JSONArray, - count: PositiveNumber -): Promise => { - const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; - const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; - - oneUptimeResponse.set('ExpressRequest-Id', oneUptimeRequest.id.toString()); - oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']); - - const listData: ListData = new ListData({ - data: [], - count: new PositiveNumber(0), - skip: new PositiveNumber(0), - limit: new PositiveNumber(0), - }); - - if (!list) { - list = []; - } - - if (list) { - listData.data = list; - } - - if (count) { - listData.count = count; - } else if (list) { - listData.count = new PositiveNumber(list.length); - } - - if (oneUptimeRequest.query['skip']) { - listData.skip = new PositiveNumber( - parseInt(oneUptimeRequest.query['skip'].toString()) - ); - } - - if (oneUptimeRequest.query['limit']) { - listData.limit = new PositiveNumber( - parseInt(oneUptimeRequest.query['limit'].toString()) - ); - } - - if (oneUptimeRequest.query['output-type'] === 'csv') { - const csv: string = await JsonToCsv.ToCsv(listData.data); - oneUptimeResponse.status(200).send(csv); - } else { - oneUptimeResponse.status(200).send(listData); - oneUptimeResponse.logBody = listData.toJSON(); // To be used in 'auditLog' middleware to log reponse data; - oneUptimeResponse.status(200).send(listData); - logResponse(req, res, listData.toJSON()); - } -}; - -export const sendItemResponse: Function = async ( - req: ExpressRequest, - res: ExpressResponse, - item: JSONObject -): Promise => { - const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; - const oneUptimeResponse: OneUptimeResponse = res as OneUptimeResponse; - - oneUptimeResponse.set('ExpressRequest-Id', oneUptimeRequest.id.toString()); - oneUptimeResponse.set('Pod-Id', process.env['POD_NAME']); - - if (oneUptimeRequest.query['output-type'] === 'csv') { - const csv: string = JsonToCsv.ToCsv([item]); - oneUptimeResponse.status(200).send(csv); - logResponse(req, res); - return; - } - - oneUptimeResponse.logBody = item; - oneUptimeResponse.status(200).send(item); - logResponse(req, res, item); -}; diff --git a/CommonServer/package.json b/CommonServer/package.json index 100bbd2d67..1558335edf 100644 --- a/CommonServer/package.json +++ b/CommonServer/package.json @@ -1,5 +1,5 @@ { - "name": "CommonServer", + "name": "common-server", "version": "1.0.0", "description": "", "main": "index.ts", diff --git a/CommonUI/package-lock.json b/CommonUI/package-lock.json index 3ead7483f4..682654eaba 100644 --- a/CommonUI/package-lock.json +++ b/CommonUI/package-lock.json @@ -18,6 +18,7 @@ "prop-types": "^15.8.1", "react": "^18.1.0", "react-router": "^6.2.2", + "redux": "^4.2.0", "universal-cookie": "^4.0.4" }, "devDependencies": { @@ -54,10 +55,15 @@ "nanoid": "^3.3.2", "nanoid-dictionary": "^4.3.0", "slugify": "^1.6.5", + "typeorm": "^0.3.6", "uuid": "^8.3.2" }, "devDependencies": { - "@types/node": "^17.0.22" + "@faker-js/faker": "^6.3.1", + "@types/jest": "^27.4.1", + "@types/node": "^17.0.22", + "jest": "^27.5.1", + "ts-jest": "^27.1.4" } }, "node_modules/@babel/runtime": { @@ -145,9 +151,9 @@ "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" }, "node_modules/@types/react": { - "version": "17.0.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.43.tgz", - "integrity": "sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A==", + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz", + "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -219,12 +225,11 @@ } }, "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", + "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" @@ -246,6 +251,14 @@ "react": ">=16.8" } }, + "node_modules/redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", @@ -324,9 +337,9 @@ "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" }, "@types/react": { - "version": "17.0.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.43.tgz", - "integrity": "sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A==", + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz", + "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -341,14 +354,19 @@ "Common": { "version": "file:../Common", "requires": { + "@faker-js/faker": "^6.3.1", + "@types/jest": "^27.4.1", "@types/nanoid-dictionary": "^4.2.0", "@types/node": "^17.0.22", "@types/uuid": "^8.3.4", "axios": "^0.26.1", + "jest": "^27.5.1", "moment": "^2.29.2", "nanoid": "^3.3.2", "nanoid-dictionary": "^4.3.0", "slugify": "^1.6.5", + "ts-jest": "^27.1.4", + "typeorm": "^0.3.6", "uuid": "^8.3.2" } }, @@ -399,12 +417,11 @@ } }, "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", + "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-is": { @@ -420,6 +437,14 @@ "history": "^5.2.0" } }, + "redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, "regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", diff --git a/CommonUI/package.json b/CommonUI/package.json index aee87c2e79..fb58475173 100644 --- a/CommonUI/package.json +++ b/CommonUI/package.json @@ -1,5 +1,5 @@ { - "name": "CommonUI", + "name": "common-ui", "version": "1.0.0", "description": "", "main": "index.ts", @@ -20,6 +20,7 @@ "prop-types": "^15.8.1", "react": "^18.1.0", "react-router": "^6.2.2", + "redux": "^4.2.0", "universal-cookie": "^4.0.4" }, "devDependencies": { diff --git a/CommonUI/src/ActionTypes/ApiBaseActionType.ts b/CommonUI/src/ActionTypes/ApiBaseActionType.ts new file mode 100644 index 0000000000..e45a64f094 --- /dev/null +++ b/CommonUI/src/ActionTypes/ApiBaseActionType.ts @@ -0,0 +1,6 @@ +import { PayloadTypes } from '../PayloadTypes/ApiBasePayloadType'; +import Action from '../Types/Action'; + +export default interface ApiAction extends Action { + payload: PayloadTypes; +} diff --git a/CommonUI/src/ActionTypes/Modal.ts b/CommonUI/src/ActionTypes/ModalActionType.ts similarity index 65% rename from CommonUI/src/ActionTypes/Modal.ts rename to CommonUI/src/ActionTypes/ModalActionType.ts index a74da5888f..899362995d 100644 --- a/CommonUI/src/ActionTypes/Modal.ts +++ b/CommonUI/src/ActionTypes/ModalActionType.ts @@ -1,4 +1,4 @@ -import { PayloadTypes } from '../PayloadTypes/Modal'; +import { PayloadTypes } from '../PayloadTypes/ModalPayloadType'; import Action from '../Types/Action'; export default interface ModalAction extends Action { diff --git a/CommonUI/src/Actions/ApiBaseAction.ts b/CommonUI/src/Actions/ApiBaseAction.ts new file mode 100644 index 0000000000..4b83d98348 --- /dev/null +++ b/CommonUI/src/Actions/ApiBaseAction.ts @@ -0,0 +1,79 @@ +import Action from '../Types/Action'; +import { + ApiRequest, + ApiError, + ApiReset, + ApiSuccess, +} from '../PayloadTypes/ApiBasePayloadType'; +import ApiBaseConstants from '../Constants/ApiBaseConstants'; +import HTTPResponse from 'Common/Types/API/Response'; +import { Dispatch } from 'redux'; +import HTTPErrorResponse from 'Common/Types/API/ErrorResponse'; + +export default class ActionBase { + private _name: string; + private apiBaseConstants: ApiBaseConstants; + public get name(): string { + return this._name; + } + + public constructor(name: string) { + this._name = name; + this.apiBaseConstants = new ApiBaseConstants(name); + } + + public request(apiRequestPayload: ApiRequest): Action { + return new Action({ + type: this.apiBaseConstants.REQUEST, + payload: apiRequestPayload, + }); + } + + public error(apiError: ApiError): Action { + return new Action({ + type: this.apiBaseConstants.ERROR, + payload: apiError, + }); + } + + public success(apiSuccess: ApiSuccess): Action { + return new Action({ + type: this.apiBaseConstants.SUCCESS, + payload: apiSuccess, + }); + } + + public reset(): Action { + const apiReset: ApiReset = {}; + return new Action({ + type: this.apiBaseConstants.RESET, + payload: apiReset, + }); + } + + public requestData(apiRequest: Promise): Function { + return async (dispatch: Dispatch): Promise => { + dispatch( + this.request({ + requesting: true, + httpResponsePromise: apiRequest, + }) + ); + + try { + const response: HTTPResponse = await apiRequest; + + dispatch( + this.success({ + response: response, + }) + ); + } catch (e) { + const errorResponse: HTTPErrorResponse = e as HTTPErrorResponse; + this.error({ + errorResponse: errorResponse, + }); + } + }; + } +} diff --git a/CommonUI/src/Actions/Modal.ts b/CommonUI/src/Actions/ModalAction.ts similarity index 83% rename from CommonUI/src/Actions/Modal.ts rename to CommonUI/src/Actions/ModalAction.ts index 1d05cc4a23..918080b4fb 100755 --- a/CommonUI/src/Actions/Modal.ts +++ b/CommonUI/src/Actions/ModalAction.ts @@ -1,8 +1,8 @@ -import ModalConstants from '../Constants/Modal'; +import ModalConstants from '../Constants/ModalConstants'; import { OpenModalActionPayload, CloseModalActionPayload, -} from '../PayloadTypes/Modal'; +} from '../PayloadTypes/ModalPayloadType'; import Action from '../Types/Action'; export default class ModalAction { diff --git a/CommonUI/src/Components/404.tsx b/CommonUI/src/Components/404.tsx new file mode 100644 index 0000000000..25d63cc933 --- /dev/null +++ b/CommonUI/src/Components/404.tsx @@ -0,0 +1,37 @@ +import React, { FunctionComponent, ReactElement } from 'react'; + +export interface ComponentProps { } + +const NotFound: FunctionComponent = (_props: ComponentProps): ReactElement => { + + return ( +
+
+
+
+
+ The page you requested does not exist. +
+
+
+
+
+ ); + +} +export default NotFound; diff --git a/CommonUI/src/Components/basic/Button.tsx b/CommonUI/src/Components/basic/Button.tsx index 5738d0a40b..ad33f8786a 100644 --- a/CommonUI/src/Components/basic/Button.tsx +++ b/CommonUI/src/Components/basic/Button.tsx @@ -1,5 +1,4 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; +import React, { FunctionComponent, ReactElement, useEffect } from 'react'; import { MouseOnClick, KeyboardEventProp } from '../../Types/HtmlEvents'; export enum ShortcutKey { @@ -17,36 +16,31 @@ export interface ComponentProps { shortcutKey?: ShortcutKey; } -export default class Button extends Component{ - public static displayName = ''; - public static propTypes = {}; +const Button: FunctionComponent = (props: ComponentProps): ReactElement => { - constructor(props: ComponentProps) { - super(props); - } - - override componentDidMount() { - - if (this.props.shortcutKey) { - window.addEventListener('keydown', (e) => this.handleKeyboard(e as KeyboardEventProp)); + useEffect(() => { + // componentDidMount + if (props.shortcutKey) { + window.addEventListener('keydown', (e) => handleKeyboard(e as KeyboardEventProp)); } - } - override componentWillUnmount() { - - if (this.props.shortcutKey) { - window.removeEventListener('keydown', (e) => this.handleKeyboard(e as KeyboardEventProp)); + // componentDidUnmount + return () => { + if (props.shortcutKey) { + window.removeEventListener('keydown', (e) => handleKeyboard(e as KeyboardEventProp)); + } } - } + }) - handleKeyboard(event: KeyboardEventProp) { + + const handleKeyboard = (event: KeyboardEventProp) => { - if (event.target instanceof HTMLBodyElement && event.key && this.props.shortcutKey) { + if (event.target instanceof HTMLBodyElement && event.key && props.shortcutKey) { switch (event.key) { - case this.props.shortcutKey.toUpperCase(): - case this.props.shortcutKey.toLowerCase(): - this.props.onClick && this.props.onClick(); + case props.shortcutKey.toUpperCase(): + case props.shortcutKey.toLowerCase(): + props.onClick && props.onClick(); return; default: return; @@ -54,39 +48,28 @@ export default class Button extends Component{ } } - override render() { - - - return (); - } + + {props.title} + {props.shortcutKey && ( + + {props.shortcutKey} + + )} + + + ); } - -Button.propTypes = { - title: PropTypes.string.isRequired, - onClick: PropTypes.func, - disabled: PropTypes.bool, - id: PropTypes.string, - shortcutKey: PropTypes.string, -}; +export default Button; \ No newline at end of file diff --git a/CommonUI/src/Components/basic/ErrorBoundary.tsx b/CommonUI/src/Components/basic/ErrorBoundary.tsx new file mode 100644 index 0000000000..dc66d2f9cf --- /dev/null +++ b/CommonUI/src/Components/basic/ErrorBoundary.tsx @@ -0,0 +1,45 @@ +import Exception from 'Common/Types/Exception/Exception'; +import React, { FunctionComponent, ReactElement, useState } from 'react'; + +export interface ComponentProps { + children: ReactElement; +} + +const ErrorBoundary: FunctionComponent = (props: ComponentProps): ReactElement => { + + const [error, setError] = useState(null); + + try { + if (!error) { + return props.children; + } + } catch (e) { + const exception = e as Exception; + setError(exception.message); + } + + return ( +
+
+ An unexpected error has occured. Please reload the page + to continue +
+
+ ); +} + +export default ErrorBoundary; diff --git a/CommonUI/src/Components/basic/Icon.tsx b/CommonUI/src/Components/basic/Icon.tsx index 507924cafa..70a113e31d 100644 --- a/CommonUI/src/Components/basic/Icon.tsx +++ b/CommonUI/src/Components/basic/Icon.tsx @@ -1,5 +1,4 @@ -import React from 'react' - +import React, { FunctionComponent, ReactElement } from 'react' import { FontAwesomeIcon, } from '@fortawesome/react-fontawesome' @@ -16,16 +15,15 @@ export enum IconProp { File = "file", } - export interface ComponentProps { icon: IconProp; size: SizeProp; } -const Icon: Function = ({ +const Icon: FunctionComponent = ({ icon, size -}: ComponentProps) => { +}: ComponentProps): ReactElement => { return ( diff --git a/CommonUI/src/Components/basic/Modal.tsx b/CommonUI/src/Components/basic/Modal.tsx new file mode 100644 index 0000000000..d46b33b617 --- /dev/null +++ b/CommonUI/src/Components/basic/Modal.tsx @@ -0,0 +1,47 @@ +import React, { FunctionComponent, ReactElement } from 'react'; + +export interface ComponentProps { + onConfirm?: Function; + onClose: Function; + zIndex: number; + title: string; + body: object; +} + +const Modal: FunctionComponent = (_props: ComponentProps): ReactElement => { + + const mainClass: string = `modal-dialog-view`; + + return ( +
+
+
+ +
+
+
+ ); +} + + +export default Modal; diff --git a/CommonUI/src/Config.ts b/CommonUI/src/Config.ts index e7d1ef893d..5e8a1dbb31 100644 --- a/CommonUI/src/Config.ts +++ b/CommonUI/src/Config.ts @@ -14,10 +14,18 @@ export const BACKEND_HOSTNAME: Hostname = new Hostname( `${window.location.hostname}/api` ); +export const IDENTITY_HOSTNAME: Hostname = new Hostname( + `${window.location.hostname}/identity` +); + export const DASHBOARD_HOSTNAME: Hostname = new Hostname( `${window.location.hostname}/dashboard` ); +export const INTEGRATION_HOSTNAME: Hostname = new Hostname( + `${window.location.hostname}/integration` +); + export const HELM_HOSTNAME: Hostname = new Hostname( `${window.location.hostname}/charts` ); diff --git a/CommonUI/src/Constants/ApiBaseConstants.ts b/CommonUI/src/Constants/ApiBaseConstants.ts new file mode 100644 index 0000000000..aba6aea2ff --- /dev/null +++ b/CommonUI/src/Constants/ApiBaseConstants.ts @@ -0,0 +1,22 @@ +class ApiBaseConstant { + private _name: string; + + public get name(): string { + return this._name; + } + + public constructor(name: string) { + this._name = name; + this.REQUEST += name; + this.ERROR += name; + this.SUCCESS += name; + this.RESET += name; + } + + public REQUEST: string = 'Request'; + public ERROR: string = 'Error'; + public SUCCESS: string = 'Success'; + public RESET: string = 'Reset'; +} + +export default ApiBaseConstant; diff --git a/CommonUI/src/Constants/Modal.ts b/CommonUI/src/Constants/ModalConstants.ts similarity index 100% rename from CommonUI/src/Constants/Modal.ts rename to CommonUI/src/Constants/ModalConstants.ts diff --git a/CommonUI/src/PayloadTypes/ApiBasePayloadType.ts b/CommonUI/src/PayloadTypes/ApiBasePayloadType.ts new file mode 100644 index 0000000000..e7eda623d9 --- /dev/null +++ b/CommonUI/src/PayloadTypes/ApiBasePayloadType.ts @@ -0,0 +1,19 @@ +import HTTPErrorResponse from 'Common/Types/API/ErrorResponse'; +import HTTPResponse from 'Common/Types/API/Response'; +import ActionPayload from '../Types/ActionPayload'; + +export interface ApiRequest extends ActionPayload { + requesting: boolean; + httpResponsePromise: Promise; +} +export interface ApiError extends ActionPayload { + errorResponse: HTTPErrorResponse; +} + +export interface ApiSuccess extends ActionPayload { + response: HTTPResponse; +} + +export interface ApiReset extends ActionPayload {} + +export type PayloadTypes = ApiRequest | ApiError | ApiSuccess | ApiReset; diff --git a/CommonUI/src/PayloadTypes/Error.ts b/CommonUI/src/PayloadTypes/ErrorPayloadType.ts similarity index 100% rename from CommonUI/src/PayloadTypes/Error.ts rename to CommonUI/src/PayloadTypes/ErrorPayloadType.ts diff --git a/CommonUI/src/PayloadTypes/Modal.ts b/CommonUI/src/PayloadTypes/ModalPayloadType.ts similarity index 100% rename from CommonUI/src/PayloadTypes/Modal.ts rename to CommonUI/src/PayloadTypes/ModalPayloadType.ts diff --git a/CommonUI/src/Reducers/ApiBase.ts b/CommonUI/src/Reducers/ApiBase.ts new file mode 100644 index 0000000000..aa8f59b4be --- /dev/null +++ b/CommonUI/src/Reducers/ApiBase.ts @@ -0,0 +1,67 @@ +import ApiBaseConstants from '../Constants/ApiBaseConstants'; +import Action from '../Types/Action'; +import { + ApiRequest, + ApiError, + ApiSuccess, +} from '../PayloadTypes/ApiBasePayloadType'; +import HTTPResponse from 'Common/Types/API/Response'; +import HTTPErrorResponse from 'Common/Types/API/ErrorResponse'; + +export interface InitialStateType { + requesting: boolean; + data: HTTPResponse | null; + error: HTTPErrorResponse | null; + success: boolean; +} + +export default class ApiBaseReducer { + private constants: ApiBaseConstants; + private _name: string; + + public get name(): string { + return this._name; + } + + public constructor(name: string) { + this._name = name; + this.constants = new ApiBaseConstants(this.name); + } + + private initialState: InitialStateType = { + requesting: false, + data: null, + error: null, + success: false, + }; + + public getInitialState(): InitialStateType { + return this.initialState; + } + + public getReducer(): Function { + return ( + state: InitialStateType = this.initialState, + action: Action + ): InitialStateType => { + switch (action.type) { + case this.constants.REQUEST + this.name: + return Object.assign({}, state, { + requesting: (action.payload as ApiRequest).requesting, + }); + case this.constants.ERROR + this.name: + return Object.assign({}, state, { + error: (action.payload as ApiError).errorResponse, + }); + case this.constants.RESET + this.name: + return Object.assign({}, state, this.initialState); + case this.constants.SUCCESS + this.name: + return Object.assign({}, state, { + success: (action.payload as ApiSuccess).response, + }); + default: + return state; + } + }; + } +} diff --git a/CommonUI/src/Reducers/Modal.ts b/CommonUI/src/Reducers/Modal.ts index 0500bab874..ef06792422 100755 --- a/CommonUI/src/Reducers/Modal.ts +++ b/CommonUI/src/Reducers/Modal.ts @@ -1,9 +1,9 @@ -import ModalConstant from '../Constants/Modal'; -import ModalAction from '../ActionTypes/Modal'; +import ModalConstant from '../Constants/ModalConstants'; +import ModalAction from '../ActionTypes/ModalActionType'; import { CloseModalActionPayload, OpenModalActionPayload, -} from '../PayloadTypes/Modal'; +} from '../PayloadTypes/ModalPayloadType'; export interface InitialStateType { modals: Array; diff --git a/CommonUI/src/Utils/API/Backend.ts b/CommonUI/src/Utils/API/BaseAPI.ts old mode 100755 new mode 100644 similarity index 82% rename from CommonUI/src/Utils/API/Backend.ts rename to CommonUI/src/Utils/API/BaseAPI.ts index 65f567074d..42acae6840 --- a/CommonUI/src/Utils/API/Backend.ts +++ b/CommonUI/src/Utils/API/BaseAPI.ts @@ -1,4 +1,3 @@ -import { BACKEND_HOSTNAME, API_PROTOCOL } from '../../Config'; import User from '../User'; import history from '../History'; import Headers from 'Common/Types/API/Headers'; @@ -6,10 +5,12 @@ import API from 'Common/Utils/API'; import APIException from 'Common/Types/Exception/ApiException'; import HTTPErrorResponse from 'Common/Types/API/ErrorResponse'; import Cookies from 'universal-cookie'; +import Protocol from 'Common/Types/API/Protocol'; +import Hostname from 'Common/Types/API/Hostname'; -class BackendAPI extends API { - public constructor() { - super(API_PROTOCOL, BACKEND_HOSTNAME); +class BaseAPI extends API { + public constructor(protocol: Protocol, hostname: Hostname) { + super(protocol, hostname); } protected static override getHeaders(): Headers { @@ -43,4 +44,4 @@ class BackendAPI extends API { } } -export default new BackendAPI(); +export default BaseAPI; diff --git a/CommonUI/src/Utils/API/DashboardBackend.ts b/CommonUI/src/Utils/API/DashboardBackend.ts new file mode 100755 index 0000000000..cfd9a47b82 --- /dev/null +++ b/CommonUI/src/Utils/API/DashboardBackend.ts @@ -0,0 +1,10 @@ +import { BACKEND_HOSTNAME, API_PROTOCOL } from '../../Config'; +import BaseAPI from './BaseAPI'; + +class BackendAPI extends BaseAPI { + public constructor() { + super(API_PROTOCOL, BACKEND_HOSTNAME); + } +} + +export default new BackendAPI(); diff --git a/CommonUI/src/Utils/API/Identity.ts b/CommonUI/src/Utils/API/Identity.ts new file mode 100755 index 0000000000..ed8ab8805b --- /dev/null +++ b/CommonUI/src/Utils/API/Identity.ts @@ -0,0 +1,10 @@ +import { IDENTITY_HOSTNAME, API_PROTOCOL } from '../../Config'; +import BaseAPI from './BaseAPI'; + +class BackendAPI extends BaseAPI { + public constructor() { + super(API_PROTOCOL, IDENTITY_HOSTNAME); + } +} + +export default new BackendAPI(); diff --git a/CommonUI/src/Utils/API/Integration.ts b/CommonUI/src/Utils/API/Integration.ts new file mode 100644 index 0000000000..208f3cd7ee --- /dev/null +++ b/CommonUI/src/Utils/API/Integration.ts @@ -0,0 +1,10 @@ +import { INTEGRATION_HOSTNAME, API_PROTOCOL } from '../../Config'; +import BaseAPI from './BaseAPI'; + +class BackendAPI extends BaseAPI { + public constructor() { + super(API_PROTOCOL, INTEGRATION_HOSTNAME); + } +} + +export default new BackendAPI(); diff --git a/ContainerScanner/package.json b/ContainerScanner/package.json index 98ca6fc425..d9f151a6d2 100644 --- a/ContainerScanner/package.json +++ b/ContainerScanner/package.json @@ -1,5 +1,5 @@ { - "name": "ContainerScanner", + "name": "container-scanner", "version": "3.0.0", "description": "A Container Security Scanner", "main": "index.ts", diff --git a/HelmChart/package.json b/HelmChart/package.json index 77dc7421d8..3cee57000a 100644 --- a/HelmChart/package.json +++ b/HelmChart/package.json @@ -1,5 +1,5 @@ { - "name": "HelmChart", + "name": "helm-chart", "version": "3.0.0", "description": "Helm Chart Server for OneUptime", "main": "server.js", diff --git a/HttpTestServer/package.json b/HttpTestServer/package.json index acab56a501..c084d6e35e 100644 --- a/HttpTestServer/package.json +++ b/HttpTestServer/package.json @@ -1,5 +1,5 @@ { - "name": "HttpTestServer", + "name": "http-test-server", "version": "1.0.0", "private": false, "main": "server.js", diff --git a/Identity/API/AuthenticationAPI.ts b/Identity/API/AuthenticationAPI.ts new file mode 100644 index 0000000000..58d73d0852 --- /dev/null +++ b/Identity/API/AuthenticationAPI.ts @@ -0,0 +1,155 @@ +import { + AccountsHostname, + DashboardHostname, + DisableSignup, + HomeHostname, + HttpProtocol, + IsSaaSService, +} from 'CommonServer/Config'; +import Express, { + ExpressRequest, + ExpressResponse, + ExpressRouter, +} from 'CommonServer/Utils/Express'; +import BadRequestException from 'Common/Types/Exception/BadRequestException'; +import { JSONObject } from 'Common/Types/JSON'; +import User from 'Common/Models/User'; +import Service from 'CommonServer/Services/Index'; +import EmailVerificationTokenServiceType from 'CommonServer/Services/EmailVerificationTokenService'; +import UserServiceType from 'CommonServer/Services/UserService'; +import ObjectID from 'Common/Types/ObjectID'; +import EmailVerificationToken from 'Common/Models/EmailVerificationToken'; +import BadDataException from 'Common/Types/Exception/BadDataException'; +import MailServiceType from 'CommonServer/Services/MailService'; +import EmailTemplateType from 'Common/Types/Email/EmailTemplateType'; +import EmailSubjects from 'Common/Types/Email/EmailSubjects'; +import URL from 'Common/Types/API/URL'; +import Response from 'CommonServer/Utils/Response'; +import JSONWebToken from 'CommonServer/Utils/JsonWebToken'; +import OneUptimeDate from 'Common/Types/Date'; +import PositiveNumber from 'Common/Types/PositiveNumber'; + +const UserService: UserServiceType = Service.UserService; +const EmailVerificationTokenService: EmailVerificationTokenServiceType = + Service.EmailVerificationTokenService; +const MailService: MailServiceType = Service.MailService; + +const router: ExpressRouter = Express.getRouter(); + +router.post( + '/signup', + async (req: ExpressRequest, res: ExpressResponse): Promise => { + if (DisableSignup) { + throw new BadRequestException('Sign up is disabled.'); + } + + const data: JSONObject = req.body; + const user: User = User.asPublicCreateable( + data['user'] as JSONObject + ); + + if (IsSaaSService) { + //ALERT: Delete data.role so user don't accidently sign up as master-admin from the API. + user.isMasterAdmin = false; + user.isEmailVerified = false; + } + + let verificationToken: ObjectID | null = null; + let emailVerificationToken: EmailVerificationToken | null = null; + if (req.query['token']) { + verificationToken = new ObjectID(req.query['token'] as string); + emailVerificationToken = + await EmailVerificationTokenService.findOneBy({ + query: { + token: verificationToken, + }, + }); + } + + const alreadySavedUser: User | null = await UserService.findOneBy({ + query: { email: user.email }, + select: { + _id: true, + password: true, + }, + }); + + if ( + emailVerificationToken && + user && + user.id.toString() === emailVerificationToken.userId.toString() + ) { + user.isEmailVerified = true; + } + + if (alreadySavedUser && alreadySavedUser.password) { + throw new BadDataException( + `User with email ${user.email} already exists.` + ); + } + + let savedUser: User | null = null; + if (alreadySavedUser) { + savedUser = await UserService.updateOneByIdAndFetch({ + id: alreadySavedUser.id, + data: user, + }); + } else { + savedUser = await UserService.create({ data: user }); + } + + if (alreadySavedUser) { + // Send Welcome Mail + MailService.sendMail( + user.email, + EmailSubjects.getSubjectByType( + EmailTemplateType.SIGNUP_WELCOME_EMAIL + ), + EmailTemplateType.SIGNUP_WELCOME_EMAIL, + { + name: user.name.toString(), + dashboardUrl: new URL( + HttpProtocol, + DashboardHostname + ).toString(), + homeUrl: new URL(HttpProtocol, HomeHostname).toString(), + } + ); + } else { + // Send EmailVerification Link because this is a new user. + MailService.sendMail( + user.email, + EmailSubjects.getSubjectByType( + EmailTemplateType.SIGNUP_WELCOME_EMAIL + ), + EmailTemplateType.SIGNUP_WELCOME_EMAIL, + { + name: user.name.toString(), + emailVerificationUrl: new URL( + HttpProtocol, + AccountsHostname + ).toString(), + homeUrl: new URL(HttpProtocol, HomeHostname).toString(), + } + ); + } + + if (savedUser) { + const token: string = JSONWebToken.sign( + { + userId: savedUser?.id, + email: savedUser?.email, + isMasterAdmin: savedUser?.isMasterAdmin, + roles: [], + }, + OneUptimeDate.getSomeDaysAfter(new PositiveNumber(30)) + ); + + return Response.sendItemResponse(req, res, { token: token }); + } + + throw new BadRequestException('Failed to create a user'); + } +); + +export default router; diff --git a/Licensing/src/Api/License.ts b/Licensing/src/Api/License.ts index f8c6417d5e..32be82f66b 100644 --- a/Licensing/src/Api/License.ts +++ b/Licensing/src/Api/License.ts @@ -5,10 +5,7 @@ import Express, { } from 'CommonServer/Utils/Express'; import PositiveNumber from 'Common/Types/PositiveNumber'; const router: ExpressRouter = Express.getRouter(); -import { - sendErrorResponse, - sendItemResponse, -} from 'CommonServer/Utils/Response'; +import Response from 'CommonServer/Utils/Response'; import Email from 'Common/Types/Email'; import BadDataException from 'Common/Types/Exception/BadDataException'; @@ -21,7 +18,7 @@ router.post('/', async (req: ExpressRequest, res: ExpressResponse) => { const data: JSONObject = req.body; if (!data['license']) { - return sendErrorResponse( + return Response.sendErrorResponse( req, res, new BadDataException('License must be present.') @@ -29,7 +26,7 @@ router.post('/', async (req: ExpressRequest, res: ExpressResponse) => { } if (typeof data['license'] !== 'string') { - return sendErrorResponse( + return Response.sendErrorResponse( req, res, new BadDataException('License is not in string format.') @@ -37,7 +34,7 @@ router.post('/', async (req: ExpressRequest, res: ExpressResponse) => { } if (!data['email']) { - return sendErrorResponse( + return Response.sendErrorResponse( req, res, new BadDataException('Email must be present.') @@ -45,7 +42,7 @@ router.post('/', async (req: ExpressRequest, res: ExpressResponse) => { } if (typeof data['email'] !== 'string') { - return sendErrorResponse( + return Response.sendErrorResponse( req, res, new BadDataException('Email is not in string format.') @@ -62,9 +59,9 @@ router.post('/', async (req: ExpressRequest, res: ExpressResponse) => { limit ); - return sendItemResponse(req, res, item); + return Response.sendItemResponse(req, res, { license: item }); } catch (error) { - return sendErrorResponse(req, res, error as Exception); + return Response.sendErrorResponse(req, res, error as Exception); } }); diff --git a/LighthouseRunner/package.json b/LighthouseRunner/package.json index cf763e87df..56525ed22e 100644 --- a/LighthouseRunner/package.json +++ b/LighthouseRunner/package.json @@ -1,5 +1,5 @@ { - "name": "LighthouseRunner", + "name": "lighthouse-runner", "version": "3.0.0", "description": "Lighthouse Runner for Url Monitor", "main": "index.ts", diff --git a/Mail/API/Mail.ts b/Mail/API/Mail.ts index 042644f5bc..956c0f0c10 100644 --- a/Mail/API/Mail.ts +++ b/Mail/API/Mail.ts @@ -4,11 +4,7 @@ import Express, { ExpressRouter, } from 'CommonServer/Utils/Express'; const router: ExpressRouter = Express.getRouter(); -import { - sendErrorResponse, - sendEmptyResponse, -} from 'CommonServer/Utils/Response'; -import Exception from 'Common/Types/Exception/Exception'; +import Response from 'CommonServer/Utils/Response'; import ClusterKeyAuthorization from 'CommonServer/Middleware/ClusterKeyAuthorization'; import MailService from '../Services/MailService'; import Mail from '../Types/Mail'; @@ -20,29 +16,25 @@ import ObjectID from 'Common/Types/ObjectID'; router.post( '/:template-name', - ClusterKeyAuthorization.isAuthorizedService, + ClusterKeyAuthorization.isAuthorizedServiceMiddleware, async (req: ExpressRequest, res: ExpressResponse) => { - try { - const body: JSONObject = req.body; + const body: JSONObject = req.body; - const mail: Mail = { - templateType: req.params['template-name'] as EmailTemplateType, - toEmail: new Email(body['toEmail'] as string), - subject: body['subject'] as string, - vars: body['vars'] as Dictionary, - body: '', - }; + const mail: Mail = { + templateType: req.params['template-name'] as EmailTemplateType, + toEmail: new Email(body['toEmail'] as string), + subject: body['subject'] as string, + vars: body['vars'] as Dictionary, + body: '', + }; - await MailService.send( - mail, - new ObjectID(body['projectId'] as string), - body['forceSendFromGlobalMailServer'] as boolean - ); + await MailService.send( + mail, + new ObjectID(body['projectId'] as string), + body['forceSendFromGlobalMailServer'] as boolean + ); - return sendEmptyResponse(req, res); - } catch (error) { - return sendErrorResponse(req, res, error as Exception); - } + return Response.sendEmptyResponse(req, res); } ); diff --git a/Mail/Index.ts b/Mail/Index.ts index 4ec6142ae5..815d23291e 100644 --- a/Mail/Index.ts +++ b/Mail/Index.ts @@ -4,6 +4,6 @@ import app from 'CommonServer/Utils/StartServer'; import MailAPI from './API/Mail'; -app.use(['/mail/email', '/email'], MailAPI); +app.use('/mail/email', MailAPI); export default app; diff --git a/Mail/Templates/SignupVerificationEmail.hbs b/Mail/Templates/SignupVerificationEmail.hbs new file mode 100644 index 0000000000..b7af512f41 --- /dev/null +++ b/Mail/Templates/SignupVerificationEmail.hbs @@ -0,0 +1,511 @@ + + + + + + Welcome to OneUptime. Please verify your email. + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + OneUptime + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + +
+
+
+ +

Welcome To OneUptime

+ +
+
+
+
+
+ + + + + + + + + + + +
+
+
+ + + Hi {{name}}, + + + +
+
+
+
+ + + + + + + + + + + +
+
+
+ + + I'm Nawaz and I'm the founder of OneUptime. I can't thank you enough for signing up. + + + +
+
+
+
+ + + + + + + + + + + +
+
+
+
+
+
+
+ + + + + + + + + + + +
+
+
+ + + Thanks, have a great day. + + + +
+
+
+
+ + + + + + + + + + + +
+
+
+ + + OneUptime Team. + + + +
+
+
+
+ + + + + + + + + + + +
+
+
+ + + + + + + + +
+ + Verify Email + +
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
 
+
+ + diff --git a/Mail/Templates/sign_up_body.hbs b/Mail/Templates/SignupWelcomeEmail.hbs similarity index 100% rename from Mail/Templates/sign_up_body.hbs rename to Mail/Templates/SignupWelcomeEmail.hbs diff --git a/ProbeAPI/API/Probe.ts b/ProbeAPI/API/Probe.ts index b9b47c8ae4..22f05e13de 100755 --- a/ProbeAPI/API/Probe.ts +++ b/ProbeAPI/API/Probe.ts @@ -9,10 +9,7 @@ import Express, { import Service from 'CommonServer/Services/Index'; import MonitorServiceClass from 'CommonServer/Services/MonitorService'; import ProbeAuthorization from 'CommonServer/Middleware/ProbeAuthorization'; -import { - sendErrorResponse, - sendListResponse, -} from 'CommonServer/Utils/Response'; +import Response from 'CommonServer/Utils/Response'; import Exception from 'Common/Types/Exception/Exception'; import PositiveNumber from 'Common/Types/PositiveNumber'; import Monitor from 'Common/Models/Monitor'; @@ -22,7 +19,7 @@ const router: ExpressRouter = Express.getRouter(); router.get( '/monitors', - ProbeAuthorization.isAuthorizedProbe, + ProbeAuthorization.isAuthorizedProbeMiddleware, async (req: ExpressRequest, res: ExpressResponse) => { try { const oneUptimeRequest: OneUptimeRequest = req as OneUptimeRequest; @@ -36,9 +33,14 @@ router.get( limit ); - return sendListResponse(req, res, monitors, monitors.length); + return Response.sendListResponse( + req, + res, + monitors, + new PositiveNumber(monitors.length) + ); } catch (error) { - return sendErrorResponse(req, res, error as Exception); + return Response.sendErrorResponse(req, res, error as Exception); } } ); diff --git a/ProbeAPI/package.json b/ProbeAPI/package.json index ed110bc111..fa81c358dc 100644 --- a/ProbeAPI/package.json +++ b/ProbeAPI/package.json @@ -1,5 +1,5 @@ { - "name": "ProbeAPI", + "name": "probe-api", "version": "3.0.0", "description": "A project to handle all resource fetching or update for probes", "main": "index.ts", diff --git a/Realtime/api/realtime.ts b/Realtime/API/Realtime.ts similarity index 77% rename from Realtime/api/realtime.ts rename to Realtime/API/Realtime.ts index fdbdc0f6fa..07168bf756 100644 --- a/Realtime/api/realtime.ts +++ b/Realtime/API/Realtime.ts @@ -4,10 +4,7 @@ import Express, { ExpressRouter, } from 'CommonServer/Utils/Express'; const router: ExpressRouter = Express.getRouter(); -import { - sendErrorResponse, - sendEmptyResponse, -} from 'CommonServer/Utils/Response'; +import Response from 'CommonServer/Utils/Response'; import Exception from 'Common/Types/Exception/Exception'; import ClusterKeyAuthorization from 'CommonServer/Middleware/ClusterKeyAuthorization'; import RealtimeService from '../Services/RealtimeService'; @@ -16,7 +13,7 @@ import { JSONObject } from 'Common/Types/JSON'; router.post( ':project-id/:event-type', - ClusterKeyAuthorization.isAuthorizedService, + ClusterKeyAuthorization.isAuthorizedServiceMiddleware, async (req: ExpressRequest, res: ExpressResponse) => { try { const body: JSONObject = req.body; @@ -25,9 +22,9 @@ router.post( req.params['eventType'] as string, body ); - return sendEmptyResponse(req, res); + return Response.sendEmptyResponse(req, res); } catch (error) { - return sendErrorResponse(req, res, error as Exception); + return Response.sendErrorResponse(req, res, error as Exception); } } ); diff --git a/ScriptRunner/package.json b/ScriptRunner/package.json index 4a08b62c20..b8003e677c 100644 --- a/ScriptRunner/package.json +++ b/ScriptRunner/package.json @@ -1,5 +1,5 @@ { - "name": "ScriptRunner", + "name": "script-runner", "version": "1.0.0", "description": "automation script runner", "main": "index.ts", diff --git a/StatusPage/package.json b/StatusPage/package.json index 2b0263efc5..d8e0f55c29 100755 --- a/StatusPage/package.json +++ b/StatusPage/package.json @@ -1,5 +1,5 @@ { - "name": "StatusPage", + "name": "status-page", "version": "3.0.0", "private": false, "type": "module",