From 586cf3e581ae514e6473ebcba56f5f879024c04b Mon Sep 17 00:00:00 2001 From: Kshitij Sobti Date: Tue, 14 Sep 2021 16:34:18 +0530 Subject: [PATCH] Remove Object.assign Use arrays for pages instead of a map --- .eslintrc.js | 1 + package-lock.json | 1108 ++++++++----------- package.json | 8 +- src/discussions/comments/data/redux.test.js | 6 +- src/discussions/comments/data/slices.js | 18 +- src/discussions/comments/data/thunks.js | 4 +- src/discussions/posts/PostsView.jsx | 2 +- src/discussions/posts/data/redux.test.js | 4 +- src/discussions/posts/data/selectors.js | 22 +- src/discussions/posts/data/slices.js | 52 +- src/discussions/posts/data/thunks.js | 10 +- 11 files changed, 534 insertions(+), 701 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2e15316a..54f1f532 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,6 +4,7 @@ module.exports = createConfig('eslint', { "plugins": ["simple-import-sort"], "rules": { + 'import/no-extraneous-dependencies': 'off', 'simple-import-sort/imports': [ 'error', { groups: [ diff --git a/package-lock.json b/package-lock.json index 340d48ca..c6e22f95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3618,12 +3618,12 @@ } }, "@edx/frontend-platform": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-1.12.5.tgz", - "integrity": "sha512-cqeyc+2rWvuaCxsKaqET5DEO7p++5MsXfsDhMBiHrH4CqhmwkMt4YVrnmHP5vrW+ZGbF53LMMwAnV1oyU+dCzw==", + "version": "1.12.6", + "resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-1.12.6.tgz", + "integrity": "sha512-bhifApR/XmQij8HcxDoCSrjf7WZvwpOIqFRJDmdNBGVCkpCsG3jOXVDUUgpi5nH0WeASb+XN+V/f8jFcInWNgw==", "requires": { "@cospired/i18n-iso-languages": "2.2.0", - "axios": "0.21.3", + "axios": "0.21.4", "axios-cache-adapter": "2.7.3", "form-urlencoded": "4.1.4", "glob": "7.1.7", @@ -3651,9 +3651,9 @@ } }, "@edx/paragon": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/@edx/paragon/-/paragon-16.12.0.tgz", - "integrity": "sha512-LW0fkLIhc/Ls7QAkLjgfu+GvCzrbATe8WH5Lrxo63MUvOU+f4wpjuMi1P4I9bJhAd7dA5Z2stXWhhKyyeCcigg==", + "version": "16.13.2", + "resolved": "https://registry.npmjs.org/@edx/paragon/-/paragon-16.13.2.tgz", + "integrity": "sha512-vj9zgc9WddMYBLnfZWrXRpXutz9oClQ2CNsLERBhjCNNUKBUj0jApdRfuJ9aRYWgEJSs8kPVBd0PiFd5SNCdeQ==", "requires": { "@fortawesome/fontawesome-svg-core": "^1.2.30", "@fortawesome/free-solid-svg-icons": "^5.14.0", @@ -6285,18 +6285,11 @@ } }, "axios": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.3.tgz", - "integrity": "sha512-JtoZ3Ndke/+Iwt5n+BgSli/3idTvpt5OjKyoCmz4LX5+lPiY5l7C1colYezhlxThjNa/NhngCUWZSZFypIFuaA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "requires": { "follow-redirects": "^1.14.0" - }, - "dependencies": { - "follow-redirects": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", - "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==" - } } }, "axios-cache-adapter": { @@ -6308,6 +6301,25 @@ "md5": "^2.2.1" } }, + "axios-mock-adapter": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.20.0.tgz", + "integrity": "sha512-shZRhTjLP0WWdcvHKf3rH3iW9deb3UdKbdnKUoHmmsnBhVXN3sjPJM6ZvQ2r/ywgvBVQrMnjrSyQab60G1sr2w==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "is-blob": "^2.1.0", + "is-buffer": "^2.0.5" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -8027,9 +8039,9 @@ "dev": true }, "core-js": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.17.2.tgz", - "integrity": "sha512-XkbXqhcXeMHPRk2ItS+zQYliAMilea2euoMsnpRRdDad6b2VY6CQQcwz1K8AnWesfw4p165RzY0bTnr3UrbYiA==" + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.17.3.tgz", + "integrity": "sha512-lyvajs+wd8N1hXfzob1LdOCCHFU4bGMbqqmLn1Q4QlCpDqWPpGf+p0nj+LNrvDDG33j0hZXw2nsvvVpHysxyNw==" }, "core-js-compat": { "version": "3.17.2", @@ -10396,8 +10408,7 @@ "follow-redirects": { "version": "1.14.3", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", - "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==", - "dev": true + "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==" }, "font-awesome": { "version": "4.7.0", @@ -10583,21 +10594,22 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "version": "1.18.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", + "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", + "is-regex": "^1.1.4", + "is-string": "^1.0.7", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", @@ -10606,6 +10618,11 @@ "unbox-primitive": "^1.0.1" } }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -10713,6 +10730,15 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -12162,6 +12188,12 @@ "binary-extensions": "^1.0.0" } }, + "is-blob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", + "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==", + "dev": true + }, "is-boolean-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", @@ -12700,60 +12732,60 @@ } }, "jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz", + "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==", "dev": true, "requires": { - "@jest/core": "^27.1.0", + "@jest/core": "^27.2.0", "import-local": "^3.0.2", - "jest-cli": "^27.1.0" + "jest-cli": "^27.2.0" }, "dependencies": { "@jest/console": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.0.tgz", - "integrity": "sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz", + "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.1.0", - "jest-util": "^27.1.0", + "jest-message-util": "^27.2.0", + "jest-util": "^27.2.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.0.tgz", - "integrity": "sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz", + "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/reporters": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.2.0", + "@jest/reporters": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.1.0", - "jest-config": "^27.1.0", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-changed-files": "^27.1.1", + "jest-config": "^27.2.0", + "jest-haste-map": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-resolve-dependencies": "^27.1.0", - "jest-runner": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", - "jest-watcher": "^27.1.0", + "jest-resolve": "^27.2.0", + "jest-resolve-dependencies": "^27.2.0", + "jest-runner": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", + "jest-watcher": "^27.2.0", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -12762,53 +12794,53 @@ } }, "@jest/environment": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.0.tgz", - "integrity": "sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz", + "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==", "dev": true, "requires": { - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/fake-timers": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0" + "jest-mock": "^27.1.1" } }, "@jest/fake-timers": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.0.tgz", - "integrity": "sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz", + "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-message-util": "^27.2.0", + "jest-mock": "^27.1.1", + "jest-util": "^27.2.0" } }, "@jest/globals": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.0.tgz", - "integrity": "sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz", + "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/types": "^27.1.0", - "expect": "^27.1.0" + "@jest/environment": "^27.2.0", + "@jest/types": "^27.1.1", + "expect": "^27.2.0" } }, "@jest/reporters": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.0.tgz", - "integrity": "sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz", + "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -12819,10 +12851,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-haste-map": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -12842,45 +12874,45 @@ } }, "@jest/test-result": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.0.tgz", - "integrity": "sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz", + "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.2.0", + "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz", - "integrity": "sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz", + "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==", "dev": true, "requires": { - "@jest/test-result": "^27.1.0", + "@jest/test-result": "^27.2.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-runtime": "^27.1.0" + "jest-haste-map": "^27.2.0", + "jest-runtime": "^27.2.0" } }, "@jest/transform": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.0.tgz", - "integrity": "sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz", + "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-util": "^27.1.0", + "jest-util": "^27.2.0", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -12889,9 +12921,9 @@ } }, "@jest/types": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.0.tgz", - "integrity": "sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.1.tgz", + "integrity": "sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -12939,25 +12971,25 @@ } }, "babel-jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.0.tgz", - "integrity": "sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz", + "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==", "dev": true, "requires": { - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.2.0", + "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.6", + "babel-preset-jest": "^27.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" } }, "babel-plugin-jest-hoist": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", - "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", + "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -12967,12 +12999,12 @@ } }, "babel-preset-jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", - "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", + "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.0.6", + "babel-plugin-jest-hoist": "^27.2.0", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -13007,17 +13039,6 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -13074,16 +13095,16 @@ } }, "expect": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.0.tgz", - "integrity": "sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz", + "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6" }, "dependencies": { @@ -13123,12 +13144,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, "is-ci": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", @@ -13151,75 +13166,75 @@ "dev": true }, "jest-changed-files": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.0.tgz", - "integrity": "sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.1.tgz", + "integrity": "sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-cli": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.0.tgz", - "integrity": "sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz", + "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==", "dev": true, "requires": { - "@jest/core": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/core": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-config": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "prompts": "^2.0.1", "yargs": "^16.0.3" } }, "jest-config": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.0.tgz", - "integrity": "sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz", + "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.1.0", - "@jest/types": "^27.1.0", - "babel-jest": "^27.1.0", + "@jest/test-sequencer": "^27.2.0", + "@jest/types": "^27.1.1", + "babel-jest": "^27.2.0", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.1.0", - "jest-environment-jsdom": "^27.1.0", - "jest-environment-node": "^27.1.0", + "jest-circus": "^27.2.0", + "jest-environment-jsdom": "^27.2.0", + "jest-environment-node": "^27.2.0", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.1.0", + "jest-jasmine2": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-runner": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.2.0", + "jest-runner": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0" + "pretty-format": "^27.2.0" } }, "jest-diff": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.0.tgz", - "integrity": "sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz", + "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.2.0" } }, "jest-docblock": { @@ -13232,45 +13247,45 @@ } }, "jest-each": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.0.tgz", - "integrity": "sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz", + "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0" + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0" } }, "jest-environment-jsdom": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz", - "integrity": "sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz", + "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0", + "jest-mock": "^27.1.1", + "jest-util": "^27.2.0", "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.0.tgz", - "integrity": "sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz", + "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-mock": "^27.1.1", + "jest-util": "^27.2.0" } }, "jest-get-type": { @@ -13280,12 +13295,12 @@ "dev": true }, "jest-haste-map": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.0.tgz", - "integrity": "sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz", + "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -13294,84 +13309,84 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz", - "integrity": "sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz", + "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.1.0", + "@jest/environment": "^27.2.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.1.0", + "expect": "^27.2.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0", + "jest-each": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0", "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz", - "integrity": "sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz", + "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==", "dev": true, "requires": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.2.0" } }, "jest-matcher-utils": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz", - "integrity": "sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz", + "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.1.0", + "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.2.0" } }, "jest-message-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.0.tgz", - "integrity": "sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz", + "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0", + "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.0.tgz", - "integrity": "sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.1.tgz", + "integrity": "sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*" } }, @@ -13382,78 +13397,78 @@ "dev": true }, "jest-resolve": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.0.tgz", - "integrity": "sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz", + "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.2.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz", - "integrity": "sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz", + "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.1.0" + "jest-snapshot": "^27.2.0" } }, "jest-runner": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.0.tgz", - "integrity": "sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz", + "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.2.0", + "@jest/environment": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.1.0", - "jest-environment-node": "^27.1.0", - "jest-haste-map": "^27.1.0", - "jest-leak-detector": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-environment-jsdom": "^27.2.0", + "jest-environment-node": "^27.2.0", + "jest-haste-map": "^27.2.0", + "jest-leak-detector": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.0.tgz", - "integrity": "sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz", + "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/globals": "^27.1.0", + "@jest/console": "^27.2.0", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", + "@jest/globals": "^27.2.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", + "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -13462,14 +13477,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", + "jest-haste-map": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -13486,9 +13501,9 @@ } }, "jest-snapshot": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.0.tgz", - "integrity": "sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz", + "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -13497,33 +13512,33 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.2.0", + "@jest/types": "^27.1.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.1.0", + "expect": "^27.2.0", "graceful-fs": "^4.2.4", - "jest-diff": "^27.1.0", + "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", + "jest-haste-map": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-util": "^27.2.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.1.0", + "pretty-format": "^27.2.0", "semver": "^7.3.2" } }, "jest-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.0.tgz", - "integrity": "sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz", + "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -13532,38 +13547,38 @@ } }, "jest-validate": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.0.tgz", - "integrity": "sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz", + "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.1.0" + "pretty-format": "^27.2.0" } }, "jest-watcher": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.0.tgz", - "integrity": "sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz", + "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==", "dev": true, "requires": { - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.1.0", + "jest-util": "^27.2.0", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", - "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz", + "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==", "dev": true, "requires": { "@types/node": "*", @@ -13582,15 +13597,6 @@ } } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -13617,12 +13623,12 @@ "dev": true }, "pretty-format": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.0.tgz", - "integrity": "sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz", + "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -13681,30 +13687,12 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -13747,50 +13735,6 @@ "requires": { "isexe": "^2.0.0" } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true } } }, @@ -13896,81 +13840,81 @@ } }, "jest-circus": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.0.tgz", - "integrity": "sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz", + "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.1.0", + "expect": "^27.2.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0", + "jest-each": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "dependencies": { "@jest/console": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.0.tgz", - "integrity": "sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz", + "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.1.0", - "jest-util": "^27.1.0", + "jest-message-util": "^27.2.0", + "jest-util": "^27.2.0", "slash": "^3.0.0" } }, "@jest/environment": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.0.tgz", - "integrity": "sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz", + "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==", "dev": true, "requires": { - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/fake-timers": "^27.2.0", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0" + "jest-mock": "^27.1.1" } }, "@jest/fake-timers": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.0.tgz", - "integrity": "sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz", + "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-message-util": "^27.2.0", + "jest-mock": "^27.1.1", + "jest-util": "^27.2.0" } }, "@jest/globals": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.0.tgz", - "integrity": "sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz", + "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/types": "^27.1.0", - "expect": "^27.1.0" + "@jest/environment": "^27.2.0", + "@jest/types": "^27.1.1", + "expect": "^27.2.0" } }, "@jest/source-map": { @@ -13985,33 +13929,33 @@ } }, "@jest/test-result": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.0.tgz", - "integrity": "sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz", + "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.2.0", + "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/transform": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.0.tgz", - "integrity": "sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz", + "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-util": "^27.1.0", + "jest-util": "^27.2.0", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -14020,9 +13964,9 @@ } }, "@jest/types": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.0.tgz", - "integrity": "sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.1.tgz", + "integrity": "sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14100,17 +14044,6 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -14161,16 +14094,16 @@ } }, "expect": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.0.tgz", - "integrity": "sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz", + "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6" }, "dependencies": { @@ -14210,12 +14143,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, "is-ci": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", @@ -14238,28 +14165,28 @@ "dev": true }, "jest-diff": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.0.tgz", - "integrity": "sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz", + "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.2.0" } }, "jest-each": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.0.tgz", - "integrity": "sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz", + "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0" + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0" } }, "jest-get-type": { @@ -14269,12 +14196,12 @@ "dev": true }, "jest-haste-map": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.0.tgz", - "integrity": "sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz", + "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -14283,48 +14210,48 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-matcher-utils": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz", - "integrity": "sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz", + "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.1.0", + "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.2.0" } }, "jest-message-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.0.tgz", - "integrity": "sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz", + "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0", + "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.0.tgz", - "integrity": "sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.1.tgz", + "integrity": "sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*" } }, @@ -14335,37 +14262,37 @@ "dev": true }, "jest-resolve": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.0.tgz", - "integrity": "sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz", + "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.2.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-runtime": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.0.tgz", - "integrity": "sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz", + "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/globals": "^27.1.0", + "@jest/console": "^27.2.0", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", + "@jest/globals": "^27.2.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", + "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -14374,14 +14301,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", + "jest-haste-map": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -14398,9 +14325,9 @@ } }, "jest-snapshot": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.0.tgz", - "integrity": "sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz", + "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -14409,33 +14336,33 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.2.0", + "@jest/types": "^27.1.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.1.0", + "expect": "^27.2.0", "graceful-fs": "^4.2.4", - "jest-diff": "^27.1.0", + "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", + "jest-haste-map": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-util": "^27.2.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.1.0", + "pretty-format": "^27.2.0", "semver": "^7.3.2" } }, "jest-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.0.tgz", - "integrity": "sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz", + "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -14444,23 +14371,23 @@ } }, "jest-validate": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.0.tgz", - "integrity": "sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz", + "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.1.0" + "pretty-format": "^27.2.0" } }, "jest-worker": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", - "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz", + "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==", "dev": true, "requires": { "@types/node": "*", @@ -14479,15 +14406,6 @@ } } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -14514,12 +14432,12 @@ "dev": true }, "pretty-format": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.0.tgz", - "integrity": "sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz", + "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -14569,30 +14487,12 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -14616,50 +14516,6 @@ "requires": { "isexe": "^2.0.0" } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true } } }, @@ -18665,9 +18521,9 @@ } }, "react-bootstrap": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.6.1.tgz", - "integrity": "sha512-ojEPQ6OtyIMdLg0Smofk+85PKN6MLKQX3bU0Vwmok/4yNa8DQ2vCGhO2IgHJvT+ERQZ4X+gAQcdn6msAHSwLBg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.6.3.tgz", + "integrity": "sha512-zsd4l0g68pusOmJ/R5LhTfofT+9RniCwcZsMMNFGJo97d1vT1H2nGlbhLWp/j/pfeXXj9zzR8ugUtKkadcoWnA==", "requires": { "@babel/runtime": "^7.14.0", "@restart/context": "^2.1.4", @@ -18682,7 +18538,7 @@ "invariant": "^2.2.4", "prop-types": "^15.7.2", "prop-types-extra": "^1.1.0", - "react-overlays": "^5.0.1", + "react-overlays": "^5.1.1", "react-transition-group": "^4.4.1", "uncontrollable": "^7.2.1", "warning": "^4.0.3" @@ -19669,6 +19525,12 @@ "glob": "^7.1.3" } }, + "rosie": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/rosie/-/rosie-2.1.0.tgz", + "integrity": "sha512-Dbzdc+prLXZuB/suRptDnBUY29SdGvND3bLg6cll8n7PNqzuyCxSlRfrkn8PqjS9n4QVsiM7RCvxCkKAkTQRjA==", + "dev": true + }, "rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", diff --git a/package.json b/package.json index 59c9eabb..2582bc53 100644 --- a/package.json +++ b/package.json @@ -38,12 +38,12 @@ "@edx/brand": "npm:@edx/brand-openedx@1.1.0", "@edx/frontend-component-footer": "10.1.6", "@edx/frontend-component-header": "2.3.0", - "@edx/frontend-platform": "1.12.5", - "@edx/paragon": "16.12.0", + "@edx/frontend-platform": "1.12.6", + "@edx/paragon": "16.13.2", "@reduxjs/toolkit": "1.6.1", "@tinymce/tinymce-react": "3.12.6", "babel-polyfill": "6.26.0", - "core-js": "3.17.2", + "core-js": "3.17.3", "formik": "2.2.6", "lodash.snakecase": "4.1.1", "prop-types": "15.7.2", @@ -66,7 +66,7 @@ "eslint-plugin-simple-import-sort": "7.0.0", "glob": "7.1.7", "husky": "7.0.2", - "jest": "27.1.0", + "jest": "27.2.0", "reactifex": "1.1.1", "rosie": "2.1.0" } diff --git a/src/discussions/comments/data/redux.test.js b/src/discussions/comments/data/redux.test.js index 626ad714..09a090f0 100644 --- a/src/discussions/comments/data/redux.test.js +++ b/src/discussions/comments/data/redux.test.js @@ -46,7 +46,7 @@ describe('Comments/Responses data layer tests', () => { expect(store.getState().comments.commentsInThreads) .toEqual({ 'test-thread': ['comment-1', 'comment-2', 'comment-3'] }); expect(store.getState().comments.pages) - .toEqual({ 1: ['comment-1', 'comment-2', 'comment-3'] }); + .toEqual([['comment-1', 'comment-2', 'comment-3']]); expect(Object.keys(store.getState().comments.commentsById)) .toEqual(['comment-1', 'comment-2', 'comment-3']); expect(store.getState().comments.commentsById['comment-1']) @@ -137,7 +137,7 @@ describe('Comments/Responses data layer tests', () => { expect(store.getState().comments.commentsById) .toHaveProperty(commentId); - expect(store.getState().comments.pages[1]) + expect(store.getState().comments.pages[0]) .toContain(commentId); axiosMock.onDelete(`${commentsApiUrl}${commentId}/`) @@ -148,7 +148,7 @@ describe('Comments/Responses data layer tests', () => { expect(store.getState().comments.commentsById) .not .toHaveProperty(commentId); - expect(store.getState().comments.pages[1]) + expect(store.getState().comments.pages[0]) .not .toContain(commentId); expect(store.getState().comments.commentsInThreads[threadId]) diff --git a/src/discussions/comments/data/slices.js b/src/discussions/comments/data/slices.js index 2b286227..4af89369 100644 --- a/src/discussions/comments/data/slices.js +++ b/src/discussions/comments/data/slices.js @@ -16,7 +16,7 @@ const commentsSlice = createSlice({ commentsById: { // Map comment ids to comments. }, - pages: {}, + pages: [], // Stores the comment being posted in case it needs to be reposted due to network failure. // TODO: save in localstorage so user can continue editing? commentDraft: null, @@ -30,10 +30,10 @@ const commentsSlice = createSlice({ }, fetchCommentsSuccess: (state, { payload }) => { state.status = RequestStatus.SUCCESSFUL; - state.pages[payload.page] = payload.ids; - Object.assign(state.commentsInThreads, payload.commentsInThreads); - Object.assign(state.commentsInComments, payload.commentsInComments); - Object.assign(state.commentsById, payload.commentsById); + state.pages[payload.page - 1] = payload.ids; + state.commentsInThreads = { ...state.commentsInThreads, ...payload.commentsInThreads }; + state.commentsInComments = { ...state.commentsInComments, ...payload.commentsInComments }; + state.commentsById = { ...state.commentsById, ...payload.commentsById }; state.totalPages = payload.pagination.numPages; state.totalThreads = payload.pagination.count; }, @@ -54,8 +54,8 @@ const commentsSlice = createSlice({ }, fetchCommentResponsesSuccess: (state, { payload }) => { state.status = RequestStatus.SUCCESSFUL; - Object.assign(state.commentsInComments, payload.commentsInComments); - Object.assign(state.commentsById, payload.commentsById); + state.commentsInComments = { ...state.commentsInComments, ...payload.commentsInComments }; + state.commentsById = { ...state.commentsById, ...payload.commentsById }; }, postCommentRequest: (state, { payload }) => { state.postStatus = RequestStatus.IN_PROGRESS; @@ -108,9 +108,7 @@ const commentsSlice = createSlice({ if (parentId) { state.commentsInComments[parentId] = state.commentsInComments[parentId].filter(item => item !== commentId); } - Object.keys(state.pages).forEach(page => { - state.pages[page] = state.pages[page].filter(item => item !== commentId); - }); + state.pages = state.pages.map(page => page?.filter(item => item !== commentId)); delete state.commentsById[commentId]; }, }, diff --git a/src/discussions/comments/data/thunks.js b/src/discussions/comments/data/thunks.js index 827b362c..68a31474 100644 --- a/src/discussions/comments/data/thunks.js +++ b/src/discussions/comments/data/thunks.js @@ -72,14 +72,14 @@ function normaliseComments(data) { }; } -export function fetchThreadComments(threadId, { page } = {}) { +export function fetchThreadComments(threadId, { page = 1 } = {}) { return async (dispatch) => { try { dispatch(fetchCommentsRequest({ threadId })); const data = await getThreadComments(threadId, { page }); dispatch(fetchCommentsSuccess({ ...normaliseComments(camelCaseObject(data)), - page: page || 1, + page, })); } catch (error) { if (getHttpErrorStatus(error) === 403) { diff --git a/src/discussions/posts/PostsView.jsx b/src/discussions/posts/PostsView.jsx index f393e826..348730bd 100644 --- a/src/discussions/posts/PostsView.jsx +++ b/src/discussions/posts/PostsView.jsx @@ -38,7 +38,7 @@ function PostsView({ showOwnPosts }) { } else if (showOwnPosts) { posts = useSelector(selectUserThreads(authenticatedUser.username)); } else { - posts = useSelector(selectAllThreads()); + posts = useSelector(selectAllThreads); } useEffect(() => { // The courseId from the URL is the course we WANT to load. diff --git a/src/discussions/posts/data/redux.test.js b/src/discussions/posts/data/redux.test.js index 0bd3fc44..0e1d7148 100644 --- a/src/discussions/posts/data/redux.test.js +++ b/src/discussions/posts/data/redux.test.js @@ -47,7 +47,7 @@ describe('Threads/Posts data layer tests', () => { expect(store.getState().threads.threadsInTopic) .toEqual({ 'test-topic': ['thread-1', 'thread-2', 'thread-3'] }); expect(store.getState().threads.pages) - .toEqual({ 1: ['thread-1', 'thread-2', 'thread-3'] }); + .toEqual([['thread-1', 'thread-2', 'thread-3']]); expect(Object.keys(store.getState().threads.threadsById)) .toEqual(['thread-1', 'thread-2', 'thread-3']); expect(store.getState().threads.threadsById['thread-1']) @@ -133,7 +133,7 @@ describe('Threads/Posts data layer tests', () => { expect(store.getState().threads.threadsById) .not .toHaveProperty(threadId); - expect(store.getState().threads.pages[1]) + expect(store.getState().threads.pages[0]) .not .toContain(threadId); expect(store.getState().threads.threadsInTopic['test-topic']) diff --git a/src/discussions/posts/data/selectors.js b/src/discussions/posts/data/selectors.js index 8a6e8e66..33b55d73 100644 --- a/src/discussions/posts/data/selectors.js +++ b/src/discussions/posts/data/selectors.js @@ -27,22 +27,20 @@ export const selectAllThreadsOnPage = (page) => createSelector( mapIdsToThreads, ); -export const selectAllThreads = () => state => { - let threads = []; - let page = 1; - while (state.threads.pages[page]?.length) { - threads = threads.concat(selectAllThreadsOnPage(page)(state)); - page += 1; - } - return threads; -}; +export const selectAllThreads = createSelector( + [ + state => state.threads.pages, + selectThreads, + ], + (pages, threads) => pages.flatMap(ids => mapIdsToThreads(ids, threads)), +); export const threadsLoadingStatus = () => state => state.threads.status; +// TODO: eventually this should be server-side filtering export const selectUserThreads = author => createSelector( - [selectThreads], - (threads) => Object.values(threads) - .filter(thread => thread.author === author), + [selectAllThreads], + threads => threads.filter(thread => thread.author === author), ); export const selectThreadSorting = () => state => state.threads.sortedBy; diff --git a/src/discussions/posts/data/slices.js b/src/discussions/posts/data/slices.js index 297f59d7..eb7391e7 100644 --- a/src/discussions/posts/data/slices.js +++ b/src/discussions/posts/data/slices.js @@ -9,31 +9,6 @@ import { ThreadOrdering, } from '../../../data/constants'; -function normaliseProfileImage(currentThread, newThread) { - newThread.authorAvatars = newThread.users - ? newThread.users?.[newThread.author].profile.image - : currentThread?.authorAvatars; - return newThread; -} - -function normaliseThreads(state, rawThreadsData) { - const { - topicThreadMap: topics, - threads, - } = state; - rawThreadsData.forEach( - thread => { - if (!topics[thread.topicId]) { - topics[thread.topicId] = []; - } - if (!topics[thread.topicId].includes(thread.id)) { - topics[thread.topicId].push(thread.id); - } - threads[thread.id] = normaliseProfileImage(threads[thread.id], thread); - }, - ); -} - const threadsSlice = createSlice({ name: 'thread', initialState: { @@ -47,7 +22,7 @@ const threadsSlice = createSlice({ threadsById: { // Mapping of threads ids to threads in them }, - pages: {}, + pages: [], threadDraft: null, totalPages: null, totalThreads: null, @@ -68,10 +43,10 @@ const threadsSlice = createSlice({ }, fetchThreadsSuccess: (state, { payload }) => { state.status = RequestStatus.SUCCESSFUL; - state.pages[payload.page] = payload.ids; - Object.assign(state.threadsById, payload.threadsById); - Object.assign(state.threadsInTopic, payload.threadsInTopic); - Object.assign(state.avatars, payload.avatars); + state.pages[payload.page - 1] = payload.ids; + state.threadsById = { ...state.threadsById, ...payload.threadsById }; + state.threadsInTopic = { ...state.threadsInTopic, ...payload.threadsInTopic }; + state.avatars = { ...state.avatars, ...payload.avatars }; state.totalPages = payload.pagination.numPages; state.totalThreads = payload.pagination.count; }, @@ -86,8 +61,8 @@ const threadsSlice = createSlice({ }, fetchThreadSuccess: (state, { payload }) => { state.status = RequestStatus.SUCCESSFUL; - Object.assign(state.threadsById, payload.threadsById); - Object.assign(state.avatars, payload.avatars); + state.threadsById = { ...state.threadsById, ...payload.threadsById }; + state.avatars = { ...state.avatars, ...payload.avatars }; }, fetchThreadFailed: (state) => { state.status = RequestStatus.FAILED; @@ -104,8 +79,8 @@ const threadsSlice = createSlice({ state.threadsById[payload.id] = payload; state.threadsInTopic[payload.topicId].push(payload.id); // Temporarily add it to the top of the list so it's visible - state.pages[1] = [payload.id] + (state.pages[1] || []); - Object.assign(state.avatars, payload.users); + state.pages[0] = [payload.id].concat(state.pages[0] || []); + state.avatars = { ...state.avatars, ...payload.avatars }; state.redirectToThread = { topicId: payload.topicId, threadId: payload.id }; state.threadDraft = null; }, @@ -121,8 +96,8 @@ const threadsSlice = createSlice({ }, updateThreadSuccess: (state, { payload }) => { state.postStatus = RequestStatus.SUCCESSFUL; - Object.assign(state.threadsById[payload.id], payload); - Object.assign(state.avatars, payload.avatars); + state.threadsById[payload.id] = { ...state.threadsById[payload.id], ...payload }; + state.avatars = { ...state.avatars, ...payload.avatars }; state.threadDraft = null; }, updateThreadFailed: (state) => { @@ -139,10 +114,7 @@ const threadsSlice = createSlice({ const { topicId } = state.threadsById[threadId]; state.postStatus = RequestStatus.SUCCESSFUL; state.threadsInTopic[topicId] = state.threadsInTopic[topicId].filter(item => item !== threadId); - Object.keys(state.pages) - .forEach(page => { - state.pages[page] = state.pages[page].filter(item => item !== threadId); - }); + state.pages = state.pages.map(page => page?.filter(item => item !== threadId)); delete state.threadsById[threadId]; }, deleteThreadFailed: (state) => { diff --git a/src/discussions/posts/data/thunks.js b/src/discussions/posts/data/thunks.js index 95e3b157..5e2c660b 100644 --- a/src/discussions/posts/data/thunks.js +++ b/src/discussions/posts/data/thunks.js @@ -54,7 +54,7 @@ function normaliseThreads(data) { } const threadsInTopic = {}; const threadsById = {}; - const avatars = {}; + let avatars = {}; const ids = []; threads.forEach( thread => { @@ -67,7 +67,7 @@ function normaliseThreads(data) { threadsInTopic[topicId].push(id); } threadsById[id] = thread; - Object.assign(avatars, thread.users); + avatars = { ...avatars, ...thread.users }; }, ); return { @@ -81,17 +81,19 @@ function normaliseThreads(data) { * @param {[string]} topicIds List of topics to limit threads to * @param {ThreadOrdering} orderBy The results will be sorted on this basis. * @param {ThreadFilter} filters The set of filters to apply to the thread. + * @param {number} page Page to fetch * @returns {(function(*): Promise)|*} */ export function fetchThreads(courseId, { topicIds, orderBy, filters = {}, - page, + page = 1, } = {}) { const options = { orderBy, topicIds, + page, }; if (filters.status === PostsStatusFilter.FOLLOWING) { options.following = true; @@ -107,7 +109,7 @@ export function fetchThreads(courseId, { dispatch(fetchThreadsRequest({ courseId })); const data = await getThreads(courseId, options); const normalisedData = normaliseThreads(camelCaseObject(data)); - dispatch(fetchThreadsSuccess({ ...normalisedData, page: page || 1 })); + dispatch(fetchThreadsSuccess({ ...normalisedData, page })); } catch (error) { if (getHttpErrorStatus(error) === 403) { dispatch(fetchThreadsDenied());